rubric/modules/softmodules/soft_forgejo.go
2026-07-27 16:45:21 +03:00

82 lines
3.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()
}