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
|
||||
# Add further modules here later, e.g.:
|
||||
./programs.nix
|
||||
./forgejo.nix
|
||||
# ./modules/nextcloud.nix
|
||||
# ./modules/wireguard.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