fix(ops): страж повторной заливки перестал молча пропускаться (#3092)
All checks were successful
Deploy / build-backend (push) Has been skipped
Deploy Infra Host / sync-infra-host (push) Successful in 5s
Deploy / changes (push) Successful in 7s
Deploy / build-worker (push) Has been skipped
Deploy / build-frontend (push) Has been skipped
Deploy / deploy-caddy (push) Has been skipped
Deploy / deploy (push) Successful in 1m38s
Deploy / deploy-status (push) Successful in 1s
Deploy / perimeter-smoke (push) Successful in 9s
All checks were successful
Deploy / build-backend (push) Has been skipped
Deploy Infra Host / sync-infra-host (push) Successful in 5s
Deploy / changes (push) Successful in 7s
Deploy / build-worker (push) Has been skipped
Deploy / build-frontend (push) Has been skipped
Deploy / deploy-caddy (push) Has been skipped
Deploy / deploy (push) Successful in 1m38s
Deploy / deploy-status (push) Successful in 1s
Deploy / perimeter-smoke (push) Successful in 9s
This commit is contained in:
parent
00d434f88d
commit
12e48a7783
1 changed files with 29 additions and 4 deletions
|
|
@ -58,6 +58,24 @@ DST_CONTAINER="${DST_CONTAINER:-gendesign-infra-postgres}"
|
||||||
DATABASES="${DATABASES:-forgejo glitchtip}"
|
DATABASES="${DATABASES:-forgejo glitchtip}"
|
||||||
DUMP_DIR="${DUMP_DIR:-/opt/gendesign/backups/migration-3061}"
|
DUMP_DIR="${DUMP_DIR:-/opt/gendesign/backups/migration-3061}"
|
||||||
FORGEJO_DIR="${FORGEJO_DIR:-/home/gendesign/forgejo}"
|
FORGEJO_DIR="${FORGEJO_DIR:-/home/gendesign/forgejo}"
|
||||||
|
|
||||||
|
# Где на самом деле лежит app.ini. Раньше здесь подразумевалось
|
||||||
|
# "${FORGEJO_DIR}/app.ini", и такого файла на хосте НЕТ: FORGEJO_DIR — каталог
|
||||||
|
# со стеком (docker-compose.yml, раннеры), а конфиг живёт внутри тома данных,
|
||||||
|
# который монтируется в контейнер как /data. Проверено на боевом хосте:
|
||||||
|
# /home/gendesign/forgejo/data/forgejo -> /data
|
||||||
|
# app.ini = /home/gendesign/forgejo/data/forgejo/gitea/conf/app.ini
|
||||||
|
# Тихо это ломало страж assert_not_cut_over: он проверяет файл через
|
||||||
|
# `[[ -r "$ini" ]]`, несуществующий путь читается как "признака нет", и
|
||||||
|
# половина защиты от повторного --force-restore после cutover просто не
|
||||||
|
# срабатывала — молча, без единого сообщения.
|
||||||
|
FORGEJO_APP_INI="${FORGEJO_APP_INI:-}"
|
||||||
|
if [[ -z "$FORGEJO_APP_INI" ]]; then
|
||||||
|
for candidate in "${FORGEJO_DIR}/data/forgejo/gitea/conf/app.ini" "${FORGEJO_DIR}/data/gitea/conf/app.ini" "${FORGEJO_DIR}/app.ini"
|
||||||
|
do
|
||||||
|
[[ -r "$candidate" ]] && { FORGEJO_APP_INI="$candidate"; break; }
|
||||||
|
done
|
||||||
|
fi
|
||||||
# Писатели, которых надо погасить на время дампа. Порядок важен только тем, что
|
# Писатели, которых надо погасить на время дампа. Порядок важен только тем, что
|
||||||
# forgejo идёт первым: это git и CI, его простой заметнее всего.
|
# forgejo идёт первым: это git и CI, его простой заметнее всего.
|
||||||
FORGEJO_CONTAINER="${FORGEJO_CONTAINER:-forgejo}"
|
FORGEJO_CONTAINER="${FORGEJO_CONTAINER:-forgejo}"
|
||||||
|
|
@ -125,8 +143,15 @@ fi
|
||||||
# сравнивает источник с приёмником, и записей, сделанных после cutover, в
|
# сравнивает источник с приёмником, и записей, сделанных после cutover, в
|
||||||
# источнике никогда не было. Поэтому единственная защита — не дать запуститься.
|
# источнике никогда не было. Поэтому единственная защита — не дать запуститься.
|
||||||
assert_not_cut_over() {
|
assert_not_cut_over() {
|
||||||
local ini="${FORGEJO_DIR}/app.ini" hit=""
|
local ini="$FORGEJO_APP_INI" hit=""
|
||||||
if [[ -r "$ini" ]] && grep -Eq '^[[:space:]]*HOST[[:space:]]*=[[:space:]]*infra-postgres' "$ini"; then
|
# Не нашли app.ini — это НЕ "признака нет". Раньше здесь молча пропускалась
|
||||||
|
# половина стража, и --force-restore после cutover залил бы устаревший дамп
|
||||||
|
# поверх живых данных, а сверка фазы 5 подтвердила бы это как успех.
|
||||||
|
# Лучше остановиться и заставить указать путь явно.
|
||||||
|
if [[ -z "$ini" || ! -r "$ini" ]]; then
|
||||||
|
die "не найден app.ini Forgejo — проверить, сделан ли уже cutover, нечем. Искал: ${FORGEJO_DIR}/data/forgejo/gitea/conf/app.ini, ${FORGEJO_DIR}/data/gitea/conf/app.ini, ${FORGEJO_DIR}/app.ini. Укажи путь через FORGEJO_APP_INI=... Пропускать эту проверку нельзя: именно она не даёт --force-restore залить устаревший дамп поверх данных, записанных после cutover."
|
||||||
|
fi
|
||||||
|
if grep -Eq '^[[:space:]]*HOST[[:space:]]*=[[:space:]]*infra-postgres' "$ini"; then
|
||||||
hit+="${ini} (HOST = infra-postgres); "
|
hit+="${ini} (HOST = infra-postgres); "
|
||||||
fi
|
fi
|
||||||
if [[ -r "$GENDESIGN_ENV" ]] && grep -Eq '^[[:space:]]*GLITCHTIP_DB_HOST[[:space:]]*=[[:space:]]*infra-postgres' "$GENDESIGN_ENV"; then
|
if [[ -r "$GENDESIGN_ENV" ]] && grep -Eq '^[[:space:]]*GLITCHTIP_DB_HOST[[:space:]]*=[[:space:]]*infra-postgres' "$GENDESIGN_ENV"; then
|
||||||
|
|
@ -498,7 +523,7 @@ log "Сверка возражений не имеет."
|
||||||
# ==========================================================================
|
# ==========================================================================
|
||||||
phase "ФАЗА 6: ручные шаги (скрипт их НЕ делает)"
|
phase "ФАЗА 6: ручные шаги (скрипт их НЕ делает)"
|
||||||
cat <<MANUAL
|
cat <<MANUAL
|
||||||
1. Forgejo: в ${FORGEJO_DIR}/app.ini заменить
|
1. Forgejo: в ${FORGEJO_APP_INI:-${FORGEJO_DIR}/data/forgejo/gitea/conf/app.ini} заменить
|
||||||
HOST = postgres:5432 → HOST = infra-postgres:5432
|
HOST = postgres:5432 → HOST = infra-postgres:5432
|
||||||
(compose Forgejo лежит там же, вне этого репозитория).
|
(compose Forgejo лежит там же, вне этого репозитория).
|
||||||
2. GlitchTip: в /opt/gendesign/.env выставить
|
2. GlitchTip: в /opt/gendesign/.env выставить
|
||||||
|
|
@ -521,7 +546,7 @@ cat <<MANUAL
|
||||||
и ночной ops/backup-forgejo.sh — что он выбрал нужный контейнер.
|
и ночной ops/backup-forgejo.sh — что он выбрал нужный контейнер.
|
||||||
|
|
||||||
ОТКАТ (пока старые базы живы — то есть всегда до шага «удаление» ниже):
|
ОТКАТ (пока старые базы живы — то есть всегда до шага «удаление» ниже):
|
||||||
a. вернуть HOST = postgres:5432 в ${FORGEJO_DIR}/app.ini;
|
a. вернуть HOST = postgres:5432 в ${FORGEJO_APP_INI:-${FORGEJO_DIR}/data/forgejo/gitea/conf/app.ini};
|
||||||
b. вернуть GLITCHTIP_DB_HOST=postgres (или убрать строку — дефолт postgres);
|
b. вернуть GLITCHTIP_DB_HOST=postgres (или убрать строку — дефолт postgres);
|
||||||
c. вернуть PG_CONTAINER=gendesign-postgres-1 в конфиге бэкапа Forgejo;
|
c. вернуть PG_CONTAINER=gendesign-postgres-1 в конфиге бэкапа Forgejo;
|
||||||
d. перезапустить оба приложения.
|
d. перезапустить оба приложения.
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue