82 lines
3.7 KiB
Go
82 lines
3.7 KiB
Go
package softmodules
|
||
|
||
import (
|
||
"rubric/utils"
|
||
)
|
||
|
||
var ForgejoModule = Module{
|
||
Key: "forgejo",
|
||
Aliases: []string{"fj", "git-forge"},
|
||
Title: "Forgejo — самохостинг git-форжа",
|
||
Description: "Форк Gitea: Docker-развёртывание, Angie, SSH на нестандартном порту",
|
||
Run: showForgejo,
|
||
}
|
||
|
||
func showForgejo() {
|
||
utils.Header("Soft — Forgejo")
|
||
|
||
utils.Section("Что это")
|
||
utils.Code(`Forgejo — самохостимый git-форж, форк Gitea. Свой репозиторий кода
|
||
с веб-интерфейсом, issues, pull request'ами, вики и (опционально)
|
||
Forgejo Actions для CI/CD — как собственный GitHub/GitLab на своём VDS.
|
||
|
||
Развёрнут на git.thebookofmagnus.ru (пользователь mroot),
|
||
за Angie как реверс-прокси, SSH-доступ на порту 222.`)
|
||
|
||
utils.Section("Развёртывание через Docker")
|
||
utils.Code(`# docker-compose.yml (упрощённо, с SQLite — не нужен отдельный БД-сервер)
|
||
services:
|
||
forgejo:
|
||
image: codeberg.org/forgejo/forgejo:latest
|
||
environment:
|
||
- FORGEJO__database__DB_TYPE=sqlite3
|
||
- FORGEJO__server__DOMAIN=git.thebookofmagnus.ru
|
||
- FORGEJO__server__SSH_PORT=222
|
||
- FORGEJO__service__DISABLE_REGISTRATION=true
|
||
volumes:
|
||
- ./data:/data
|
||
ports:
|
||
- "127.0.0.1:3000:3000"
|
||
- "222:22"
|
||
restart: unless-stopped`)
|
||
|
||
utils.Section("Angie как реверс-прокси")
|
||
utils.Code(`server {
|
||
listen 443 ssl;
|
||
server_name git.thebookofmagnus.ru;
|
||
|
||
ssl_certificate /etc/letsencrypt/live/git.thebookofmagnus.ru/fullchain.pem;
|
||
ssl_certificate_key /etc/letsencrypt/live/git.thebookofmagnus.ru/privkey.pem;
|
||
|
||
location / {
|
||
proxy_pass http://127.0.0.1:3000;
|
||
proxy_set_header Host $host;
|
||
proxy_set_header X-Real-IP $remote_addr;
|
||
}
|
||
}
|
||
|
||
# HTTP-блок для certbot (webroot-метод, --nginx с Angie не работает):
|
||
server {
|
||
listen 80;
|
||
server_name git.thebookofmagnus.ru;
|
||
location /.well-known/acme-challenge/ {
|
||
root /var/www/certbot;
|
||
}
|
||
}`)
|
||
|
||
utils.Section("Частые проблемы при развёртывании")
|
||
utils.Println("• certbot: NXDOMAIN — DNS A-запись ещё не разошлась, подождать пропагации")
|
||
utils.Println("• certbot: 404 на /.well-known/acme-challenge/ — не хватает HTTP(80) server-блока в Angie для сабдомена")
|
||
utils.Println("• До готовности DNS/TLS — временный доступ через SSH-туннель: ssh -L 3000:127.0.0.1:3000 user@host")
|
||
utils.Println("• Предупреждение о смене SSH host key при первом git push — решается добавлением ключа в ssh-agent")
|
||
utils.Println("• Management → Users в новых версиях Forgejo переехал в раздел \"Identity & access\", а не отдельная вкладка")
|
||
|
||
utils.Section("Настройка")
|
||
utils.Command("FORGEJO__service__DISABLE_REGISTRATION=true", "отключить самостоятельную регистрацию")
|
||
utils.Command("FORGEJO__ui__APP_NAME", "название, отображаемое в заголовке вкладки браузера")
|
||
utils.Command("/data/gitea/public/assets/img/", "путь для замены логотипа и favicon (в примонтированном volume)")
|
||
|
||
utils.Note("CI/CD (Forgejo Actions) можно не настраивать сразу — вполне рабочий вариант отложить его на потом")
|
||
|
||
utils.Footer()
|
||
}
|