4.6 KiB
Release #0: безопасный порядок развертывания
Этот файл больше не является журналом реальных адресов, SSH-ключей и локальных путей. Фактические значения инфраструктуры хранятся в защищённой CMDB/ops wiki, а не в Git.
1. Подготовка ВМ
Разрешите извне только 80/443 и SSH из административной сети. PostgreSQL доступен ВМ только через приватную сеть.
scp -i <DEPLOY_SSH_KEY> deployment/scripts/setup-vm.sh \
<CLOUD_USER>@<VM_IP>:/tmp/setup-vm.sh
ssh -i <DEPLOY_SSH_KEY> <CLOUD_USER>@<VM_IP>
sudo chmod 0755 /tmp/setup-vm.sh
sudo /tmp/setup-vm.sh
После создания пользователя deploy проверьте отдельную SSH-сессию до
отключения root login. Не копируйте приватный ключ на ВМ.
2. Доставка приложения
Предпочтительно использовать Git либо архив без runtime-данных:
tar -C HAN_chat_specification/codebase/backend \
--exclude='.env' \
--exclude='secrets' \
--exclude='backups' \
-czf han-chat-backend.tar.gz .
scp -i <DEPLOY_SSH_KEY> han-chat-backend.tar.gz deploy@<VM_IP>:/tmp/
На ВМ:
sudo install -d -o deploy -g deploy -m 0755 /opt/han-chat/backend
sudo -u deploy tar -C /opt/han-chat/backend \
-xzf /tmp/han-chat-backend.tar.gz
cd /opt/han-chat/backend
sudo find . -type f \( -name '*.sh' -o -name 'validate-env' \
-o -name 'han-secrets' -o -name 'han-compose' \) \
-exec dos2unix {} +
sudo chmod 0755 scripts/validate-env deployment/scripts/*.sh \
deployment/secrets/han-secrets deployment/secrets/han-compose \
redis/scripts/*.sh nginx/scripts/*.sh
sudo deployment/scripts/setup-vm.sh
3. Несекретная конфигурация
.env создаётся на самой ВМ из .env.example и содержит только URL, resource
names, feature flags и SECRETS_SOURCE. Его разрешено передавать как обычный
config, но запрещено добавлять credential-bearing DSN, password, token и key.
cp .env.example .env
chmod 0600 .env
nano .env
./scripts/validate-env .env
4. Selectel Secrets Manager
Выполните deployment/secrets/SELECTEL_RUNBOOK.ru.md:
- отдельный проект и service user;
- provider secrets и audit alerts;
- root-only JSON-карта;
- encrypted systemd credential;
SECRETS_SOURCE=selectel.
Не передавайте значение секрета аргументом команды, через export, тикет или
shell history. Старые значения из прежнего .env после cutover ротируются.
5. Проверка и запуск
sudo systemctl daemon-reload
sudo systemctl enable han-secrets@production.service
sudo systemctl restart han-secrets@production.service
sudo ./scripts/validate-env .env \
--runtime-manifest /run/han-chat/secrets/manifest
sudo deployment/secrets/han-compose config --quiet
python3 -m unittest discover -s tests -v
sudo deployment/secrets/han-compose build --pull
sudo deployment/scripts/migrate.sh
sudo deployment/secrets/han-compose up -d --wait
sudo deployment/scripts/smoke.sh
Для диагностики используйте han-compose ps и ограниченные logs. Не выводите
resolved Compose config, docker inspect environment, полный env или secret
files.
6. Откат
Откат приложения использует immutable image/release ID и подтверждённую совместимость схемы:
sudo SCHEMA_BACKWARD_COMPATIBLE_CONFIRMED=true \
deployment/scripts/rollback.sh <PREVIOUS_RELEASE>
Откат секрета выполняется активацией предыдущей версии в Selectel, повторным
sync и пересозданием только затронутых сервисов. Snapshot старого .env не
создаётся.
7. Break-glass
Только при подтверждённом инциденте доставьте root-only recovery file из
защищённой офлайн-копии, установите SECRETS_SOURCE=file, выполните
sync/validate/recreate и зафиксируйте событие. Автоматический fallback запрещён.
После восстановления Selectel верните штатный режим и удалите recovery file.