К содержимому
gtcnsl
EN RU

Конфигурация

gtcnsl обращается с app.ini Gitea как с декларативной конфигурацией: рендерит его из шаблона в Git, показывает diff, затем применяет атомарно с бэкапом и health-проверкой.

Актуально для v1.3.0

Где лежит конфиг

Gitea читает /etc/gitea/app.ini. gtcnsl никогда не правит его на месте — каждая запись проходит цикл бэкап → атомарная запись → рестарт → health-проверка и откатывается на app.ini.bak, если Gitea не поднялась.

Прочитать текущую конфигурацию

# только ключи, отличающиеся от дефолтов Gitea
gtcnsl config get

# все ключи схемы, с дефолтом рядом с каждым переопределением
gtcnsl config get --show-defaults

# один ключ, удобно для pipe
gtcnsl config get server.DOMAIN

config get — только чтение. Безсекционные ключи-пролог (редкие, напр. RUN_USER) запрашиваются без точки.

Применить шаблон (декларативный путь)

Держите app.ini.tmpl с плейсхолдерами ${VAR} в системе контроля версий, затем рендерите и применяйте:

gtcnsl config apply \
  --template app.ini.tmpl \
  --var DOMAIN=git.example.com \
  --var ROOT_URL=https://git.example.com/ \
  --dry-run

# diff устраивает? убираем --dry-run и подтверждаем
gtcnsl config apply --template app.ini.tmpl --var DOMAIN=git.example.com --yes

${VAR} без соответствующего --var — это ошибка, а не пустая строка: опечатка падает громко, а не молча обнуляет значение. Чтобы вывести литеральный ${VAR}, пишите \${VAR}.

i
Сначала всегда --dry-run
--dry-run вычисляет точный diff и ничего не пишет. Сделайте это привычкой перед любым apply.

Изменить один ключ

gtcnsl config set server.DOMAIN git.example.com --yes
gtcnsl config toggle service.DISABLE_REGISTRATION --yes

set пишет один ключ; toggle переключает булево (truefalse). Оба используют тот же цикл бэкап-и-откат, что и apply.

Что так задать нельзя

config set / toggle отказывают для секретных ключей (напр. security.SECRET_KEY, security.INTERNAL_TOKEN, oauth2.JWT_SECRET) и составных ключей, меняющих форму подсистемы (напр. database.DB_TYPE, session.PROVIDER, cache.ADAPTER). Секретами управляйте через gtcnsl secrets.

Синхронизировать каталог схемы

Чтобы сравнивать с дефолтами конкретной версии Gitea, закэшируйте её app.example.ini:

gtcnsl config sync-schema --version 1.26.2 --yes

Скачивает (~50 МБ) и кэширует в /var/lib/gtcnsl/schema-cache/<version>/. Добавьте --refresh для повторной загрузки.

!
Apply перезапускает Gitea
Успешный apply/set/toggle рестартит gitea.service — ожидайте несколько секунд простоя. Если health-проверка не прошла, gtcnsl восстанавливает app.ini.bak и рестартит снова.

config.yaml раннера

Собственные настройки gitea-runner (runner.post_task_script, action_shallow_clone, container.network_create_options.enable_ipv4/6 и всё остальное, что документирует generate-config) — отдельный файл от app.ini, и config apply/set/toggle выше его не касаются. runner register/reconfigure при первом запуске пишут базовый файл — через собственный generate-config установленного бинарника, никогда не перезаписывая уже существующий. Чтобы (пере)сгенерировать его явно:

gtcnsl runner config generate            # отказывает, если config.yaml уже есть
gtcnsl runner config generate --force    # сначала бэкапит существующий файл, затем перезаписывает

Файл лежит в <WorkDir>/config.yaml (по умолчанию /var/lib/gitea-runner/config.yaml), режим 0640. Декларативного применения отдельных ключей — аналога config apply для раннера — пока нет; runner config — родительская команда, зарезервированная под это на будущее.

Дальше

Держите app.ini.tmpl в Git и пусть config apply устраняет дрейф. Про четыре управляемых секрета — в разделе «Секреты».