GameOver1337 / GitClone Public
К репозиторию
5.7 KB
README.md
5.7 KB
1# Clancore Repo
2
3Self-hosted git-хостинг на Go: репозитории, веб-просмотр, git clone/push по HTTP
4и автоматическая сборка проектов.
5
6## Возможности
7
8- Регистрация и вход (Argon2id, сессии в HttpOnly-cookie, CSRF-защита форм).
9- Публичные и приватные репозитории (приватные доступны только владельцу).
10- `git clone` / `git push` по Smart HTTP через штатный `git http-backend`.
11- Просмотр веток, коммитов, файлов и вложенных директорий.
12- Автосборка: Go, npm, Make, Docker, Python, Rust, Maven.
13- Логи сборок с автообновлением страницы.
14- Релизы: тег, название, описание, pre-release; создание и удаление владельцем.
15- Интерфейс в стиле GitHub: крошки `owner/repo`, вкладки, панель веток и тегов,
16 кнопка `Code` с URL клонирования, таблица файлов с колонкой последнего коммита,
17 светлая/тёмная тема по системной настройке.
18- SQLite (WAL, busy_timeout), шаблоны и статика встроены в бинарник.
19
20## Требования
21
22- Go 1.27+ (см. `go.mod`)
23- Git в `PATH` (для Windows — Git for Windows)
24- Для сборок — соответствующие инструменты (`go`, `npm`, `make`, `docker`, ...)
25
26## Сборка и запуск
27
28```bash
29go build -o clancore-repo .
30./clancore-repo # http://localhost:5758
31```
32
33Сервер слушает `0.0.0.0:5758`, то есть доступен как с локальной машины, так и
34по IP/домену сервера (порт `5758`).
35
36Бинарник самодостаточен: шаблоны и CSS встроены. Рабочие данные создаются рядом
37с бинарником в `data/`:
38
39```
40data/clancore.db база SQLite
41data/repos/ bare-репозитории
42data/builds/ логи сборок и рабочие копии
43```
44
45## Кросс-сборка (Windows и Debian)
46
47Готовые бинарники складываются в `dist/`:
48
49| Платформа | Файл |
50|---|---|
51| Windows x64 | `dist/clancore-repo-windows-amd64.exe` |
52| Debian/Linux x64 | `dist/clancore-repo-linux-amd64` |
53
54Windows (PowerShell):
55
56```powershell
57.\build.ps1
58```
59
60Debian/Linux:
61
62```bash
63chmod +x build.sh
64./build.sh
65```
66
67Или через `make`:
68
69```bash
70make build-windows # Windows
71make build-linux # Debian/Linux
72make build-all # обе платформы
73```
74
75Кросс-сборка идёт с `CGO_ENABLED=0`: SQLite-драйвер чистый Go, поэтому
76внешние библиотеки для сборки не нужны. На Debian для запуска нужен только
77`git` в `PATH`.
78
79## Использование
80
811. Зарегистрируйтесь и создайте репозиторий в панели.
822. Клонируйте и запушьте код:
83
84```bash
85git clone http://localhost:5758/<user>/<repo>.git
86cd <repo>
87git add . && git commit -m "first commit"
88git push origin main
89```
90
91Для приватных репозиториев и любого push git запросит логин и пароль
92аккаунта (HTTP Basic). Пароль передаётся по сети — используйте HTTPS/reverse
93proxy в продакшене.
94
953. Нажмите «Собрать сейчас» на странице репозитория — тип сборки определяется
96автоматически по файлам (`go.mod`, `package.json`, `Makefile`, `Dockerfile`,
97`requirements.txt`, `Cargo.toml`, `pom.xml`). Если сервис запущен через
98systemd с минимальным окружением, сборка сама добавляет в `PATH` типовые
99каталоги (`/usr/local/go/bin`, `/usr/lib/go-*/bin`, `/snap/bin`,
100`/usr/local/bin`), поэтому `make` находит `go`.
101
1024. На вкладке «Releases» владелец репозитория может публиковать релизы
103 (тег, название, описание, пометка pre-release) и удалять их. Релизы видны
104 всем, у кого есть доступ к репозиторию.
105
106## Проверки
107
108```bash
109go vet ./...
110go test ./...
111```
112
113## Структура
114
115```
116main.go точка входа, embed шаблонов/статики, graceful shutdown
117internal/auth/ Argon2id, сессии, CSRF, Basic-auth
118internal/db/ SQLite: схема и запросы
119internal/handlers/ HTTP-хендлеры, рендер шаблонов
120internal/models/ модели данных
121internal/services/git.go git CLI + git http-backend
122internal/services/build.go детект и запуск сборок
123templates/ HTML-шаблоны
124static/ CSS
125```
126
127## Ограничения
128
129- Сборки выполняются на хосте с правами процесса сервера. Не запускайте
130 сервис от root и не давайте доступ недоверенным пользователям без
131 контейнерной изоляции.
132- Сессии хранятся в памяти и сбрасываются при перезапуске.
133- Нет совместного доступа к приватным репозиториям: только владелец.