Данный скрипт предназначен для автоматического развертывания и запуска nodejs приложений на сервере из репозиториев GitHub с последующим автоматическим обновлением кода на сервере при push на GitHub и автоматическим перезапуском приложения на сервере.
- У Вас есть репозиторий на GitHub
- Скрипт разворачивает приложение на сервере
- При обновлении кода в репозитории (push), код автоматически обновляется на сервере
- После чего скрипт автоматически билдит и запускает приложение на сервере с помощью pm2
За пример возьмем домен deployer.site.com (или site.com/deployer)
- в корне запускаем
yarn init
- указываем главный скрипт
main
какindex.js
- инсталлируем
yarn add github-nodejs-shell-server-updater
- создаем
index.js
- в нем пишем код, конечно с Вашими настройками
const Deployer = require('github-nodejs-shell-server-updater');
const config = [
{
git_hub_repo_name: 'repo-name',
git_hub_repo_url: 'https://github.com/User/repo-name',
git_hub_secret: 'your-secret-string-for-github-updates',
git_hub_branch_to_deploy: 'main',
site_path_to_dir_where_cloned_code: '/../site.com', //относительно этого файла (директория в которой будет или есть клонированная директория репозитория, слэш в начале обязателен)
site_port_to_deploy: '3000', //just Node variable PORT=3000
node_packet_manager: 'yarn',
node_build_command: 'build',
node_start_command: 'start',
node_environment: 'production', //just Node variable NODE_ENV=production
},
];
new Deployer(config, 6768);
-
затем запускаем скрипт
node ./index.js
-
при первом запуске:
- скрипт перейдет в директорию сайта
- клонирует репозиторий в директорию repo-name (git_hub_repo_name)
- выполнит команду build из конфига (node_build_command)
- с помощью pm2 выполнит команду start из конфига (node_start_command)
- выполнит команду pm2 save
- запустит сервер на порту 6768 (второй аргумент конструктора класса) для прослушивания уведомлений (github hook)
- конечно, Вам нужно настроить конфигурацию
deployer.site.com
, если у Васnginx
, то она будет выглядеть примерно так:
location / { proxy_set_header Connection ''; proxy_read_timeout 180s; proxy_set_header Host $host; proxy_buffering off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://127.0.0.1:6768; }
-
теперь нужно настроить GitHub
- Идем в настройки репозитория repo-name https://github.com/User/repo-name/settings
- В настройках видим Webhooks
- Добавляем hook с Payload URL
deployer.site.com
(илиили site.com/deployer
) иSecret
из конфига git_hub_secret
Теперь, когда Вы запушите обновление, например, с локального компа, в этот репозиторий, GitHub отправит уведомление на указанный в настройках адрес, а скрипт обновит код и перезапустит приложение на сервере.