# Пацанский Гит 🏴‍☠️ Минимальный self-hosted git: **телеграм-бот** рулит репозиториями, **cgit** их показывает, **git-http-backend** отдаёт clone/push, **cloudflared** пробрасывает наружу. Всё в докере. ``` tg-бот ──создаёт/удаляет──▶ /repos (bare) ◀──показывает── cgit ──┐ ├─ nginx ─ cloudflared ─▶ git.ancap.in.ua git push/clone ──HTTP──▶ git-http-backend ────────────────────────┘ ``` ## Запуск 1. `cp .env.example .env` и заполни: `BOT_TOKEN`, `ADMINS`, `PUBLIC_URL`, `TUNNEL_TOKEN`. 2. В Cloudflare Zero Trust создай туннель, public hostname `git.ancap.in.ua` → service `http://web:80`, вставь token в `.env`. 3. `docker compose up -d --build` ## Бот Репозитории живут под **неймспейсом юзера** (`<юзер>/<репо>.git`, юзер = @username). - `/new имя [описание]` — создать репо у себя - `/mine` — свои репо · `/list` — все (по владельцам) · `/info имя` - `/del имя confirm` — удалить своё - `/addkey ssh-ed25519 AAAA... коммент` — добавить ssh-ключ - `/keys` · `/delkey N` Вайтлист: `WHITELIST_CHAT` = id чата, бот должен быть в него добавлен. ## Работа с репо По HTTP (через cloudflared-туннель): ``` git clone https://git.ancap.in.ua/юзер/имя.git ``` По SSH (ключи добавляются ботом, пуш только в свой неймспейс): ``` git clone ssh://git@git.ancap.in.ua:2222/юзер/имя.git # или: git clone git@git.ancap.in.ua:юзер/имя.git (для порта 22) ``` Браузить (cgit, тёмная тема): `https://git.ancap.in.ua/юзер/имя/` ⚠️ **SSH через cloudflared HTTP-туннель не ходит** — для ssh пробрось порт `SSH_PORT` наружу напрямую или отдельным TCP-туннелем. HTTP-пуш открыт (`GIT_HTTP_EXPORT_ALL`); хочешь авторизацию и по HTTP — навесь `auth_basic` в `web/nginx.conf`.