Migration: fix application order
This commit is contained in:
@@ -8,6 +8,70 @@
|
||||
|
||||
---
|
||||
|
||||
## Шаг 9 — раскатана база и приложения без запуска (2026-05-23, выполнено)
|
||||
|
||||
На свежей Timeweb-машине прогнаны два плейбука без даунтайма источника
|
||||
(контейнеры на target не запускались).
|
||||
|
||||
### 9a. Системная база
|
||||
|
||||
```bash
|
||||
uv run ansible -i timeweb.yml -m ping server # pong
|
||||
uv run ansible-playbook -i timeweb.yml --diff playbook-all-setup.yml
|
||||
```
|
||||
|
||||
После прогона на target поднято: apt-пакеты (`geerlingguy.security`),
|
||||
docker + сети (`web_proxy_network`, `monitoring_network`), eget с
|
||||
инструментами (restic, rclone, btop, zellij и др.), ufw (порты 22,
|
||||
2222, 80, 443), fail2ban, backup-инфра (`backup-all.py`,
|
||||
resticprofile, cron).
|
||||
|
||||
Заодно `geerlingguy.security` отключил root по SSH и
|
||||
`PasswordAuthentication` — root-канал закрыт, доступ только через
|
||||
`major` + ключ. Перепроверено `ssh major@<новый-ip>` — работает.
|
||||
|
||||
### 9b. Application-плейбуки без запуска контейнеров
|
||||
|
||||
```bash
|
||||
uv run ansible-playbook -i timeweb.yml --diff \
|
||||
--skip-tags run-app \
|
||||
playbook-all-applications.yml
|
||||
```
|
||||
|
||||
На target созданы все `<app>`-пользователи с правильными uid/gid
|
||||
(совпадают с источником, см. таблицу в [плане](timeweb.md)), каталоги
|
||||
`/srv/applications/<app>/{data,config,backups}`, отрендерены
|
||||
`docker-compose.yml` и application-конфиги. Контейнеры **не**
|
||||
запускались — это шаг 5 cutover'а (после rsync'а данных).
|
||||
|
||||
OAuth-аутентификация в `cr.yandex` (из Шага 3) сработала с
|
||||
Timeweb-айпишника без замечаний — `community.docker.docker_login` в
|
||||
плейбуках homepage и transcriber прошёл.
|
||||
|
||||
### Обнаруженный латентный bug ordering'а в goaccess
|
||||
|
||||
На fresh-install упала задача
|
||||
`playbook-goaccess.yml:55 «Ensure caddy access log exists before
|
||||
goaccess starts»` — пыталась туч'ить файл в `/var/log/caddy/`, который
|
||||
к этому моменту не существовал. Причина: каталог создаётся в
|
||||
`playbook-caddyproxy.yml`, а в `playbook-all-applications.yml`
|
||||
goaccess идёт **раньше** caddyproxy (caddyproxy специально последний,
|
||||
чтобы стартовать после backends). На предыдущем сервере не проявлялось
|
||||
— каталог уже существовал от прошлых прогонов.
|
||||
|
||||
Фикс: добавил в `playbook-goaccess.yml` явное создание
|
||||
`caddy_logs_dir` перед touch'ем `access.log`. Owner/mode выставит
|
||||
caddyproxy при своём прогоне, идемпотентность сохранена.
|
||||
|
||||
**Backlog (после миграции):** `caddy_logs_dir` — shared-ресурс между
|
||||
плеями (caddyproxy пишет, goaccess читает), концептуально это
|
||||
provisioning-time забота. Вынести его создание в `playbook-system.yml`
|
||||
(или в отдельный shared-resources плей в `playbook-all-setup.yml`) и
|
||||
убрать дубль из goaccess/caddyproxy. Делать после переезда отдельным
|
||||
PR, не во время миграции.
|
||||
|
||||
---
|
||||
|
||||
## Шаг 8 — VPS заказан, пользователь `major` создан (2026-05-23, выполнено)
|
||||
|
||||
Заказан Cloud VPS в Timeweb по тарифу из плана (4 × 3.3 ГГц, 8 ГБ RAM,
|
||||
|
||||
Reference in New Issue
Block a user