Self-hosted Gitea
под управлением одного бинарника.
Устанавливайте, обновляйте и настраивайте Gitea и раннер — HTTPS, декларативный конфиг, бэкап и self-update. Один проверяемый бинарник, за которым не нужно следить.
$ curl -fsSL https://dl.gtcnsl.ru/latest/gtcnsl-v1.3.2-linux-amd64 -o /usr/local/bin/gtcnsl && chmod +x /usr/local/bin/gtcnsl
Что умеет
Весь жизненный цикл Gitea — декларативно и проверяемо.
Проверенная установка и апгрейд
Скачивает Gitea с официального зеркала с проверкой GPG и SHA-256, а раннер — с проверкой SHA-256; определяет существующую установку и безопасно обновляет её на месте.
HTTPS-профили и adopt
Прямой HTTPS через встроенный ACME или свой сертификат, с автоматическим откатом. gitea adopt берёт под управление установку вручную, не перемещая данные.
Декларативный app.ini
Желаемое состояние — в Git. gtcnsl config apply приводит сервер в соответствие — с diff и бэкапом. config get/set/toggle для точечных изменений.
Управление секретами
Генерация, ротация и безопасное хранение секретов Gitea — включая защищённую ротацию SECRET_KEY, которая перешифровывает каждую затронутую запись вместо того, чтобы её «осиротить».
Бэкап, восстановление и self-update
Снимает бэкап бинарника и конфига Gitea для восстановления, управляет systemd-юнитами gitea и gitea-runner и поддерживает актуальность самого gtcnsl через self-update — каждый шаг откатывается при сбое.
TUI и CLI
Интерактивный TUI по умолчанию; неинтерактивный CLI для cron и CI-пайплайнов — один и тот же статический бинарник для linux amd64, arm64 и armv7.
Консоль, а не скрипт
Запустите gtcnsl без аргументов — и получите настоящий терминальный интерфейс: сервисы, наличие конфига и секреты с одного экрана.
Быстрый старт
От нуля до работающего Gitea с CI — три команды.
gtcnsl gitea install --yes
Устанавливает Gitea, генерирует секреты, пишет app.ini, разворачивает systemd-юнит и запускает его — автоматический откат, если health-check не прошёл.
gtcnsl runner install --executor=docker --yes
Устанавливает раннер и его юнит gitea-runner с executor-ом Docker. Остаётся остановленным, пока вы его не зарегистрируете.
gtcnsl runner register --instance https://git.example.com --token <fresh-token> --yes
Регистрирует раннер на вашем инстансе и запускает его. Токен возьмите в Site Admin, Runners, Create new runner.
Декларативно по умолчанию
Держите app.ini как шаблон в Git. gtcnsl config apply рендерит его с подстановкой --var, показывает diff, делает бэкап старого файла и перезапускает Gitea с health-check.
[server]PROTOCOL = httpHTTP_PORT = 3000SSH_PORT = ${SSH_PORT}DOMAIN = localhostROOT_URL = http://localhost:3000/APP_DATA_PATH = /var/lib/gitea/data[actions]ENABLED = ${ACTIONS_ENABLED}
$ gtcnsl config apply --template /root/app.ini.tmpl --var SSH_PORT=2222 --var ACTIONS_ENABLED=true --yes==> render templatetemplate /root/app.ini.tmpl (681 bytes), 2 variable(s)done in 0s==> parse currentdone in 0s==> diff2 change(s):[actions] ENABLED: "true" (added)[server] SSH_PORT: "22" → "2222" (changed)done in 0s==> applybackup written to /etc/gitea/app.ini.bakdone in 9ms==> restart + health checkgitea.service restartedGitea is responding againdone in 1.019sapplied 2 change(s) to /etc/gitea/app.ini
Работает там, где вы
Один бинарник на дистрибутивах и архитектурах, которые вы реально разворачиваете.
Почему бинарник, а не скрипт
Для тех, кто относится к своему серверу как к продакшену.
Один статический бинарник
Ни Python, ни Ansible, ни рантайма для установки и версионирования. Положите на сервер и запустите.
Проверяемость
Загрузки Gitea сверяются с GPG-подписями и SHA-256; раннер и сам gtcnsl проверяются через SHA-256 — каждый раз, ещё до того, как что-то коснётся системы.
Идемпотентность
Декларативное состояние делает повторный запуск безопасным. Примените тот же конфиг дважды — получите тот же сервер.
Весь жизненный цикл
Установка, апгрейд, настройка и запуск — один инструмент вместо папки хрупких shell-скриптов.
Статус
v1.x — CLI стабилен и версионируется по SemVer с v1.0.
Вопросы
Только то, что описано в декларативном конфиге. Всё остальное не трогается, а config apply показывает diff и пишет бэкап перед любым изменением.
Да. gtcnsl gitea adopt берёт установку вручную под управление, не перемещая данные (по умолчанию dry-run), а затем config apply приводит app.ini в соответствие с вашим шаблоном — с diff и бэкапом.
Для установки и операций с сервисами — да, он управляет systemd-юнитами. Команды только на чтение — doctor, config get — нет.
Нет. Ни аккаунта, ни телеметрии, ни phone-home. Один бинарник и ваш сервер.
Бинарники Gitea сверяются с их GPG-подписью и SHA-256; раннер и self-update самого gtcnsl проверяются через SHA-256 — каждая загрузка, каждый раз.