Откат на предыдущую версию
Откат на предыдущую версию
Когда нужен откат
- Healthcheck не прошёл после деплоя
- Критические ошибки в логах сразу после обновления
- Деплой завершился ошибкой
Автоматический откат (при деплое через deploy.sh)
deploy.sh автоматически вызывает rollback.sh при неудаче healthcheck:
bash /opt/terma-grand/repo/scripts/deploy/deploy.sh --tag v1.1.0# → если healthcheck не прошёл → автоматический rollback на предыдущий тегРучной откат
1. Откат через rollback.sh (рекомендуется)
cd /opt/terma-grand/repo
# Автоматически определит предыдущий image tagbash scripts/deploy/rollback.sh
# Или явно указать тегbash scripts/deploy/rollback.sh --to v1.0.0
# Или по git SHAbash scripts/deploy/rollback.sh --to abc12342. Ручной откат пошагово
Если скрипт недоступен:
cd /opt/terma-grand/repo
# 1. Посмотреть доступные образыdocker images | grep terma-grand
# 2. Остановить сервисыIMAGE_TAG="" docker compose -f docker-compose.prod.yml down
# 3. Checkout предыдущей версииgit log --oneline -10 # найти предыдущий коммит/тегgit checkout v1.0.0 # или git checkout <sha>
# 4. Запустить с предыдущим образомIMAGE_TAG=v1.0.0 docker compose \ -f docker-compose.prod.yml \ --env-file .env.prod \ up -d
# 5. Проверитьbash scripts/deploy/health-check.shПросмотр доступных образов
docker images terma-grand --format "table {{.Tag}}\t{{.CreatedAt}}\t{{.Size}}"Пример:
TAG CREATED AT SIZEv1.1.0 2026-04-22 10:00:00 +0000 UTC 450MBv1.0.0 2026-04-15 09:00:00 +0000 UTC 445MBlatest 2026-04-22 10:00:00 +0000 UTC 450MBОткат базы данных
В случае если новая версия сделала несовместимые миграции БД:
# 1. Восстановить из бэкапа, сделанного ПЕРЕД деплоемbash scripts/deploy/restore.sh \ --from "s3://terma-grand-backups/pg/daily/<dump_before_deploy>.sql.gz.gpg"Важно: Перед каждым деплоем рекомендуется запускать
backup.shвручную — как checkpoint.
Проверка после отката
# Статус контейнеровdocker compose -f docker-compose.prod.yml ps
# Healthcheckbash scripts/deploy/health-check.sh
# Логи appdocker compose -f docker-compose.prod.yml logs --tail=50 app
# APIcurl https://termagrand.ru/api/health