Реализация на отдельных двух машинах с протестированным взаимодействием по проверке сообщений
This commit is contained in:
@@ -0,0 +1,117 @@
|
||||
# Release #0: безопасный порядок развертывания
|
||||
|
||||
Этот файл больше не является журналом реальных адресов, SSH-ключей и локальных
|
||||
путей. Фактические значения инфраструктуры хранятся в защищённой CMDB/ops wiki,
|
||||
а не в Git.
|
||||
|
||||
## 1. Подготовка ВМ
|
||||
|
||||
Разрешите извне только 80/443 и SSH из административной сети. PostgreSQL
|
||||
доступен ВМ только через приватную сеть.
|
||||
|
||||
```sh
|
||||
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-данных:
|
||||
|
||||
```sh
|
||||
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/
|
||||
```
|
||||
|
||||
На ВМ:
|
||||
|
||||
```sh
|
||||
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.
|
||||
|
||||
```sh
|
||||
cp .env.example .env
|
||||
chmod 0600 .env
|
||||
nano .env
|
||||
./scripts/validate-env .env
|
||||
```
|
||||
|
||||
## 4. Selectel Secrets Manager
|
||||
|
||||
Выполните `deployment/secrets/SELECTEL_RUNBOOK.ru.md`:
|
||||
|
||||
1. отдельный проект и service user;
|
||||
2. provider secrets и audit alerts;
|
||||
3. root-only JSON-карта;
|
||||
4. encrypted systemd credential;
|
||||
5. `SECRETS_SOURCE=selectel`.
|
||||
|
||||
Не передавайте значение секрета аргументом команды, через `export`, тикет или
|
||||
shell history. Старые значения из прежнего `.env` после cutover ротируются.
|
||||
|
||||
## 5. Проверка и запуск
|
||||
|
||||
```sh
|
||||
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 и подтверждённую
|
||||
совместимость схемы:
|
||||
|
||||
```sh
|
||||
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.
|
||||
Reference in New Issue
Block a user