Table of Contents
nix-infra
Neben einem Ansible Repo durch welches manche Hosts konfiguriert werden, haben wir auch ein nix-infra Repo durch welches andere Hosts konfiguriert werden.
In diesem Repo ist Nix Konfiguration zu finden, um sowohl VM Templates für Proxmox zu erstellen, als auch um Hosts mit Hilfe von Colmena zu konfigurieren.
Hosts Deployment
Wir deployen Nix Hosts mit Hilfe von Colmena.
Jeder Host ist zu erst einmal in der flake.nix
definiert, was dann für einen Host zum Beispiel so aussieht:
public-reverse-proxy = { deployment = { targetHost = "public-reverse-proxy.z9.ccchh.net"; targetPort = 22; targetUser = "colmena-deploy"; tags = [ "thinkcccluster" ]; }; imports = [ ./config/common ./config/proxmox-vm ./config/hosts/public-reverse-proxy ]; };
Die deployment
Optionen hier sind für Colmena direkt relevant. Sie beschreiben, wie sich zum Host connected werden soll und zu welchen Tags dieser zugehörig ist.
Das imports
Statement ist das eigentlich für die System-Konfiguration relevante Statement. Es gibt an, welche Konfigurations-Dateien für die Konfiguration des Hosts genutzt werden sollen.
Um einen bzw. mehrere Hosts dann zu deployen, kann colmena apply
genutzt werden:
colmena apply
baut die Konfiguration aller Hosts und deployt dann auch alle.colmena apply –on public-reverese-proxy
baut nur die Konfiguration des Public-Reverse-Proxy und deployt dann auch nur diesen.colmena apply –on @thinkcccluster
baut nur die Konfiguration aller Hosts, welche denthinkcccluster
Tag haben und deployt dann auch nur diese.
Secrets
Für manche Hosts werden auch Secrets benötigt. Diese können wir nicht einfach in die Konfiguration mit inkludieren, da diese dann im Nix Store landen würden, welcher publicly readable ist.
Zum Glück bietet Colmena an dieser Stelle eine Lösung mit deployment.keys
(siehe auch die Colmena Doku zu Secrets). Dies ist auch eine Option, welche wir direkt in unserer Konfiguration mit inkludieren, allerdings kümmert sich dann Colmena um das Secret Deployment und die Secrets landen nicht im Nix Store.
deployment.keys
braucht auch wiederum eine Quelle für die Secrets. Hier nutzen wir dann wiederum unser Passwörter-Repository.
Eine Konfiguration für ein Secret sieht dann z.B. so aus:
deployment.keys."netbox-secret-key.secret" = { keyCommand = [ "pass" "noc/vm-secrets/z9/netbox/netbox_secret_key" ]; destDir = "/secrets"; user = "netbox"; group = "netbox"; permissions = "0440"; uploadAt = "pre-activation"; };
Das Secret ist dann auf dem Host unter /secrets/netbox-secret-key.secret
verfügbar, gehört dem netbox
User und der netbox
Group mit 0440
Permissions.
Nix Services haben für Optionen, die Secrets entgegennehmen, dann oft eine Möglichkeit ein Pfad anzugeben. So sieht das dann für das Beispiel-Secret und Netbox wie folgt aus:
services.netbox = { enable = true; secretKeyFile = "/secrets/netbox-secret-key.secret"; # Weitere Konfiguration. };
Hosts
Folgende Hosts werden via nix-infra
gemanaged:
Service | Service-URLs | Host-FQND | ↑ Server |
---|---|---|---|
Public-Reverse-Proxy | public-reverse-proxy.z9.ccchh.net | ThinkCCCluster | |
MQTT | mqtt.z9.ccchh.net | ThinkCCCluster | |
ESPHome | https://esphome.ccchh.net/ | esphome.z9.ccchh.net | ThinkCCCluster |
eh22-wiki | http://eh22.easterhegg.eu | eh22-wiki-intern.hamburg.ccc.de | Chaosknoten |
Git | https://git.hamburg.ccc.de/ | git.hamburg.ccc.de | Chaosknoten |
public-web-static | https://element.hamburg.ccc.de, https://branding-resources.hamburg.ccc.de | public-web-static-intern.hamburg.ccc.de | Chaosknoten |
Matrix | http://matrix.hamburg.ccc.de | matrix-intern.hamburg.ccc.de | Chaosknoten |
NetBox | https://netbox.hamburg.ccc.de | netbox-intern.hamburg.ccc.de | Chaosknoten |