Self-hosted Gitea
под управлением одного бинарника.
Устанавливайте, обновляйте и настраивайте Gitea и раннер — HTTPS, декларативный конфиг, бэкап и self-update. Один проверяемый бинарник, за которым не нужно следить.
$ curl -fsSL https://dl.gtcnsl.ru/latest/gtcnsl-v1.3.0-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 приводит сервер в соответствие — с diff и бэкапом.
[server]DOMAIN = git.example.comROOT_URL = https://git.example.com/SSH_PORT = 2222[actions]ENABLED = true[security]INSTALL_LOCK = true
$ gtcnsl config apply~ [server] SSH_PORT 22 → 2222+ [actions] ENABLED = trueбэкап → /etc/gitea/app.ini.bak3 изменения применены · gitea перезапущен
Работает там, где вы
Один бинарник на дистрибутивах и архитектурах, которые вы реально разворачиваете.
Почему бинарник, а не скрипт
Для тех, кто относится к своему серверу как к продакшену.
Один статический бинарник
Ни 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 — каждая загрузка, каждый раз.