# Размещение 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 = 'hello@gmail.com' ``` https://coderrocketfuel.com/article/deploy-a-nodejs-application-to-digital-ocean-with-https https://github.com/motdotla/dotenv/issues/229