Deploy
Программа для деплоя различных приложений через консоль по ssh. В качестве консоле можно использовать любую консоль поддерживаю команды tar и ssh. Работоспособность проверялась в git-bash на windows и консоле debian.
Для использования необходимо произвести настройку сервера и локальной машины, а также создать файл deploy.json c настройками для деплоя вашего приложения. Примеры настроек можно посмотреть в директории с примерами.
Как это работает
Основные команды
Деплой происходит после запуска команды, где prod - это название площадки из файла deploy.json.
dep deploy prod
Более подробно с командами можно ознакомится после вызова команды dep или dep --help
dep
Для дебага и демонстрации команд можно использовать флаг -d
dep deploy -d prod
Деплой происходит путем создания файла deploy.tar.gz и заливкой его на сервер по scp.
Установка и настройка
Настройка сервера
1.Настройка локальной машины
2.Деплой
3.Миграции
Для миграций предлагаю использовать библиотеку migrate.
Установка
wget https://github.com/golang-migrate/migrate/releases/download/v4.10.0/migrate.linux-amd64.tar.gz
tar -xvf migrate.linux-amd64.tar.gz
mv migrate.linux-amd64 /usr/bin/migrate
Для облегчения использования написал bash скрипт, который парсит файл .env и забирает настройки БД. В случае необходимости можно внести в него изменения в соответствии с вашей конфигурацией. (пример моего файла)
wget https://raw.githubusercontent.com/evgeny-klyopov/dep/master/example/migrate/mig
chmod u+x mig
mv mig /usr/bin/mig
Раздача прав
chown deployer:deployer /usr/bin/migrate
chown deployer:deployer /usr/bin/mig
Пример использования
В консоле:
mig up
mig down
Файл конфигурации
{
"keep_releases": 10,
"hosts": [
{
"host": "test",
"stage": "prod",
"user": "deployer",
"port": 1777,
"deploy_path": "/var/www/projects/test/backend/production"
}
],
"local_object_path": ["test"],
"tasks_order": [
"deploy:check",
"deploy:release",
"local:create-archive",
"local:send-archive",
"deploy:extract-archive",
"deploy:make-executable",
"deploy:migrations",
"deploy:symlink",
"cleanup"
],
"tasks" : {
"remote": [
{
"name": "deploy:migrations",
"command": "cd {{release_path}} && mig up"
}
]
}
}
Переменные
Иногда возникает необходимость использовать различные переменные в командах. Например для билда приложения под конкретную площадку. Для этих целей в файле конфигурации можно использовать переменные в двойных фигурных скобках.
{
"tasks" : {
"local": [
{
"name": "build",
"command": "npm run build-{{stage}}"
}
]
}
}
Доступные переменные
- {{release_path}} - Симлинк для готовящегося релиза
- {{stage}} - площадка
Уведомления
Пример конфига
{
"notifications": {
"telegram": [{
"use_proxy": true,
"proxy": "user:password@ip:port",
"chat_id": 11111,
"token": "your_bot_token"
}]
}
}
Можно устанавливать несколько чат ботов, отправляться будет всем. В случае ошибок, деплой не ломается и пропускает этот шаг. use_proxy - флаг использования прокси proxy - socks5 chat_id - chat_id вашего бота (int64) token - token вашего бота