Проект Typescript Node.js — развертывание в производственном рабочем процессе

Как настроить дистрибутивную сборку и рабочий процесс производственного развертывания для моего серверного приложения Node.js? (API NestJS)?

Мой текущий рабочий процесс:

  1. Зафиксировать изменения в production ветке
  2. Рабочий сервер с pm2 автоматически извлекает изменения из этого репозитория.
  3. Автоматический npm install на prod-сервере.
  4. Автоматический npm run build на prod-сервере.
  5. Автоматический pm2 start на prod-сервере.

Основная проблема, которую я вижу в этом рабочем процессе, заключается в том, что я запускаю сборку на рабочем сервере. Это означает, что мне нужны все devDependencies на сервере, а также я делаю скачки производительности на сервере при сборке.

Я уже настроил GitHub Actions в своем репозитории, чтобы создать свой код и сохранить его как артефакт при фиксации, но теперь я застрял.

  • Должен ли я зафиксировать построенный исходный код в репозитории, а затем использовать хук pm2 в производстве?
  • Should I download artifact by some script to production, unpack it and run it? I see few problems here:
    • /dist folder (artifact) does not have package.json and assets
    • Я потерял функциональность Git, поэтому мне нужно всегда удалять старый исходный код и распаковывать новый исходный код.

person Baterka    schedule 02.04.2020    source источник


Ответы (1)


У меня нет всей информации, которая мне нужна, но я думаю, вам следует запустить этап сборки в инструменте CI/CD (например, TravisCI) и затем отправить содержимое папки /dist на рабочий сервер. Тогда pm2 будет запускать только эту производственную сборку.

person Boris K    schedule 02.04.2020
comment
Именно так я это и планирую, но тогда я должен зафиксировать построенный код в git, чтобы pm2 смог правильно его вытащить? - person Baterka; 02.04.2020
comment
Есть много способов сделать это. Вы можете зафиксировать построенный код в git (например, в отдельной ветке-сироте) или загрузить его на сервер, используя ssh/scp, прямо из конвейера CI/CD! Я бы сделал сценарий оболочки, который может быть вызван либо вами, либо CI/CD, который развертывает содержимое /dist на рабочем сервере. - person Boris K; 02.04.2020
comment
Другим решением будет использование пакетов Github, которые действуют как частный репозиторий npm. Вы можете развернуть свое приложение в виде пакета и попросить производственный сервер установить его. - person Boris K; 02.04.2020