docs/deployment.md — Deployment & Betrieb #32

Open
opened 2026-06-21 23:04:15 +02:00 by Radixura · 0 comments
Owner

Ziel

Dokumentiere, wie das kompilierte Binary deployed wird — auf NixOS, mit systemd, hinter einem Reverse-Proxy.

Beschreibung

Das Deployment-Dokument beschreibt den Produktionsbetrieb: Binary kompilieren, Konfiguration, systemd-Service, Reverse-Proxy (Caddy/Nginx), Persistenz der SQLite-DB, Monitoring.

Akzeptanzkriterien

Build

  • cargo build --release → Binary unter target/release/rss-atom-backend
  • Optional: Cross-Compilation für ARM (Raspberry Pi)

Konfiguration

  • .env-Datei mit allen relevanten Variablen
  • .env.example im Repo mit Erklärungen
  • Datenbank-Pfad: /var/lib/rss-atom-backend/data.db (persistent)

systemd Service-Unit

  • rss-atom-backend.service:
    [Unit]
    Description=RSS/Atom Feed Backend
    After=network.target
    
    [Service]
    Type=simple
    User=rss-backend
    Group=rss-backend
    WorkingDirectory=/opt/rss-atom-backend
    EnvironmentFile=/etc/rss-atom-backend/.env
    ExecStart=/opt/rss-atom-backend/rss-atom-backend
    Restart=on-failure
    RestartSec=5
    
    [Install]
    WantedBy=multi-user.target
    
  • User/Group-Erstellung dokumentiert
  • systemctl enable --now rss-atom-backend

NixOS-Modul (Bonus)

  • Optional: NixOS-Modul unter nix/module.nix
    • Nutzt pkgs.rustPlatform.buildRustPackage
    • Systemd-Service via systemd.services
    • Konfiguration via NixOS-Options
    • services.rss-atom-backend.enable = true;

Reverse-Proxy

  • Caddy-Konfiguration:
    feeds.radixura.de {
        reverse_proxy localhost:3000
    }
    
  • Nginx-Konfiguration (alternativ):
    server {
        listen 80;
        server_name feeds.radixura.de;
        location / {
            proxy_pass http://localhost:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
    }
    

Backup

  • SQLite-DB-Backup: sqlite3 /var/lib/rss-atom-backend/data.db ".backup /backup/data-$(date +%Y%m%d).db"
  • Cronjob für tägliches Backup

Monitoring

  • Health-Check: GET /health → 200 OK
  • Log-Output: Systemd-Journal (journalctl -u rss-atom-backend -f)

Technische Hinweise

  • Malte nutzt NixOS + Incus — das Binary könnte in einem Incus-Container laufen
  • Kein Docker-Compose (passt nicht in Malte's Stack)
  • Die SQLite-Datei MUSS außerhalb des Binary-Verzeichnisses liegen (Persistenz)
## Ziel Dokumentiere, wie das kompilierte Binary deployed wird — auf NixOS, mit systemd, hinter einem Reverse-Proxy. ## Beschreibung Das Deployment-Dokument beschreibt den Produktionsbetrieb: Binary kompilieren, Konfiguration, systemd-Service, Reverse-Proxy (Caddy/Nginx), Persistenz der SQLite-DB, Monitoring. ## Akzeptanzkriterien ### Build - [ ] `cargo build --release` → Binary unter `target/release/rss-atom-backend` - [ ] Optional: Cross-Compilation für ARM (Raspberry Pi) ### Konfiguration - [ ] `.env`-Datei mit allen relevanten Variablen - [ ] `.env.example` im Repo mit Erklärungen - [ ] Datenbank-Pfad: `/var/lib/rss-atom-backend/data.db` (persistent) ### systemd Service-Unit - [ ] `rss-atom-backend.service`: ```ini [Unit] Description=RSS/Atom Feed Backend After=network.target [Service] Type=simple User=rss-backend Group=rss-backend WorkingDirectory=/opt/rss-atom-backend EnvironmentFile=/etc/rss-atom-backend/.env ExecStart=/opt/rss-atom-backend/rss-atom-backend Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target ``` - [ ] User/Group-Erstellung dokumentiert - [ ] `systemctl enable --now rss-atom-backend` ### NixOS-Modul (Bonus) - [ ] Optional: NixOS-Modul unter `nix/module.nix` - Nutzt `pkgs.rustPlatform.buildRustPackage` - Systemd-Service via `systemd.services` - Konfiguration via NixOS-Options - `services.rss-atom-backend.enable = true;` ### Reverse-Proxy - [ ] Caddy-Konfiguration: ``` feeds.radixura.de { reverse_proxy localhost:3000 } ``` - [ ] Nginx-Konfiguration (alternativ): ``` server { listen 80; server_name feeds.radixura.de; location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ``` ### Backup - [ ] SQLite-DB-Backup: `sqlite3 /var/lib/rss-atom-backend/data.db ".backup /backup/data-$(date +%Y%m%d).db"` - [ ] Cronjob für tägliches Backup ### Monitoring - [ ] Health-Check: `GET /health` → 200 OK - [ ] Log-Output: Systemd-Journal (`journalctl -u rss-atom-backend -f`) ## Technische Hinweise - Malte nutzt NixOS + Incus — das Binary könnte in einem Incus-Container laufen - Kein Docker-Compose (passt nicht in Malte's Stack) - Die SQLite-Datei MUSS außerhalb des Binary-Verzeichnisses liegen (Persistenz)
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Radixura/rss-atom-backend#32
No description provided.