# Gitea Helm Chart And Restore Validation Дата проверки: 2026-05-06 ## Что входит в чарт Чарт расположен в `gitea/.helm` и ставится как release `gitea` в namespace `gitea`. - Gitea `gitea/gitea:1.22.6`. - Gitea runner `gitea/act_runner:0.2.11`. - PostgreSQL через dependency `postgresql-preprod:16.4.8` из `cr.yandex/crp3ccidau046kdj8g9q/charts/postgresql-preprod`. - `universal-chart:0.1.9` используется для runner. - Для Gitea используется статический Deployment template, потому что нужны sidecar containers для файлового backup без Multi-Attach PVC. - Ingress/VirtualService в чарте нет, внешний routing остается в отдельном чарте. - Чувствительные значения не лежат в `values.yaml`; секреты берутся из `gitea-secret`/`postgresql-secret`, шаблон секрета использует `lookup` и generated fallback values. ## Backup Файлы Gitea backup: - Реализованы sidecar containers в pod Gitea. - `gitea-files-archive` читает `/data` read-only и собирает архив во временный `emptyDir`. - `gitea-files-upload` отправляет архив в S3. - Такой режим не монтирует `gitea-data` во второй pod и не ловит Multi-Attach на RWO PVC. PostgreSQL backup: - В чарте есть `CronJob/gitea-postgresql-backup`. - Dump создается через `pg_dump` пользователем `gitea`. - Upload идет в S3 через `amazon/aws-cli:2.15.57`. Использованные S3 keys: - Files: `gitops-backups/gitea-files/gitea-files-2026-05-06-145356.tar.gz` - PostgreSQL: `gitops-backups/postgresql/gitea-postgresql-2026-05-06-145822.sql.gz` ## Restore Restore запускается через `helm upgrade --install` с отдельным values-файлом: - `restore.enabled=true` - `restore.files.enabled=true` - `restore.postgresql.enabled=true` - `restore.s3.giteaFilesKey=` - `restore.s3.postgresqlDumpKey=` Restore hook делает: - scale down Deployment `gitea`; - скачивание backup archives из S3; - очистку `/data` и распаковку файлового backup; - drop schema `public` в базе `gitea`; - restore SQL dump через пользователя `gitea`; - verification количества public tables и core tables; - scale up Deployment `gitea`. ## Проверка Проверено на `yc-infra-prod`, namespace `gitea`. - Release `gitea` установлен заново после полной очистки namespace/PVC/PV. - Pods после чистой установки: `gitea`, `gitea-ci-worker`, `postgresql-0`. - Создан admin user `bootstrap`. - Создан access token для API/git push. - В свежий Gitea запушен репозиторий `bootstrap/gitea`. - В репозиторий добавлен workflow `.gitea/workflows/trash-ci.yaml`. - Runner зарегистрирован через generated registration token. - Runner объявился с labels `linux-amd64` и `linux-shell`. - CI task по `bootstrap/gitea` был принят runner. - Тестовые файлы для restore созданы в `/data/backup-test` и `/data/gitea/custom/backup-test`. - Файловый backup отправлен в S3. - PostgreSQL backup вручную запущен из существующего `CronJob/gitea-postgresql-backup`. - Restore запущен через `helm upgrade --install`. - Restore job завершился успешно. - Verification restore job: `110 public tables`, `3 core tables`. - После restore Gitea API вернул `bootstrap/gitea|main`. - После restore на PVC найдены: - `/data/backup-test/blob.bin` - `/data/backup-test/generated-at.txt` - `/data/gitea/custom/backup-test/marker.txt` - `/data/git/repositories/bootstrap/gitea.git` - После restore в базе: - `users=1` - `repos=1` - repository `bootstrap/gitea` - action runs `1` и `2` Итог: полный цикл install, runner, CI, backup files, backup PostgreSQL и restore из S3 проверен.