gendesign/ops/gendesign-backup-forgejo.default.example
lekss361 be2e07d9c3
All checks were successful
Deploy Infra Host / sync-infra-host (push) Successful in 2s
Deploy / changes (push) Successful in 7s
Deploy / deploy-caddy (push) Has been skipped
Deploy / perimeter-smoke (push) Successful in 10s
Deploy / build-backend (push) Successful in 50s
Deploy / build-frontend (push) Successful in 51s
Deploy / build-worker (push) Successful in 53s
Deploy / deploy (push) Successful in 1m43s
Deploy / deploy-status (push) Successful in 1s
feat(ops): лёгкий Postgres на Beget под forgejo и glitchtip (#3080)
2026-08-24 16:31:12 +00:00

80 lines
6.3 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Environment file for ops/backup-forgejo.sh (Forgejo code + DB backup, #2203).
#
# Install on the prod VM as a ROOT-OWNED, chmod-600 file that is NOT in git:
# sudo cp /opt/gendesign/ops/gendesign-backup-forgejo.default.example /etc/default/gendesign-backup-forgejo
# sudo chmod 600 /etc/default/gendesign-backup-forgejo
# sudo $EDITOR /etc/default/gendesign-backup-forgejo # fill in real S3 credentials
#
# DELIBERATELY a separate file from /etc/default/gendesign-backup (used by
# ops/backup.sh and tradein-mvp/deploy/backup-tradein-db.sh) — this backup
# uses a SEPARATE, narrower-scoped S3 service user that can ONLY PutObject
# under s3://gendsgn-backups/forgejo/*, nothing else. The prod-host writer
# key used by the other two backups (`gendsgn-backup-writer`) has root-of-
# bucket access; that key must NOT be reused here, and this key must NOT be
# put in /etc/default/gendesign-backup.
#
# THE KEY DOES NOT EXIST YET (as of #2203). Until a human creates the
# `gendsgn-backup-forgejo-writer` service user + bucket policy in the
# Selectel panel (see the #2203 PR description for the exact policy JSON —
# PutObject-only on arn:aws:s3:::gendsgn-backups/forgejo/*, explicit Deny on
# GetObject/ListBucket/Delete*) and fills in the four FORGEJO_S3_* vars
# below, ops/backup-forgejo.sh refuses to run and exits non-zero loudly. That
# is expected, not a bug.
#
# --- S3 off-site upload (Selectel S3-compatible). All four required. ---
#FORGEJO_S3_ENDPOINT=https://s3.ru-1.storage.selcloud.ru
#FORGEJO_S3_BUCKET=gendsgn-backups
#FORGEJO_S3_ACCESS_KEY=REPLACE_WITH_REAL_ACCESS_KEY_ONCE_CREATED
#FORGEJO_S3_SECRET_KEY=REPLACE_WITH_REAL_SECRET_KEY_ONCE_CREATED
# --- optional overrides (defaults are sensible; uncomment only to change) ---
#FORGEJO_S3_PREFIX=forgejo/ # key prefix inside the bucket; must match
# the policy's Resource path exactly
#KEEP=7 # how many recent local copies to retain
# (DB dumps and repo bundles are separate series)
#MIN_DB_DUMP_BYTES=2048 # sanity floor for the DB dump (small DB —
# config/issues/PRs/users, no git blobs)
#MIN_REPOS_BUNDLE_BYTES=10240 # sanity floor for the repo tar.gz
#LOCAL_BACKUP_DIR=/opt/gendesign/backups/forgejo
#FORGEJO_DIR=/home/gendesign/forgejo # Forgejo compose dir on the VM (NOT
# part of the gendesign git checkout)
#FORGEJO_REPOS_DIR=/home/gendesign/forgejo/data/forgejo/git/repositories
# --- контейнер с БД Forgejo (#3061) ---
# ЗАДАВАТЬ НЕ НУЖНО почти никогда: ops/backup-forgejo.sh находит контейнер сам.
# Он перебирает PG_CONTAINER_CANDIDATES, оставляет запущенные и берёт тот, в
# чьей базе `forgejo` реально ЕСТЬ ТАБЛИЦЫ.
#
# ПОЧЕМУ НЕ КОНСТАНТА. Раньше имя было зашито (gendesign-postgres-1 — общий
# кластер основного приложения). Переезд продукта на Selectel переносит базу
# forgejo оттуда в лёгкий инфраструктурный кластер (gendesign-infra-postgres,
# сервис infra-postgres в docker-compose.prod.yml), а старый контейнер после
# переноса какое-то время ещё жив и держит свою — с этого момента протухающую —
# копию базы. Зашитое имя означало бы, что бэкап продолжает исправно дампить
# именно её: дамп непустой, маркер завершения на месте, размер выше порога — и
# ни одной новой строки с момента cutover. Порогов на СВЕЖЕСТЬ здесь нет, так
# что выяснилось бы это только при восстановлении.
#
# КОГДА ЗАДАВАТЬ ЯВНО — ровно один случай: окно переезда, когда непустая база
# forgejo есть СРАЗУ В ДВУХ запущенных контейнерах. Автоопределение тогда не
# гадает, а останавливается с ошибкой (выбрать наугад = 50% шанс забэкапить
# труп) и ждёт прямого указания, какой контейнер боевой. Момент, с которого это
# нужно, наступает НЕ на cutover'е, а РАНЬШЕ — с первой же заливки дампа в новый
# кластер (шаг 3a в комментарии к сервису infra-postgres,
# docker-compose.prod.yml): с этой секунды кандидатов двое, и ночной бэкап
# git-хоста иначе просто не снимется. Поэтому значение здесь живёт двумя фазами:
# до cutover'а — боевой ещё старый кластер:
#PG_CONTAINER=gendesign-postgres-1
# после — новый:
#PG_CONTAINER=gendesign-infra-postgres
# Строку УБРАТЬ, как только старый контейнер погашен: дальше автоопределение
# снова однозначно и переживёт любое следующее переименование само.
#
# Явное значение берётся КАК ЕСТЬ, без проверок — это ручной override, и тот,
# кто его выставил, знает про свою инсталляцию больше. Пустое значение
# (PG_CONTAINER=) равносильно незаданному: включается автоопределение.
# Где искать, когда PG_CONTAINER пуст. Имена через пробел; КАВЫЧКИ ОБЯЗАТЕЛЬНЫ —
# файл читается через `source`, и без них второе имя bash попытается выполнить
# как команду. Трогать только если контейнеры называются иначе, чем здесь.
#PG_CONTAINER_CANDIDATES="gendesign-postgres-1 gendesign-infra-postgres"