Skip to content

Instantly share code, notes, and snippets.

@ilyushchenko
Forked from zmts/deployProd.md
Created October 6, 2020 21:35
Show Gist options
  • Save ilyushchenko/75efa0227152a0351993413ed3b2cc29 to your computer and use it in GitHub Desktop.
Save ilyushchenko/75efa0227152a0351993413ed3b2cc29 to your computer and use it in GitHub Desktop.
Размещение Node.js приложения в продакшин среде (deploy)

Размещение Node.js приложения в продакшин среде

  • deploy-srv - Сервер автодеплоя
  • deploy-url - Домен/url рамещения сервера автодеплоя (deploy.super.com, super.com\api\deploy)
  • vcs - (github, gitlab, bitbucket ...)

Flow процесса деплоя

Предварительно регистрируем git webhook на deploy-url в вашем vcs

  1. Программист делает git push
  2. vcs дергает хук который в свою очередь обращается к POST deploy-url
  3. deploy-srv получает запрос с секретным ключом(проверяем его), смотрит на req.body.ref и если заначение равно refs/heads/master вызывает скрипт деплоя приложеня

Файловая структура

  • Корневая директория приложения /var/www/super-app/
  • Директория для API /var/www/super-app/api-repo
  • Директория для клиента (front-end) /var/www/super-app/client-repo

В корневую директорию клонируем репозитории API и клиента. Настраиваем скрипты автодеплоя в соотвествии с этими папками.

Сервис автодеплоя

https://github.com/zmts/autodeploy-node

Небольшой самописный node.js сервер при обращении к которому запускается процесс деплоя ваших приложений.

Диспетчер приложений PM2

super-api.pm2-config.json for typical api

{
  "name" : "super-api",
  "script": "/var/www/super-site/api-repo/bin/www", // initial script path
  "instances": 1,
  "max_memory_restart": "1000M",
  "interpreter_args": "--max-old-space-size=1024",
  "env_production": {
    "NODE_ENV": "production"
  }
}

ssr.pm2-config.json for Nuxt.js SSR

{
  "name" : "my-nuxt-ssr",
  "script": "npm",
  "args": "run start",
  "interpreter_args": "--max-old-space-size=1024",
  "instances": 1,
  "max_memory_restart": "1000M",
  "env_production": {
    "NODE_ENV": "production",
    "NUXT_HOST": "localhost",
    "NUXT_PORT": 7000
  }
}
"max_memory_restart": "1000M" // is working
"max_memory_restart": "1G" // is not working

Стартуем приложение не от рутового юзера sudo -Hu not_root_user pm2 restart super-api.pm2-config.json --env production

Переменные окружения

Переменные окружения выносим в .env файл

HOST = 'localhost'
PROTOCOL = 'http'
PORT = 4000
SOME_API_KEY = 'key-4959b5b46fbf1f506ec5c407ba5883ad'
ADMIN_EMAIL = '[email protected]'

https://coderrocketfuel.com/article/deploy-a-nodejs-application-to-digital-ocean-with-https motdotla/dotenv#229

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment