[БЛОКЕР] Переезд ломает сам Forgejo: его БД живёт внутри уезжающего gendesign-postgres-1 #3061

Closed
opened 2026-08-23 21:03:46 +00:00 by lekss361 · 4 comments
Owner

Эпик: #2989, раннбук: #3057. Найдено разведкой 2026-08-24, подтверждено на живом проде.

По целевой топологии Forgejo, CI-раннеры, GlitchTip и CouchDB остаются на Beget. Разведка показала, что это невыполнимо в текущей конфигурации: три из четырёх зависят от контейнеров и файлов, которые уезжают.

Факт

app.ini контейнера forgejo:

[database]
DB_TYPE = postgres
HOST    = postgres:5432
NAME    = forgejo
USER    = forgejo

postgres:5432 — это сетевой алиас gendesign-postgres-1, который по плану уезжает на Selectel целиком. Сети: forgejo сидит в gendesign_default, gendesign-postgres-1 — в gendesign_default и gendesign_shared.

Внутри этого контейнера:

БД Размер Кто владелец
gendesign 15 GB Site Finder — уезжает
glitchtip 729 MB GlitchTip — должен остаться
forgejo 265 MB Forgejo — должен остаться
auth 7900 kB auth-forwarder

То есть один контейнер обслуживает и то, что уезжает, и то, что остаётся.

Чем это грозит

В момент переезда gendesign-postgres-1 перестаёт существовать на Beget. Дальше:

  • Forgejo падает целиком — веб-интерфейс, git-операции по HTTP, Actions. То есть CI, из которого мы деплоим, ложится ровно тогда, когда он нужнее всего.
  • GlitchTip падает — теряется трекинг ошибок ровно в окно, когда ошибки наиболее вероятны.
  • Бэкап Forgejo (ops/backup-forgejo.sh, PG_CONTAINER=gendesign-postgres-1) падает на первом шаге. Это лишь первый видимый симптом, а не суть проблемы.

Отдельно неприятно: Forgejo — заявленная компенсация риска «всё в одном аккаунте Selectel». Если он падает вместе с переездом, компенсация не работает именно тогда, когда нужна.

Смежная находка: GlitchTip и CouchDB тоже не независимы

Вопреки формулировке «остаются на Beget», они катятся тем же деплоем:

Сервис compose Деплой
glitchtip-web, glitchtip-worker /opt/gendesign/docker-compose.prod.yml, проект gendesign deploy.yml
gendesign-auth-forwarder там же, build: ./ops/glitchtip-auth-forwarder — собирается локально на VM deploy.yml
gendesign-couchdb /opt/gendesign/docker-compose.obsidian.yml deploy-obsidian.yml
Forgejo + раннеры /home/gendesign/forgejoвне репозитория, деплой вручную не трогается CI

Из четырёх «остающихся» только Forgejo структурно независим от /opt/gendesign — и именно он зависит от уезжающей БД. Остальные два независимы от БД, но зависят от чекаута, который после смены DEPLOY_HOST замрёт навсегда.

Что нужно решить

Вариант А — вынести forgejo и glitchtip в отдельный лёгкий Postgres на Beget. Соответствует уже принятому принципу «Forgejo независим от Selectel». Цена: новый контейнер, перенос двух БД (265 MB + 729 MB — минуты), правка app.ini, PG_CONTAINER в backup-forgejo.sh, connection string GlitchTip. Делается до окна и проверяется отдельно.

Вариант Б — оставить gendesign-postgres-1 на Beget, а на Selectel поднять новый. Тогда БД Site Finder переливается, а контейнер на Beget остаётся обслуживать forgejo/glitchtip/auth. Дешевле по работе, но на Beget остаётся 15 ГБ мёртвой базы и полноценный PostGIS ради 1 ГБ данных.

Вариант В — увезти Forgejo и GlitchTip на Selectel вместе со всем. Противоречит цели «Forgejo у другого провайдера как компенсация риска».

Рекомендую А: он единственный делает заявленную топологию правдой.

Приёмка

  • Решение владельца по варианту
  • БД forgejo и glitchtip работают с Postgres, который остаётся на Beget
  • app.ini Forgejo и connection string GlitchTip обновлены
  • PG_CONTAINER в ops/backup-forgejo.sh указывает на правильный контейнер
  • Проверено: Forgejo и GlitchTip живы при остановленном gendesign-postgres-1
  • Решён механизм обновления /opt/gendesign на Beget после смены DEPLOY_HOST (иначе GlitchTip и CouchDB замрут навсегда)

Refs #3057, #3059, #2203

Эпик: #2989, раннбук: #3057. Найдено разведкой 2026-08-24, подтверждено на живом проде. По целевой топологии Forgejo, CI-раннеры, GlitchTip и CouchDB **остаются на Beget**. Разведка показала, что это невыполнимо в текущей конфигурации: три из четырёх зависят от контейнеров и файлов, которые уезжают. ## Факт `app.ini` контейнера `forgejo`: ``` [database] DB_TYPE = postgres HOST = postgres:5432 NAME = forgejo USER = forgejo ``` `postgres:5432` — это сетевой алиас **`gendesign-postgres-1`**, который по плану уезжает на Selectel целиком. Сети: `forgejo` сидит в `gendesign_default`, `gendesign-postgres-1` — в `gendesign_default` и `gendesign_shared`. Внутри этого контейнера: | БД | Размер | Кто владелец | |---|---|---| | `gendesign` | 15 GB | Site Finder — **уезжает** | | `glitchtip` | 729 MB | GlitchTip — **должен остаться** | | `forgejo` | 265 MB | Forgejo — **должен остаться** | | `auth` | 7900 kB | auth-forwarder | То есть один контейнер обслуживает и то, что уезжает, и то, что остаётся. ## Чем это грозит В момент переезда `gendesign-postgres-1` перестаёт существовать на Beget. Дальше: - **Forgejo падает целиком** — веб-интерфейс, git-операции по HTTP, Actions. То есть CI, из которого мы деплоим, ложится ровно тогда, когда он нужнее всего. - **GlitchTip падает** — теряется трекинг ошибок ровно в окно, когда ошибки наиболее вероятны. - Бэкап Forgejo (`ops/backup-forgejo.sh`, `PG_CONTAINER=gendesign-postgres-1`) падает на первом шаге. Это лишь первый видимый симптом, а не суть проблемы. Отдельно неприятно: **Forgejo — заявленная компенсация риска «всё в одном аккаунте Selectel»**. Если он падает вместе с переездом, компенсация не работает именно тогда, когда нужна. ## Смежная находка: GlitchTip и CouchDB тоже не независимы Вопреки формулировке «остаются на Beget», они катятся тем же деплоем: | Сервис | compose | Деплой | |---|---|---| | `glitchtip-web`, `glitchtip-worker` | `/opt/gendesign/docker-compose.prod.yml`, проект `gendesign` | `deploy.yml` | | `gendesign-auth-forwarder` | там же, **`build: ./ops/glitchtip-auth-forwarder`** — собирается локально на VM | `deploy.yml` | | `gendesign-couchdb` | `/opt/gendesign/docker-compose.obsidian.yml` | `deploy-obsidian.yml` | | Forgejo + раннеры | `/home/gendesign/forgejo` — **вне репозитория**, деплой вручную | не трогается CI | Из четырёх «остающихся» только Forgejo структурно независим от `/opt/gendesign` — и именно он зависит от уезжающей БД. Остальные два независимы от БД, но зависят от чекаута, который после смены `DEPLOY_HOST` замрёт навсегда. ## Что нужно решить **Вариант А — вынести `forgejo` и `glitchtip` в отдельный лёгкий Postgres на Beget.** Соответствует уже принятому принципу «Forgejo независим от Selectel». Цена: новый контейнер, перенос двух БД (265 MB + 729 MB — минуты), правка `app.ini`, `PG_CONTAINER` в `backup-forgejo.sh`, connection string GlitchTip. Делается **до** окна и проверяется отдельно. **Вариант Б — оставить `gendesign-postgres-1` на Beget, а на Selectel поднять новый.** Тогда БД Site Finder переливается, а контейнер на Beget остаётся обслуживать forgejo/glitchtip/auth. Дешевле по работе, но на Beget остаётся 15 ГБ мёртвой базы и полноценный PostGIS ради 1 ГБ данных. **Вариант В — увезти Forgejo и GlitchTip на Selectel вместе со всем.** Противоречит цели «Forgejo у другого провайдера как компенсация риска». Рекомендую **А**: он единственный делает заявленную топологию правдой. ## Приёмка - [ ] Решение владельца по варианту - [ ] БД `forgejo` и `glitchtip` работают с Postgres, который остаётся на Beget - [ ] `app.ini` Forgejo и connection string GlitchTip обновлены - [ ] `PG_CONTAINER` в `ops/backup-forgejo.sh` указывает на правильный контейнер - [ ] Проверено: Forgejo и GlitchTip живы при остановленном `gendesign-postgres-1` - [ ] Решён механизм обновления `/opt/gendesign` на Beget после смены `DEPLOY_HOST` (иначе GlitchTip и CouchDB замрут навсегда) Refs #3057, #3059, #2203
Author
Owner

