Эта статья была первоначально опубликована день ранее в https://maximorlov.com/automated-deployments-from-github-with-webhook/
Хостинг вашего приложения на VPS вместо платформы-AS-A-Service у вас пропустить на крутых функциях, таких как автоматические развертывания.
Разве это не будет классно Если у вас были eroku-подобные авто-развертыванию на вашем сервере? 💫
Но как они Даже Работа? Как можно узнать о настройке автоматических развертываний для приложения?
Возможность толкать ваши изменения и увидеть их жить через несколько секунд, позже будет Майор повышение производительности для занятого разработчика, как и вы.
В этом руководстве вы ускорите свой рабочий процесс, создав автоматические развертывания для вашего приложения. 💨
Цели Мы получим рабочий процесс, где производственное приложение находится в синхронизации с главной веткой репозитория. Другими словами, последний коммит на главной отрасли всегда тот же код, который запускает живое приложение.
Это экономия времени, потому что вам не нужно смотреть, какая версия вашего кода в настоящее время развернута. Вы всегда сможете обратиться к главной отрасли в качестве производственного отделения.
Обзор Для достижения нашей цели нам нужно:
- Добавьте веб -ook на GitHub, который назовет нашу конечную точку каждый раз, когда мы нажимаем на репозиторий
- Создайте конечную точку с помощью WebHook, который запускает скрипт RedePox, когда он получает запрос от GitHub
- Напишите сценарий повторного развертывания, который вытесняет последний коммит от GitHub и перезагружает приложение
Требования Чтобы следовать, вам понадобится:
- Безопасный экземпляр VPS С доступом SSH и возможность запустить команды как sudo
- Node.js Приложение работает в производстве и управление версией на GitHub
- Обратный прокси (Nginx/Apache) и базовые знания о настройке его
Предпочитаю видео? В этом Живая запись на YouTube Я иду через этот урок и все полностью настроил с нуля. Если вам нравится учиться, наблюдая за другими, вы обязательно должны проверить это.
Шаг 1 — Добавить репозиторий веб -ook на GitHub
Чтобы добавить веб -ook в существующий репозиторий, перейдите на страницу репозитория GitHUB и перейдите в «Настройки»> «Веб-вики». Нажмите на «Добавить веб -ook».
Добавьте веб -ook со следующими настройками:
- URL полезной нагрузки — пользовательский домен, который указывает на ваш сервер или публичный IP-адрес вашего сервера, а затем
/крючки/
и имя вашего приложения (E.g.:https://yourdomain.com/hooks/nodejs-app
) - Тип содержимого — Выберите
Приложение/JSON.
- Секрет — Общий секрет между GitHub и вашим сервером. Без этого любой мог порекомендовать ваше приложение, позвонив в конечную точку. Мне нравится использовать RandomKeygen Чтобы генерировать защищенные строки для такого рода вещей
- SSL проверка — появится только, если вы заполнили URL полезной нагрузки, которая начинается с HTTPS. Предполагая, что у вас есть рабочий сертификат SSL для вашего домена, оставьте эту опцию включено
- Какие события вы хотели бы вызвать этот веб -ook? — опция по умолчанию: «Просто
Push
событие». - Активный — Снимите этот вариант этой опции. После того, как мы активируем крюк после того, как мы создадим конечную точку на сервере
Шаг 2 — Создайте конечную точку с помощью WebHook
WebHook Это легкий сервер, который позволяет легко создавать и настроить конечные точки HTTP, которые вы можете использовать для выполнения скрипта или набора команд. Мы будем использовать WebHook, чтобы прослушать входящие запросы от GitHub, и когда проводится запрос, запустите наш скрипт Redeport.
Установить веб -ook
Чтобы установить веб -ook на Ubuntu, запустите:
sudo apt install webhook
Примечание. Если вы получите ошибку, которая написана «E: невозможно найти пакет веб -ook», вам нужно запустить Sudo APT обновление
Сначала обновить список пакетов.
Настройте конечную точку WebHook
Настройка веб-капуста выполняется через один файл json. Файл содержит массив элементов с каждым элементом, представляющим конечную точку.
Создать Cooks.json
Файл в вашем доме ( ~
) Папка:
nano ~/hooks.json
И добавьте следующее содержимое:
[ { "id": "nodejs-app", "execute-command": "/home/maxim/redeploy-nodejs-app.sh", "command-working-directory": "/home/maxim/nodejs-app", "trigger-rule": { "and": [ { "match": { "type": "payload-hash-sha1", "secret": "yourgithubsecret", "parameter": { "source": "header", "name": "X-Hub-Signature" } } }, { "match": { "type": "value", "value": "refs/heads/main", "parameter": { "source": "payload", "name": "ref" } } } ] } } ]
Давайте сломаемся и узнаю, что делает каждый параметр:
- ID — Название вашего приложения. Будет использоваться для создания конечной точки. Например,
nodejs-приложение
приведет к следующей конечной точке/Крючки/Nodejs-приложение
. Он должен соответствовать «URL полезной нагрузки» с предыдущего шага, поэтому GitHub вызывает правильную конечную точку - execute-command — Команда или скрипт для выполнения, когда вызывается конечная точка. Следует указывать на скрипт повторного развертывания, который мы напишем на следующем шаге
- Командный рабочий каталог — рабочий каталог, который будет использоваться скриптом при вызове. Установите это в папку, где живет ваше приложение
Trigger-правило — Правило, которое будет оценено перед выполнением сценария. Мы используем
и
Свойство для уточнения запроса должна соответствовать двум критериям:- У него должно быть
X-HUB-Signature
Заголовок присутствует с хэш Sha1секретарь
. Вот как Github передает нам секрет, чтобы мы могли проверить запрос законного. Значениесекрет
должен соответствовать «секретно» с предыдущего шага - У него должно быть
Ref
недвижимость в организме, который равенRefs/Heads/Main
Итак, мы перераспределили только на толкающем нажимГлавная
ветвь. Измените это значение, если ваша ветка имеет другое имя
- У него должно быть
Проверьте Страница четкости крючка Для полного списка всех параметров конфигурации, если вы любопытно.
Сохраните файл с Ctrl + O
и Введите
Отказ Затем выйдите из редактора Nano с Ctrl + x
Отказ
Начать веб -ook и вперед входящие запросы
Чтобы запустить веб -ook, запустите эту команду:
webhook -hooks ~/hooks.json &
По умолчанию WebHook запускает веб-сервер, который слушает для входящих запросов на порт 9000
Отказ Вам нужно будет настроить обратный прокси, как Nginx, для пересылки HTTP-запросов к веб -ookook.
Альтернативно, вы можете изменить «URL полезной нагрузки» GitHUB WebHook, чтобы включить порт после домена, например, https://yourdomain.com:9000/hooks/nodejs-app
Отказ Убедитесь, что порт 9000
не заблокирован брандмауэром.
Однако рекомендую, однако, пойти с обратным доверенным подходом, так как он, как правило, более безопасным, чтобы все прошло через порты HTTP (80)/HTTPS (443) и у всех других портов закрыты для общественности.
Ниже приведен пример конфигурации для Nginx, который перенаправляет все запросы с назначением https://yourdomain.com/hooks/...
к веб -ookhook.
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name yourdomain.com; # SSL config # ... # Webhook reverse proxy location /hooks/ { proxy_pass http://127.0.0.1:9000/hooks/; } }
Не забудьте перезагрузить nginx, чтобы он поднимал изменения конфигурации:
sudo nginx -s reload
Шаг 3 — Написать скрипт Redeploy
Наконец, мы напишем скрипт для восстановления приложения. Это сделает следующие шаги в последовательности:
- Получите последний код из GitHub
- Установите зависимости NPM
- (Необязательно) шаг сборки
- Перезапустите приложение
Создать файл с именем Redeoploch-Nodejs-app.sh
или дать ему другое имя, которое соответствует execute-command
в Cooks.json
Отказ Добавьте следующее к нему:
#!/bin/sh # 1. Fetch the latest code from remote git pull -f origin main # 2. Install dependencies npm install # 3. (Optional) Build step that compiles code, bundles assets, etc. # npm run build # 4. Restart application pm2 restart nodejs-app
Вы можете внести изменения в скрипт REDEPOLT, чтобы удовлетворить вашу настройку.
Примечание: если вы тянете из частного хранилища, вам нужно Предоставьте доступ к серверу до вашего аккаунта GitHub . В противном случае скрипт REDEPOLT потерпит неудачу с ошибкой «Разрешение запрещено».
После того, как вы сохраните файл, давайте сделаем его исполняемым с помощью:
chmod +x redeploy-nodejs-app.sh
Этот последний шаг важен в противном случае WebHook не сможет выполнить скрипт с ошибкой разрешений.
Теперь вернитесь к GitHub, активируйте веб -ook, сделайте изменение в своем коде и нажмите на удаленный. Если все прошло хорошо, вы должны увидеть изменения вживую через несколько секунд! 🥳.
Ищете быстрое решение?
Предпочитаю тратить меньше времени ⏰ Настройка серверов и больше времени, написание фактического кода?
Хотите, чтобыe Heroku подобный разработку Dev для развертывания ваших приложений без боли настроить сервер?
Что, если вы можете развернуть ваше приложение и иметь автоматическое развертывание, настроенное только с одной командой. 💫
В считанные минуты (не дни!) У вас может быть рабочий процесс развертывания, который увеличивает вашу производительность и позволяет отправлять вам быстрее. 🚀
👉🏼 Покажи мне, как!
Оригинал: «https://dev.to/maximization/set-up-automated-deployments-from-github-with-webhook-4322»