From 966b62d9bd7e483f1e9484a5a99d8c2db475171c Mon Sep 17 00:00:00 2001 From: prospanclaudebot Date: Fri, 10 Jul 2026 22:10:31 +0000 Subject: initial import: pacan-git --- README.md | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 README.md (limited to 'README.md') diff --git a/README.md b/README.md new file mode 100644 index 0000000..078f2a8 --- /dev/null +++ b/README.md @@ -0,0 +1,45 @@ +# Пацанский Гит 🏴‍☠️ + +Минимальный 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`. -- cgit v1.2.3