README.md
5.7 KB
| 1 | # Clancore Repo |
| 2 | |
| 3 | Self-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 |
| 29 | go 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 | ``` |
| 40 | data/clancore.db база SQLite |
| 41 | data/repos/ bare-репозитории |
| 42 | data/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 | |
| 54 | Windows (PowerShell): |
| 55 | |
| 56 | ```powershell |
| 57 | .\build.ps1 |
| 58 | ``` |
| 59 | |
| 60 | Debian/Linux: |
| 61 | |
| 62 | ```bash |
| 63 | chmod +x build.sh |
| 64 | ./build.sh |
| 65 | ``` |
| 66 | |
| 67 | Или через `make`: |
| 68 | |
| 69 | ```bash |
| 70 | make build-windows # Windows |
| 71 | make build-linux # Debian/Linux |
| 72 | make build-all # обе платформы |
| 73 | ``` |
| 74 | |
| 75 | Кросс-сборка идёт с `CGO_ENABLED=0`: SQLite-драйвер чистый Go, поэтому |
| 76 | внешние библиотеки для сборки не нужны. На Debian для запуска нужен только |
| 77 | `git` в `PATH`. |
| 78 | |
| 79 | ## Использование |
| 80 | |
| 81 | 1. Зарегистрируйтесь и создайте репозиторий в панели. |
| 82 | 2. Клонируйте и запушьте код: |
| 83 | |
| 84 | ```bash |
| 85 | git clone http://localhost:5758/<user>/<repo>.git |
| 86 | cd <repo> |
| 87 | git add . && git commit -m "first commit" |
| 88 | git push origin main |
| 89 | ``` |
| 90 | |
| 91 | Для приватных репозиториев и любого push git запросит логин и пароль |
| 92 | аккаунта (HTTP Basic). Пароль передаётся по сети — используйте HTTPS/reverse |
| 93 | proxy в продакшене. |
| 94 | |
| 95 | 3. Нажмите «Собрать сейчас» на странице репозитория — тип сборки определяется |
| 96 | автоматически по файлам (`go.mod`, `package.json`, `Makefile`, `Dockerfile`, |
| 97 | `requirements.txt`, `Cargo.toml`, `pom.xml`). Если сервис запущен через |
| 98 | systemd с минимальным окружением, сборка сама добавляет в `PATH` типовые |
| 99 | каталоги (`/usr/local/go/bin`, `/usr/lib/go-*/bin`, `/snap/bin`, |
| 100 | `/usr/local/bin`), поэтому `make` находит `go`. |
| 101 | |
| 102 | 4. На вкладке «Releases» владелец репозитория может публиковать релизы |
| 103 | (тег, название, описание, пометка pre-release) и удалять их. Релизы видны |
| 104 | всем, у кого есть доступ к репозиторию. |
| 105 | |
| 106 | ## Проверки |
| 107 | |
| 108 | ```bash |
| 109 | go vet ./... |
| 110 | go test ./... |
| 111 | ``` |
| 112 | |
| 113 | ## Структура |
| 114 | |
| 115 | ``` |
| 116 | main.go точка входа, embed шаблонов/статики, graceful shutdown |
| 117 | internal/auth/ Argon2id, сессии, CSRF, Basic-auth |
| 118 | internal/db/ SQLite: схема и запросы |
| 119 | internal/handlers/ HTTP-хендлеры, рендер шаблонов |
| 120 | internal/models/ модели данных |
| 121 | internal/services/git.go git CLI + git http-backend |
| 122 | internal/services/build.go детект и запуск сборок |
| 123 | templates/ HTML-шаблоны |
| 124 | static/ CSS |
| 125 | ``` |
| 126 | |
| 127 | ## Ограничения |
| 128 | |
| 129 | - Сборки выполняются на хосте с правами процесса сервера. Не запускайте |
| 130 | сервис от root и не давайте доступ недоверенным пользователям без |
| 131 | контейнерной изоляции. |
| 132 | - Сессии хранятся в памяти и сбрасываются при перезапуске. |
| 133 | - Нет совместного доступа к приватным репозиториям: только владелец. |