summaryrefslogtreecommitdiff
path: root/README.md
blob: 078f2a8aeab05e4ea90f9a3d20389ac92bd6d130 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
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://[email protected]:2222/юзер/имя.git
# или: git clone [email protected]:юзер/имя.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`.