Forgejo
This commit is contained in:
parent
cc60ac8fbd
commit
3a7a4fcffa
2 changed files with 95 additions and 0 deletions
|
|
@ -5,6 +5,7 @@
|
||||||
./hardware-configuration.nix
|
./hardware-configuration.nix
|
||||||
# Add further modules here later, e.g.:
|
# Add further modules here later, e.g.:
|
||||||
./programs.nix
|
./programs.nix
|
||||||
|
./forgejo.nix
|
||||||
# ./modules/nextcloud.nix
|
# ./modules/nextcloud.nix
|
||||||
# ./modules/wireguard.nix
|
# ./modules/wireguard.nix
|
||||||
# ./modules/docker.nix
|
# ./modules/docker.nix
|
||||||
|
|
|
||||||
94
forgejo.nix
Normal file
94
forgejo.nix
Normal file
|
|
@ -0,0 +1,94 @@
|
||||||
|
{ config, pkgs, lib, ... }:
|
||||||
|
|
||||||
|
let
|
||||||
|
# Kurzreferenzen damit du nicht immer den vollen Pfad schreiben musst.
|
||||||
|
# "cfg" zeigt auf den gesamten forgejo-Konfigurationsblock.
|
||||||
|
# "srv" zeigt auf den server-Unterblock innerhalb von forgejo.
|
||||||
|
cfg = config.services.forgejo;
|
||||||
|
srv = cfg.settings.server;
|
||||||
|
in
|
||||||
|
{
|
||||||
|
# ============================================================
|
||||||
|
# FORGEJO SERVICE
|
||||||
|
# ============================================================
|
||||||
|
|
||||||
|
services.forgejo = {
|
||||||
|
enable = true;
|
||||||
|
|
||||||
|
# PostgreSQL ist stabiler und performanter als SQLite für den echten Betrieb.
|
||||||
|
# NixOS legt die Datenbank und den User automatisch an.
|
||||||
|
database.type = "postgres";
|
||||||
|
|
||||||
|
# LFS = Large File Storage. Ermöglicht das Versionieren großer Dateien
|
||||||
|
# (z.B. Binaries, Bilder) über Git. Schadet nicht, also aktivieren.
|
||||||
|
lfs.enable = true;
|
||||||
|
|
||||||
|
# Wo Forgejo seine Repositories auf dem Dateisystem speichert.
|
||||||
|
# Standardmäßig /var/lib/forgejo/repositories – das ist gut so.
|
||||||
|
# repositoryRoot = "/var/lib/forgejo/repositories"; # optional überschreiben
|
||||||
|
|
||||||
|
settings = {
|
||||||
|
|
||||||
|
server = {
|
||||||
|
DOMAIN = "git.nikolai-linschmann.de";
|
||||||
|
# ROOT_URL muss gesetzt sein, sonst erscheint der Port in allen URLs im Web-UI.
|
||||||
|
# srv.DOMAIN referenziert den Wert der DOMAIN-Option direkt oben.
|
||||||
|
ROOT_URL = "https://${srv.DOMAIN}/";
|
||||||
|
HTTP_PORT = 3000; # Interner Port, nach außen kommt nur Nginx
|
||||||
|
};
|
||||||
|
|
||||||
|
service = {
|
||||||
|
# Registrierung deaktivieren – du bist der einzige Nutzer.
|
||||||
|
# Nach dem ersten Start temporär auf false setzen (siehe Schritt 4),
|
||||||
|
# dann wieder auf true.
|
||||||
|
DISABLE_REGISTRATION = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
# Sicherheit: Sessions und Tokens laufen nach 7 Tagen ab.
|
||||||
|
security = {
|
||||||
|
LOGIN_REMEMBER_DAYS = 7;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# NGINX REVERSE PROXY
|
||||||
|
# ============================================================
|
||||||
|
# Nginx nimmt HTTPS-Anfragen von außen entgegen und leitet
|
||||||
|
# sie intern an Forgejo auf Port 3000 weiter.
|
||||||
|
|
||||||
|
services.nginx.virtualHosts.${srv.DOMAIN} = {
|
||||||
|
forceSSL = true; # HTTP → HTTPS Redirect
|
||||||
|
enableACME = true; # Let's Encrypt Zertifikat automatisch holen und erneuern
|
||||||
|
|
||||||
|
extraConfig = ''
|
||||||
|
# Erlaubt große Uploads (z.B. Git-Pushes mit vielen Dateien).
|
||||||
|
# 512M ist ein guter Standardwert für eine persönliche Instanz.
|
||||||
|
client_max_body_size 512M;
|
||||||
|
'';
|
||||||
|
|
||||||
|
locations."/" = {
|
||||||
|
# srv.HTTP_PORT ist 3000 – toString wandelt die Zahl in einen String um.
|
||||||
|
proxyPass = "http://127.0.0.1:${toString srv.HTTP_PORT}";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# SSH-INTEGRATION
|
||||||
|
# ============================================================
|
||||||
|
# Damit "git clone git@git.nikolai-linschmann.de:user/repo.git" funktioniert.
|
||||||
|
# Forgejo braucht zu wissen auf welchem Port OpenSSH läuft.
|
||||||
|
|
||||||
|
services.forgejo.settings.server.SSH_PORT =
|
||||||
|
lib.head config.services.openssh.ports;
|
||||||
|
# lib.head nimmt das erste Element der Liste der SSH-Ports (normalerweise 22).
|
||||||
|
|
||||||
|
# ============================================================
|
||||||
|
# FIREWALL
|
||||||
|
# ============================================================
|
||||||
|
# Port 80 (HTTP) und 443 (HTTPS) müssen offen sein.
|
||||||
|
# Falls das schon zentral in configuration.nix steht, diesen Block weglassen.
|
||||||
|
|
||||||
|
networking.firewall.allowedTCPPorts = [ 80 443 ];
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue