# Журнал миграции в Timeweb Хронология фактического переезда. План и архитектурные решения — в [timeweb.md](timeweb.md). Здесь только то, что реально сделано, с датами. Новые записи — сверху. --- ## Шаг 4 — условное монтирование внешнего диска (2026-05-22, выполнено) Задача `Mount external storages` в `playbook-system.yml` теперь выполняется только при включённом флаге `mount_external_storage` (default `false`). Сам UUID диска оставлен захардкоженным в плейбуке — параметризовать не стали, потому что для Timeweb (фаза 1) монтирование вообще не нужно, а для фазы 2 пока неизвестно, какой UUID получится у второго диска. Изменения: - `playbook-system.yml` — у задачи mount добавлен `when: mount_external_storage | default(false) | bool`. - `production.yml` (инвентарь YC) — у хоста `server` добавлен `mount_external_storage: true`, чтобы текущее поведение сохранилось. В будущем `timeweb.yml` просто не будет задавать эту переменную — mount пропустится, `/mnt/applications` останется обычной директорией на системном диске. На фазе 2 (подключение медленного диска в Timeweb) UUID в `playbook-system.yml` придётся поменять и включить флаг — это осознанный шаг, не автоматизировано. Проверено прогоном `inv pl -- system` на текущем сервере (Yandex Cloud) — задача mount по-прежнему выполняется, `/mnt/applications` смонтирован, изменений нет. --- ## Шаг 3 — переключение auth на cr.yandex (2026-05-22, выполнено) Заменена аутентификация в Yandex Container Registry с YC-metadata service на OAuth-token из vault. Изменения: - `files/yandex-docker-registry-auth.sh` — **удалён**. - `playbook-homepage.yml` — задача `ansible.builtin.script: yandex-docker-registry-auth.sh` заменена на `community.docker.docker_login` с `username: oauth`, `password: "{{ yc_oauth_token }}"`. - `playbook-transcriber.yml` — то же самое. Локальные push-плейбуки (`playbook-homepage-registry.yml`, `playbook-transcriber-registry.yml`) не трогал — там нет auth-задачи в принципе, локальный docker аутентифицируется вручную (`yc container registry configure-docker` или `docker login`). Если позже захочется унифицировать — можно добавить тот же `docker_login` с `delegate_to: 127.0.0.1`. Проверено прогоном `inv pl -- homepage` и `inv pl -- transcriber` на текущем сервере (Yandex Cloud) — ошибок нет, контейнеры работают. Значит и на Timeweb заработает (единственная разница — исходящий IP, а OAuth-токен в YC принимается извне). --- ## Шаг 2 — OAuth-token для cr.yandex (2026-05-22, выполнено) В `vars/secrets.yml` добавлена (или обновлена) переменная `yc_oauth_token` со свежим OAuth-токеном Яндекса. Токен будет использоваться для логина в `cr.yandex` с новой машины Timeweb (вместо текущего скрипта `files/yandex-docker-registry-auth.sh`, который завязан на YC metadata service `169.254.169.254` и работает только внутри YC). Сам код переключения на `community.docker.docker_login` пока не вносится — это следующая итерация. Сейчас токен просто положен в vault, чтобы не делать этого в день cutover'а под прессом. --- ## Шаг 1 — снижение TTL DNS (2026-05-22, выполнено) В админке Yandex 360 для зоны `vakhrushev.me` уменьшен TTL A-записей с **21 600 с (6 ч)** до **1 200 с (20 мин)**. Это даёт запас по времени на распространение изменений после смены IP в день cutover'а — старые кэширующие резолверы перестанут отдавать старый адрес максимум через 20 минут (вместо 6 часов). Делается **заранее**, потому что само снижение TTL тоже распространяется по кэшам по правилам старого TTL — то есть после правки нужно подождать ≥ 6 часов, чтобы новое значение TTL само успело прижиться. Раньше cutover'а нужно сделать с большим запасом — день в день не сработает.