- Jinja 62.1%
- Just 37.9%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
После ребута сервера forgejo-pages мог стартовать раньше Forgejo: получал 404 от Traefik (Forgejo ещё не зарегистрирован) и кэшировал их навсегда, из-за чего страницы не открывались до ручного перезапуска. Исправления: - Новый ExecStartPre ждёт готовности Forgejo API (curl /api/v1/version) до запуска контейнера. URL вставляется через Jinja напрямую (без sh-переменной $url), чтобы в строке не осталось ни одного $NAME-токена, который systemd мог бы развернуть. Управляется переменной forgejo_pages_forgejo_wait_timeout (0 = не ждать). - TimeoutStartSec поднят до 420s, чтобы worst-case ожидания (две пробы) не превышал таймаут старта. - forgejo_pages_systemd_after_services задаёт порядок старта после traefik и forgejo (After=). - Новый рецепт just restart — лечение застрявшего кэша 404 после ребута. Файлы: - roles/forgejo_pages/templates/forgejo-pages.service.j2 - roles/forgejo_pages/defaults/main.yml - justfile |
||
| examples | ||
| roles/forgejo_pages | ||
| .gitignore | ||
| ansible.cfg | ||
| justfile | ||
| playbook.yml | ||
| README.md | ||
| requirements.yml | ||
ansible-forgejo-pages
Переиспользуемая Ansible-роль для развёртывания pages-сервера Forgejo
(ronmi/forgejo-pages) за реверс-прокси (по умолчанию Traefik). Раздаёт ветку
репозитория как статический сайт: https://<hostname>/<user>/<repo>/.
Роль универсальная — ничего не захардкожено. Инвентори организован
папкой, как в mash/MDAD: шаблоны лежат в examples/, их копируют в
inventory/ и заполняют под себя.
Структура
ansible-forgejo-pages/
├── ansible.cfg # inventory = inventory/, roles_path = roles
├── justfile # рецепты just (roles / install-all / check / ...)
├── playbook.yml # применяет роль к группе [pages]
├── requirements.yml # community.docker
├── examples/ # ШАБЛОНЫ — скопировать в inventory/
│ ├── hosts
│ └── host_vars/
│ └── myserver.example.com/
│ └── vars.yml
├── inventory/ # ТВОЙ инвентори (создаётся копированием из examples/)
│ └── .gitkeep
└── roles/
└── forgejo_pages/
├── defaults/main.yml # все переменные + дефолты
├── tasks/main.yml # проверки + деплой
├── templates/… # docker-compose шаблон
├── meta/main.yml # Galaxy-метаданные
└── README.md # справка по роли
Быстрый старт
# 1. зависимости на контроллере
just roles # = ansible-galaxy collection install -r requirements.yml
# 2. СКОПИРОВАТЬ примеры в inventory/
cp examples/hosts inventory/hosts
cp -r examples/host_vars/myserver.example.com inventory/host_vars/<твой-host>
# 3. отредактировать под себя
$EDITOR inventory/hosts # сервер; имя хоста = имя папки в host_vars/
$EDITOR inventory/host_vars/<твой-host>/vars.yml # hostname / forgejo_url / token
# токен лучше зашифровать:
just encrypt-token 'ТВОЙ_ТОКЕН'
# 4. запуск — нужна vault-аутентификация (см. ниже)
just install-all --ask-vault-pass
Vault: токен зашифрован, поэтому при запуске нужен доступ к vault-паролю. Способы: передать
--ask-vault-pass(как выше) либо--vault-password-file ~/.ansible-vault-pass; или — удобнее — раскомментироватьvault_password_fileвansible.cfg, и тогда хватитjust install-all. Не комбинируй--ask-vault-passи--vault-password-fileодновременно — ansible это запрещает.Список рецептов —
justбез аргументов (roles,install-all,check,ping,encrypt-token). Синонимы:deps=roles;install=setup-all=install-all.
Имя хоста в
inventory/hostsи имя папки вinventory/host_vars/должны совпадать — это связывает сервер с его переменными (как в mash/MDAD).
Что нужно один раз на стороне Forgejo/DNS
- Токен Forgejo со scope
read:repository. - DNS-запись
<hostname>→ IP сервера. - Реверс-прокси (Traefik) уже работает на сервере.
Обязательные переменные (в host_vars//vars.yml)
forgejo_pages_hostname— web-хост раздачи.forgejo_pages_forgejo_url— URL Forgejo.forgejo_pages_token— API-токен (read:repository).
Остальное — с дефолтами, см. roles/forgejo_pages/defaults/main.yml и
roles/forgejo_pages/README.md. Если Traefik с другими именами
сети/entrypoint/резолвера — подсмотри их docker inspect-ом (в README роли) и
переопредели forgejo_pages_traefik_* в vars.yml.
Несколько серверов
Добавляй хосты в inventory/hosts и заводи для каждого свою папку
inventory/host_vars/<host>/vars.yml — роль применится к каждому со своими
значениями.
Без Traefik
forgejo_pages_traefik_enabled: false (+ при желании
forgejo_pages_published_port) — и подключай свой прокси.
Проверка
В любом репозитории создай ветку static-pages с index.html, открой
https://<hostname>/<user>/<repo>/index.html.