Production stack¶
Это runbook для production-контура портала и Authelia. Внешний reverse proxy обслуживается отдельным репозиторием и серверной конфигурацией.
portal- статический MkDocs-сайт в Docker;authelia- аутентификация и authorization rules.- Этот runbook не описывает и не управляет серверным
Caddy; он не должен останавливаться или проверяться как часть этого деплоя.
Деплой¶
- Запушить изменения в
main. - Дождаться workflow
portal-docs. - Workflow обнаруживает GitHub repos с
docs/, синкает репозиторий на Ubuntu-host через SSH и генерируетportal/sources/repos.generated.yml. verifyjob публикуетportal/.build/siteкак artifact, аdeployjob забирает его передrsync.- Workflow генерирует runtime secret files в
deploy/prod/authelia/secrets/иusers_database.yml, затем синкает их на сервер. - Workflow запускает
docker compose -f docker-compose.prod.yml up -d --build --pull always --remove-orphans. - После синка runtime файлов workflow перезапускает
wiki-portal-authelia, чтобы она перечиталаusers_database.ymlи secret files.
Rollback¶
Самый безопасный rollback для текущего процесса - вернуть предыдущий commit и снова прогнать workflow.
- Найти последний рабочий commit.
- Создать revert commit или temporary rollback branch.
- Запушить rollback в
mainили вручную запустить workflow на rollback branch. - После rollback снова проверить
/иauth.portalgm.ru.
Если нужен прямой server-side rollback без нового commit, этот процесс надо отдельно усилить через release directories и symlink-based deploy.
Добавить пользователя¶
Production Authelia использует deploy/prod/authelia/users_database.yml, который workflow собирает из уже существующих GitHub Secrets:
AUTHELIA_STORAGE_ENCRYPTION_KEYJWT_SECRETSESSION_SECRETWIKI_ADMIN_EMAILWIKI_ADMIN_PASSWORDWIKI_DEV_LOGINWIKI_DEV_PASSWORDWIKI_MARKETING_LOGINWIKI_MARKETING_PASSWORD
Сами логины в production совпадают со значениями WIKI_MARKETING_LOGIN, WIKI_DEV_LOGIN и WIKI_ADMIN_EMAIL, а принадлежность к группам задается отдельно:
WIKI_MARKETING_LOGIN->marketing/readersWIKI_DEV_LOGIN->dev/editorsWIKI_ADMIN_EMAIL->admin/admins
В deploy/prod/authelia/configuration.yml включен поиск по email, поэтому для этих пользователей можно использовать как короткий логин, так и email из поля email.
- Сгенерировать новый password hash через Authelia:
docker run --rm authelia/authelia:4.39.19 authelia crypto hash generate sha2crypt --password 'new-password'
- Workflow сам собирает users DB на основании секретов выше.
- Убедиться, что user входит в нужную group:
marketing->readersdev->editorsadmin->admins- Перезапустить workflow deploy.
Смена паролей и секретов¶
Ротация production secrets:
AUTHELIA_STORAGE_ENCRYPTION_KEYSESSION_SECRETJWT_SECRET
AUTHELIA_STORAGE_ENCRYPTION_KEY должен быть не короче 20 символов, иначе Authelia уходит в restart loop уже на старте.
Порядок:
- Сгенерировать новые random values.
- Обновить GitHub Secrets.
- Запустить deploy workflow.
- Проверить, что
/и/admin/снова открываются после логина.
Подключить новый repo¶
- Если repo находится в GitHub org и у него есть
docs/, он подключается автоматически черезportal/sources/repos.generated.yml. - Для внешних репозиториев, не входящих в org, добавить source в
portal/sources/repos.yml. - Проверить, что
PORTAL_GITHUB_TOKENимеет доступ к private repos, иначе discovery и clone будут падать. - Прогнать
make buildи production workflow. - Не коммитить
portal/docs/imported/,portal/docs/_generated/,portal/docs/admin/config.ymlиportal/sources/repos.generated.yml; они генерируются при build/deploy.
Почему /admin не работает¶
Проверять по порядку:
auth.portalgm.ruотвечает 200/302 без 5xx.- В
deploy/prod/authelia/configuration.ymlесть rule для/admin. - Пользователь входит в
editorsилиadmins. portal/docs/admin/config.ymlсгенерирован build'ом.portalиautheliaконтейнеры запущены без restart loop.
Логи¶
Смотреть логи на host:
docker compose -f docker-compose.prod.yml logs -f portal
docker compose -f docker-compose.prod.yml logs -f authelia
Если нужен быстрый health-check, сначала проверить:
docker compose -f docker-compose.prod.yml ps