Вариант А реализован в PR #3080.

Мерж — no-op: сервис под профилем infra, которого на Beget нет, а GLITCHTIP_DB_HOST имеет дефолт postgres. Переключение делается вручную на VM после переноса данных.

Разведка по телеметрии (#3078) добавила в чек-лист переключения ещё один пункт, не связанный с самим PR: deploy-obsidian.yml ходит по secrets.DEPLOY_HOST, а не по INFRA_DEPLOY_HOST. После 30.08 DEPLOY_HOST будет указывать на Selectel, и деплой стека CouchDB на Beget замрёт молча — без ошибки, просто применяясь не туда. Проверить до окна.

Вариант А реализован в PR #3080. Мерж — no-op: сервис под профилем `infra`, которого на Beget нет, а `GLITCHTIP_DB_HOST` имеет дефолт `postgres`. Переключение делается вручную на VM после переноса данных. Разведка по телеметрии (#3078) добавила в чек-лист переключения ещё один пункт, не связанный с самим PR: `deploy-obsidian.yml` ходит по `secrets.DEPLOY_HOST`, а не по `INFRA_DEPLOY_HOST`. После 30.08 `DEPLOY_HOST` будет указывать на Selectel, и деплой стека CouchDB на Beget замрёт молча — без ошибки, просто применяясь не туда. Проверить до окна.
Author
Owner

Прогнал сухой прогон ops/split-infra-postgres.sh на Beget — решение из #3080 в коде есть, но на проде ещё не включено, и первый же шаг упирается во владельца.

Что показал сухой прогон

РЕЖИМ: сухой прогон (по умолчанию). Ни одного побочного эффекта.
Источник: gendesign-postgres-1 → приёмник: gendesign-infra-postgres; базы: forgejo glitchtip
  gendesign-postgres-1: запущен
ОШИБКА: контейнер gendesign-infra-postgres не запущен

Скрипт ведёт себя ровно как надо: отказывается на preflight и не делает ничего наполовину. Но отказ означает, что шаги 1–2 ещё не выполненыdocker ps подтверждает, infra-postgres на проде не поднят.

Где именно затык

Порядок из шапки сервиса infra-postgres:

Шаг Что Кто
1 INFRA_PG_PASSWORD и FORGEJO_DB_PASS в /opt/gendesign/.env владелец
2 COMPOSE_PROFILES=glitchtip,infra в том же файле владелец
3 перенос баз — split-infra-postgres.sh --apply в окно
4 GLITCHTIP_DB_HOST=infra-postgres в .env владелец

Три шага из четырёх правят /opt/gendesign/.env — секрет-файл, к которому я не имею доступа по конструкции. Так что дальше preflight без тебя я не пройду.

Важно по срокам: шаги 1–2 надо сделать до окна, а не в нём. Шаг 3 внутри окна просто не с чем выполнять, пока пустой кластер не поднят и роли не заведены.

Предлагаю поставить их в T−48 ч (то есть к 28.08, вместе с понижением TTL из #3027) и сразу повторить сухой прогон — он должен пройти дальше preflight. Это дёшево и снимает риск обнаружить проблему уже в окне.

Раннбук обновлён

В runbooks/cutover_beget_selectel_0830.md этот issue был записан как открытый блокер с развилкой A/B/C. Поправил: развилка снята #3080, вместо неё — конкретный четырёхшаговый порядок и отметка, какие шаги за владельцем. Старая формулировка при подготовке окна заставила бы искать уже принятое решение.

Побочно: две работы не потеряли друг друга

#3080 переписал ops/backup-forgejo.sh (+121 строка) — тот же файл, что правил #3073 (бэкап конфигурации Forgejo, чтобы восстановимы были не только данные, но и то, чем они поднимаются). Проверил: правка пережила слияниеconfig_out присутствует 12 раз и на main, и в задеплоенном файле на проде.

Прогнал **сухой прогон** `ops/split-infra-postgres.sh` на Beget — решение из #3080 в коде есть, но на проде ещё не включено, и первый же шаг упирается во владельца. ## Что показал сухой прогон ``` РЕЖИМ: сухой прогон (по умолчанию). Ни одного побочного эффекта. Источник: gendesign-postgres-1 → приёмник: gendesign-infra-postgres; базы: forgejo glitchtip gendesign-postgres-1: запущен ОШИБКА: контейнер gendesign-infra-postgres не запущен ``` Скрипт ведёт себя ровно как надо: отказывается на preflight и не делает ничего наполовину. Но отказ означает, что **шаги 1–2 ещё не выполнены** — `docker ps` подтверждает, `infra-postgres` на проде не поднят. ## Где именно затык Порядок из шапки сервиса `infra-postgres`: | Шаг | Что | Кто | |---|---|---| | 1 | `INFRA_PG_PASSWORD` и `FORGEJO_DB_PASS` в `/opt/gendesign/.env` | **владелец** | | 2 | `COMPOSE_PROFILES=glitchtip,infra` в том же файле | **владелец** | | 3 | перенос баз — `split-infra-postgres.sh --apply` | в окно | | 4 | `GLITCHTIP_DB_HOST=infra-postgres` в `.env` | **владелец** | Три шага из четырёх правят `/opt/gendesign/.env` — секрет-файл, к которому я не имею доступа по конструкции. Так что дальше preflight без тебя я не пройду. **Важно по срокам:** шаги 1–2 надо сделать **до окна**, а не в нём. Шаг 3 внутри окна просто не с чем выполнять, пока пустой кластер не поднят и роли не заведены. Предлагаю поставить их в **T−48 ч** (то есть к 28.08, вместе с понижением TTL из #3027) и сразу повторить сухой прогон — он должен пройти дальше preflight. Это дёшево и снимает риск обнаружить проблему уже в окне. ## Раннбук обновлён В `runbooks/cutover_beget_selectel_0830.md` этот issue был записан как **открытый блокер с развилкой A/B/C**. Поправил: развилка снята #3080, вместо неё — конкретный четырёхшаговый порядок и отметка, какие шаги за владельцем. Старая формулировка при подготовке окна заставила бы искать уже принятое решение. ## Побочно: две работы не потеряли друг друга #3080 переписал `ops/backup-forgejo.sh` (+121 строка) — тот же файл, что правил #3073 (бэкап конфигурации Forgejo, чтобы восстановимы были не только данные, но и то, чем они поднимаются). Проверил: **правка пережила слияние** — `config_out` присутствует 12 раз и на `main`, и в задеплоенном файле на проде.
Author
Owner

Шаг 3 и cutover выполнены 25.08. Forgejo и GlitchTip работают на gendesign-infra-postgres.

Перенос

Простой 3 мин 32 с (08:47:52 → 08:51:25 UTC), сверка построчная:

база таблиц строк pg_restore
forgejo 121 → 121 288 298 → 288 298 rc=0, ошибок 0, предупреждений 0
glitchtip 1634 → 1634 419 003 → 419 003 rc=0, ошибок 0, предупреждений 0

Соединения после переключения: infra-postgres — forgejo 2, glitchtip 6; старый кластер — никто.

Старые базы в gendesign-postgres-1 оставлены намеренно, откат бесплатен. Сносить — отдельным решением, не раньше чем через несколько дней стабильной работы.

Две поправки к раннбуку, обе про тихий отказ

1. Правка app.ini не работает — значение приходит из окружения.

Пункт «заменить HOST = postgres:5432 на infra-postgres:5432 в app.ini» выполним, но бесполезен. В /home/gendesign/forgejo/docker-compose.yml задано FORGEJO__database__HOST: postgres:5432, и Forgejo перегенерирует app.ini из переменных окружения при каждом старте. После первого же подъёма контейнера в файле снова стоял postgres:5432, и Forgejo держал два соединения со старым кластером — при том что скрипт напечатал «стало: infra-postgres».

Настоящее переключение:

sed -i 's#^\(\s*FORGEJO__database__HOST:\s*\)postgres:5432\s*$#\1infra-postgres:5432#' \
    /home/gendesign/forgejo/docker-compose.yml
cd /home/gendesign/forgejo && docker compose up -d --force-recreate forgejo

Проверять надо не содержимое конфига, а pg_stat_activity на обоих кластерах — именно эта проверка и поймала откат.

2. Конфиг бэкапа лежит по другому пути.

Пункт 3 называет /etc/default/gendesign-backup-forgejo — такого файла на Beget нет. Реальный путь задан прямо в crontab: FORGEJO_BACKUP_ENV_FILE=/opt/gendesign/secrets/forgejo-backup.env. Файл по напечатанному пути никем бы не читался, автоопределение контейнера встало бы на неоднозначности (exit 1 по замыслу — база forgejo теперь в двух живых контейнерах), и ночной бэкап git-хоста перестал бы сниматься молча: канал оповещений сторожа свежести на этом хосте не настроен.

PG_CONTAINER=gendesign-infra-postgres записан в /opt/gendesign/secrets/forgejo-backup.env.

Мелочь там же: пункт 4 предлагает docker start glitchtip-web glitchtip-worker, но окружение контейнера фиксируется при создании — start поднял бы их со старым DATABASE_URL. Нужно up -d --force-recreate.

Проверено после переключения

  • git ls-remote отдаёт HEAD — git-протокол жив
  • API отвечает данными из БД: 132 открытых issue
  • раннеры Actions пишут в новый кластер (last_online у всех трёх обновился) — работают не только чтения
  • errors.gendsgn.ru — HTTP 200
  • ночной бэкап прогнан руками целиком: выбрал верный контейнер, снял БД 58 МБ + репозитории 44 МБ + конфиг, выгрузил все три в S3, обновил сентинел

Копии всех изменённых конфигов и оба дампа — в /opt/gendesign/backups/migration-3061/.

Осталось по задаче

  • снести устаревшие копии forgejo и glitchtip из gendesign-postgres-1 — не раньше нескольких дней стабильной работы, иначе они уедут на Selectel и будут выглядеть настоящими
  • сверить значения секретов INFRA_DEPLOY_HOST / INFRA_DEPLOY_SSH_FINGERPRINT
Шаг 3 и cutover выполнены 25.08. Forgejo и GlitchTip работают на `gendesign-infra-postgres`. ## Перенос Простой 3 мин 32 с (08:47:52 → 08:51:25 UTC), сверка построчная: | база | таблиц | строк | pg_restore | |---|---|---|---| | forgejo | 121 → 121 | 288 298 → 288 298 | rc=0, ошибок 0, предупреждений 0 | | glitchtip | 1634 → 1634 | 419 003 → 419 003 | rc=0, ошибок 0, предупреждений 0 | Соединения после переключения: `infra-postgres` — forgejo 2, glitchtip 6; старый кластер — никто. Старые базы в `gendesign-postgres-1` оставлены намеренно, откат бесплатен. Сносить — отдельным решением, не раньше чем через несколько дней стабильной работы. ## Две поправки к раннбуку, обе про тихий отказ **1. Правка `app.ini` не работает — значение приходит из окружения.** Пункт «заменить `HOST = postgres:5432` на `infra-postgres:5432` в `app.ini`» выполним, но бесполезен. В `/home/gendesign/forgejo/docker-compose.yml` задано `FORGEJO__database__HOST: postgres:5432`, и Forgejo перегенерирует `app.ini` из переменных окружения при каждом старте. После первого же подъёма контейнера в файле снова стоял `postgres:5432`, и Forgejo держал два соединения со старым кластером — при том что скрипт напечатал «стало: infra-postgres». Настоящее переключение: ``` sed -i 's#^\(\s*FORGEJO__database__HOST:\s*\)postgres:5432\s*$#\1infra-postgres:5432#' \ /home/gendesign/forgejo/docker-compose.yml cd /home/gendesign/forgejo && docker compose up -d --force-recreate forgejo ``` Проверять надо не содержимое конфига, а `pg_stat_activity` на обоих кластерах — именно эта проверка и поймала откат. **2. Конфиг бэкапа лежит по другому пути.** Пункт 3 называет `/etc/default/gendesign-backup-forgejo` — такого файла на Beget нет. Реальный путь задан прямо в crontab: `FORGEJO_BACKUP_ENV_FILE=/opt/gendesign/secrets/forgejo-backup.env`. Файл по напечатанному пути никем бы не читался, автоопределение контейнера встало бы на неоднозначности (`exit 1` по замыслу — база forgejo теперь в двух живых контейнерах), и ночной бэкап git-хоста перестал бы сниматься молча: канал оповещений сторожа свежести на этом хосте не настроен. `PG_CONTAINER=gendesign-infra-postgres` записан в `/opt/gendesign/secrets/forgejo-backup.env`. **Мелочь там же:** пункт 4 предлагает `docker start glitchtip-web glitchtip-worker`, но окружение контейнера фиксируется при создании — `start` поднял бы их со старым `DATABASE_URL`. Нужно `up -d --force-recreate`. ## Проверено после переключения - `git ls-remote` отдаёт HEAD — git-протокол жив - API отвечает данными из БД: 132 открытых issue - раннеры Actions пишут в новый кластер (`last_online` у всех трёх обновился) — работают не только чтения - `errors.gendsgn.ru` — HTTP 200 - ночной бэкап прогнан руками целиком: выбрал верный контейнер, снял БД 58 МБ + репозитории 44 МБ + конфиг, выгрузил все три в S3, обновил сентинел Копии всех изменённых конфигов и оба дампа — в `/opt/gendesign/backups/migration-3061/`. ## Осталось по задаче - снести устаревшие копии `forgejo` и `glitchtip` из `gendesign-postgres-1` — не раньше нескольких дней стабильной работы, иначе они уедут на Selectel и будут выглядеть настоящими - сверить значения секретов `INFRA_DEPLOY_HOST` / `INFRA_DEPLOY_SSH_FINGERPRINT`
Author
Owner

Закрыто — Forgejo отвязан от уезжавшего кластера и пережил как сам переезд, так и вывод легаси-СУБД.

Решение: отдельный gendesign-infra-postgres на Beget, куда переехали БД forgejo и glitchtip. Птица уехала на Poincare, инфраструктура осталась на Beget — связка разорвана по замыслу.

Финал 26.08 (выполнен вне сессии переезда): перед удалением сняты дампы в pre-drop-20260826-052230 (forgejo.sql.gz 59 МБ, glitchtip.sql.gz 223 МБ) и pre-drop-20260826-gendesign (gendesign.dump 1,55 ГБ, auth.dump), после чего база gendesign удалена и gendesign-postgres-1 штатно остановлен (fast shutdown, exit 0).

Проверено после этого:

  • git.gendsgn.ru → 200, в gendesign-infra-postgres два активных клиентских коннекта к БД forgejo
  • раннеры живы — в логе идут POST /api/actions/runner.v1.RunnerService/FetchTask
  • errors.gendsgn.ru → 200, obsidian.gendsgn.ru → 401, garmin.gendsgn.ru → 404
  • ночной backup-forgejo.sh отработал, сторож пишет OK: forgejo backup sentinel is 4h old

Читаемость откатных дампов подтверждена pg_restore -l: gendesign.dump — 1572 объекта в оглавлении, auth.dump — 44.

Замечание для разбора похожих ситуаций: Exited (0) у контейнера БД плюс свежие каталоги pre-drop-* рядом по времени — это признак намеренного вывода из эксплуатации, а не аварии. Порядок проверки, который сработал: код выхода → лог перед остановкой → артефакты рядом по времени → отвечают ли зависимые сервисы.

Закрыто — Forgejo отвязан от уезжавшего кластера и пережил как сам переезд, так и вывод легаси-СУБД. Решение: отдельный `gendesign-infra-postgres` на Beget, куда переехали БД `forgejo` и `glitchtip`. Птица уехала на Poincare, инфраструктура осталась на Beget — связка разорвана по замыслу. Финал 26.08 (выполнен вне сессии переезда): перед удалением сняты дампы в `pre-drop-20260826-052230` (`forgejo.sql.gz` 59 МБ, `glitchtip.sql.gz` 223 МБ) и `pre-drop-20260826-gendesign` (`gendesign.dump` 1,55 ГБ, `auth.dump`), после чего база `gendesign` удалена и `gendesign-postgres-1` штатно остановлен (`fast shutdown`, exit 0). Проверено после этого: - `git.gendsgn.ru` → 200, в `gendesign-infra-postgres` два активных клиентских коннекта к БД `forgejo` - раннеры живы — в логе идут `POST /api/actions/runner.v1.RunnerService/FetchTask` - `errors.gendsgn.ru` → 200, `obsidian.gendsgn.ru` → 401, `garmin.gendsgn.ru` → 404 - ночной `backup-forgejo.sh` отработал, сторож пишет `OK: forgejo backup sentinel is 4h old` Читаемость откатных дампов подтверждена `pg_restore -l`: `gendesign.dump` — 1572 объекта в оглавлении, `auth.dump` — 44. Замечание для разбора похожих ситуаций: `Exited (0)` у контейнера БД плюс свежие каталоги `pre-drop-*` рядом по времени — это признак намеренного вывода из эксплуатации, а не аварии. Порядок проверки, который сработал: код выхода → лог перед остановкой → артефакты рядом по времени → отвечают ли зависимые сервисы.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3061
No description provided.