Skip to content

Обновление

Одна команда из папки установки:

bash
cd ~/StepBot 2>/dev/null || cd ~/HUB-BOT   # папка вашей установки
./scripts/update.sh

Порядок шагов выбран так, чтобы сломанное обновление никогда не теряло данные.

Что делает скрипт

  1. Бэкап БД. pg_dump из контейнера postgres в backups/pre-update-<дата-время>.sql.gz. Если бэкап не снялся или пустой — обновление отменяется, дальше скрипт не идёт (частая причина: стек не запущен).
  2. git pull --ff-only. Локальная история никогда не переписывается. Если pull не прошёл из-за локальных правок — git stash, затем повторить. Скрипт показывает список приехавших коммитов; если версия уже последняя — всё равно пересобирает образы.
  3. Пересборка и перезапуск. docker compose build + up -d по docker/compose.prod.yml.
  4. Миграции и health-гейт. Миграции Alembic web-контейнер применяет сам при старте; скрипт ждёт /health до 3 минут и подтверждает успех с номером ревизии и путём к бэкапу.

Если обновление не поднялось

Скрипт не молчит — печатает три готовые команды (с вашими реальными ревизией и именем бэкапа). Все команды для стека запускайте через обёртку ./scripts/dc.sh — она сама добавляет --env-file .env (см. предупреждение ниже):

bash
# логи
./scripts/dc.sh logs --tail 100 web

# откат кода на ревизию до обновления
git checkout <старая-ревизия> && ./scripts/dc.sh up -d --build

# восстановление БД из снятого бэкапа
gunzip -c backups/pre-update-<штамп>.sql.gz | \
  ./scripts/dc.sh exec -T postgres psql -U vpn vpn

«required variable DATABASE__PASSWORD is missing a value»

Голый docker compose -f docker/compose.prod.yml … ищет .env для подстановки ${…} в папке compose-файла (docker/), а не в корне репозитория — и падает с этой ошибкой. Поэтому запускайте команды через ./scripts/dc.sh (или добавляйте --env-file .env вручную из корня репозитория). Если ошибка осталась и через обёртку — значит переменной действительно нет в .env; восстановите её из работающего контейнера: docker exec vpnhub-postgres-1 printenv POSTGRES_PASSWORD, и впишите значение в .env как DATABASE__PASSWORD=….

TIP

Бэкап снимается до каких-либо изменений, поэтому откат кода + восстановление дампа возвращают систему ровно в состояние перед обновлением.

Деплой без Docker

Если стоит VPS-вариант на systemd, обновление делается не этим скриптом, а ./scripts/deploy.sh с локальной машины.

MIT License · сделано для тех, кто продаёт VPN, а не настраивает ботов