Обновление
Одна команда из папки установки:
cd ~/StepBot 2>/dev/null || cd ~/HUB-BOT # папка вашей установки
./scripts/update.shПорядок шагов выбран так, чтобы сломанное обновление никогда не теряло данные.
Что делает скрипт
- Бэкап БД.
pg_dumpиз контейнера postgres вbackups/pre-update-<дата-время>.sql.gz. Если бэкап не снялся или пустой — обновление отменяется, дальше скрипт не идёт (частая причина: стек не запущен). git pull --ff-only. Локальная история никогда не переписывается. Если pull не прошёл из-за локальных правок —git stash, затем повторить. Скрипт показывает список приехавших коммитов; если версия уже последняя — всё равно пересобирает образы.- Пересборка и перезапуск.
docker compose build+up -dпоdocker/compose.prod.yml. - Миграции и health-гейт. Миграции Alembic web-контейнер применяет сам при старте; скрипт ждёт
/healthдо 3 минут и подтверждает успех с номером ревизии и путём к бэкапу.
Если обновление не поднялось
Скрипт не молчит — печатает три готовые команды (с вашими реальными ревизией и именем бэкапа). Все команды для стека запускайте через обёртку ./scripts/dc.sh — она сама добавляет --env-file .env (см. предупреждение ниже):
# логи
./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 с локальной машины.
