diff --git a/docs/getting-started/first-install.md b/docs/getting-started/first-install.md index 3585bf9..1d489b3 100644 --- a/docs/getting-started/first-install.md +++ b/docs/getting-started/first-install.md @@ -16,8 +16,10 @@ Bei der Erstinstallation gibt es ein Henne-Ei-Problem: ``` 1. Services deaktivieren (die Secrets brauchen) 2. NixOS installieren -3. SSH-Host-Key extrahieren, SOPS konfigurieren, Secrets erstellen -4. Services reaktivieren und deployen +3. SSH-Host-Key extrahieren, SOPS konfigurieren, sofort erstellbare Secrets anlegen +4. Stufe-1-Services aktivieren und deployen (Headscale, Forgejo, Mail, Nginx) +5. Restliche Secrets generieren (Tailscale, Headplane, Forgejo-Runner) +6. Stufe-2-Services aktivieren und final deployen ``` ## Schritt 1: Host-Konfiguration vorbereiten @@ -198,7 +200,7 @@ Diese Secrets haben keine Abhaengigkeiten und koennen direkt generiert werden: #### Secrets die laufende Services brauchen -Diese Secrets koennen erst erstellt werden, nachdem die entsprechenden Services laufen. Bis dahin **Platzhalter** eintragen (z.B. `placeholder`): +Diese Secrets koennen erst nach Schritt 4 erstellt werden. **Jetzt noch nicht eintragen** -- sie werden spaeter ergaenzt. | Secret | Befehl | Voraussetzung | |--------|--------|---------------| @@ -209,13 +211,8 @@ Diese Secrets koennen erst erstellt werden, nachdem die entsprechenden Services #### Beispiel secrets.yaml (Klartext vor Verschluesselung) ```yaml -tailscale: - auth-key: "placeholder" -forgejo-runner: - token: "placeholder" headplane: cookie_secret: "a1b2c3d4e5f6..." - agent_pre_authkey: "placeholder" mailserver: accounts: admin: "$2b$05$..." @@ -224,29 +221,53 @@ forgejo: mail-pw: "das-klartext-passwort" ``` -### 3.4 Services reaktivieren +### 3.4 Services stufenweise reaktivieren -- Stufe 1 -Auf dem **Entwicklungsrechner** die in Schritt 1.4 auskommentierten Imports in `hosts//services/default.nix` wieder aktivieren: +> **Wichtig:** Services die Headscale- oder Forgejo-Secrets brauchen (Tailscale, +> Headplane, Forgejo-Runner) duerfen noch **nicht** aktiviert werden, da diese +> Secrets erst generiert werden koennen, wenn die Services laufen. + +Auf dem **Entwicklungsrechner** in `hosts//services/default.nix` die +Services **ohne externe Abhaengigkeiten** aktivieren: ```nix { imports = [ + # Stufe 1: Services ohne externe Abhaengigkeiten ./forgejo.nix - ./headplane.nix ./headscale.nix ./mailserver.nix ./netdata.nix ./nginx.nix ./openssh.nix ./sops.nix - ./tailscale.nix + + # Stufe 2: Erst nach Schritt 4 aktivieren + # ./headplane.nix # braucht: headplane/agent_pre_authkey (Headscale) + # ./tailscale.nix # braucht: tailscale/auth-key (Headscale) ]; } ``` -Ebenso in `hosts//services/sops.nix` die Secrets-Definitionen wieder einkommentieren. +Ebenso in `hosts//services/sops.nix` die Secrets-Definitionen wieder +einkommentieren, **aber nur die fuer Stufe-1-Services**: -### 3.5 Deployen +```nix +sops = { + defaultSopsFile = ../secrets.yaml; + secrets = { + # "forgejo-runner/token" = { }; # Stufe 2 + "tailscale/auth-key" = { }; + }; +}; +``` + +> **Hinweis:** `tailscale/auth-key` muss in `sops.nix` definiert bleiben, da das +> Tailscale-Modul es referenziert. Es wird aber erst in Schritt 4 mit einem +> echten Wert befuellt. Solange Tailscale nicht importiert ist, hat das keinen +> Effekt. + +### 3.5 Deployen (Stufe 1) ```bash nix run .#deploy -- -n @@ -259,9 +280,11 @@ NIX_SSHOPTS="-p 2299" nixos-rebuild switch --flake .# \ --target-host @ --sudo --ask-sudo-password ``` -## Schritt 4: Platzhalter-Secrets ersetzen +Nach diesem Deploy laufen Headscale, Forgejo, Mailserver und Nginx. -Nachdem der Server mit Headscale und Forgejo laeuft, die Platzhalter durch echte Werte ersetzen: +## Schritt 4: Restliche Secrets generieren und alle Services aktivieren + +Nachdem der Server mit Headscale und Forgejo laeuft: 1. **Headscale-User anlegen** (auf dem Server): @@ -283,14 +306,44 @@ Nachdem der Server mit Headscale und Forgejo laeuft, die Platzhalter durch echte 3. **Forgejo-Runner-Token** ueber das Forgejo Admin Panel erstellen: Administration > Actions > Runners > Create new Runner -4. **Secrets aktualisieren**: +4. **Secrets ergaenzen**: ```bash sops hosts//secrets.yaml - # Platzhalter durch echte Werte ersetzen ``` -5. **Erneut deployen**: + Die fehlenden Secrets eintragen: + + ```yaml + tailscale: + auth-key: "tskey-..." + forgejo-runner: + token: "..." + headplane: + agent_pre_authkey: "..." + ``` + +5. **Stufe-2-Services aktivieren** in `hosts//services/default.nix`: + + ```nix + { + imports = [ + ./forgejo.nix + ./headplane.nix + ./headscale.nix + ./mailserver.nix + ./netdata.nix + ./nginx.nix + ./openssh.nix + ./sops.nix + ./tailscale.nix + ]; + } + ``` + + Und in `sops.nix` auch `forgejo-runner/token` einkommentieren. + +6. **Erneut deployen**: ```bash nix run .#deploy -- -n