Шаг A — перенести архив на сервер (USB)
Скинь blank-vm-deploy.tar.gz на флешку → на сервер, например в /root/blank-vm-deploy.tar.gz.
Шаг B — на сервере: бэкап текущего кода + распаковка
export TS=2026-08-03_1054 # тот же, что у дампа БД — чтобы пути сошлись
# страховка: бэкап текущего кода (быстро, пара МБ) — для отката
tar -czf /opt/terraform-web/backend/backups/pre_deploy_code_$TS.tar.gz \
-C / opt/terraform-web/backend var/www/terraform-web
# распаковать новые файлы точно по путям (перезапишет старые версии)
tar -xzf /root/blank-vm-deploy.tar.gz -C /
# убедиться, что файл миграции доехал
ls -l /opt/terraform-web/backend/alembic/versions/add_os_images.py
⚠️ Распаковка не активирует новый код — uvicorn держит старый в памяти до рестарта. Поэтому это безопасно сделать сейчас, а рестарт — в самом конце, уже после миграции БД.
Шаг C — БД: повторяем генерацию SQL (теперь файл на месте)
cd /opt/terraform-web/backend
/opt/terraform-web/venv/bin/alembic current # теперь: add_vm_groups_001 (уже НЕ head)
/opt/terraform-web/venv/bin/alembic heads # покажет add_os_images_001 (head)
/opt/terraform-web/venv/bin/alembic upgrade add_vm_groups_001:head --sql > /tmp/mig_$TS.sql
cat /tmp/mig_$TS.sql
→ пришли мне cat /tmp/mig_$TS.sql. Теперь он должен содержать реальный DDL. Проверю глазами перед применением.
Шаг D — тест на копии (через суперюзера postgres, т.к. у tfweb_user нет CREATEDB)
Запустишь после моего «ок» по SQL — команды я уже дал в прошлом сообщении (sudo -u postgres createdb -O tfweb_user … restore … psql --single-transaction … \d os_images … dropdb).
Шаг E — применить к проду → Шаг F — рестарт
Тоже после успешного теста:
psql -U tfweb_user -h localhost -d terraform_web --single-transaction -f /tmp/mig_$TS.sql
/opt/terraform-web/venv/bin/alembic current # должно стать add_os_images_001
sudo systemctl restart terraform-web terraform-admin
sudo systemctl status terraform-web terraform-admin
---
Итого прямо сейчас делаешь: Шаг A (флешка) → Шаг B (бэкап+распаковка) → Шаг C (генерация SQL) и присылаешь мне вывод cat /tmp/mig_$TS.sql. Я проверю DDL и дам добро на тест-копию.