====== Runbook: systemd ====== **Dauer:** ~10 Minuten \\ **Rolle:** Linux-Administrator \\ **Voraussetzung:** root/sudo, .NET 8 Runtime Data Gateway als systemd-Service unter Linux betreiben. ---- ===== Workflow ===== flowchart TD A[Start] --> B[Gateway installieren] B --> C[Service-Unit erstellen] C --> D[systemctl enable] D --> E[systemctl start] E --> F[Health Check] F --> G{OK?} G -->|Ja| H[Fertig] G -->|Nein| I[journalctl prüfen] style H fill:#e8f5e9 style I fill:#ffebee ---- ===== 1. Gateway installieren ===== # Verzeichnis erstellen sudo mkdir -p /opt/data-gateway sudo chown $USER:$USER /opt/data-gateway # Dateien kopieren cp -r ./publish/* /opt/data-gateway/ # Ausführbar machen chmod +x /opt/data-gateway/WvdS.WebAPI.Data.Gateway.Api # Konfiguration anpassen sudo nano /opt/data-gateway/appsettings.json ---- ===== 2. Benutzer erstellen ===== # Dedizierter Service-Benutzer sudo useradd --system --no-create-home --shell /sbin/nologin datagateway # Berechtigungen setzen sudo chown -R datagateway:datagateway /opt/data-gateway ---- ===== 3. systemd Unit erstellen ===== sudo nano /etc/systemd/system/data-gateway.service **Inhalt:** [Unit] Description=WvdS Data Gateway Documentation=https://wiki.example.com/data-gateway After=network.target [Service] Type=notify User=datagateway Group=datagateway WorkingDirectory=/opt/data-gateway ExecStart=/opt/data-gateway/WvdS.WebAPI.Data.Gateway.Api Restart=always RestartSec=10 KillSignal=SIGINT SyslogIdentifier=data-gateway Environment=ASPNETCORE_ENVIRONMENT=Production Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false # Sicherheit NoNewPrivileges=true ProtectSystem=strict ProtectHome=true PrivateTmp=true ReadWritePaths=/opt/data-gateway/logs ReadWritePaths=/opt/data-gateway/data # Limits LimitNOFILE=65536 TimeoutStopSec=30 [Install] WantedBy=multi-user.target ---- ===== 4. Service aktivieren ===== # systemd neu laden sudo systemctl daemon-reload # Autostart aktivieren sudo systemctl enable data-gateway # Service starten sudo systemctl start data-gateway # Status prüfen sudo systemctl status data-gateway ---- ===== 5. Health Check ===== # Warten bis bereit sleep 5 # Health Check curl -s http://localhost:5000/health # Erwartete Antwort: "Healthy" # API-Test curl -s http://localhost:5000/api/v1/dsn/demo/tables | head ---- ===== 6. Logs anzeigen ===== # Aktuelle Logs sudo journalctl -u data-gateway -n 50 --no-pager # Live-Tail sudo journalctl -u data-gateway -f # Seit heute sudo journalctl -u data-gateway --since today # Nur Fehler sudo journalctl -u data-gateway -p err ---- ===== 7. Checkliste ===== | # | Prüfpunkt | ✓ | |---|-----------|---| | 1 | .NET 8 installiert | ☐ | | 2 | Gateway in /opt/data-gateway | ☐ | | 3 | Service-User erstellt | ☐ | | 4 | Unit-Datei erstellt | ☐ | | 5 | Service enabled | ☐ | | 6 | Service gestartet | ☐ | | 7 | Health Check OK | ☐ | ---- ===== Service-Befehle ===== | Befehl | Beschreibung | |--------|--------------| | ''systemctl start data-gateway'' | Starten | | ''systemctl stop data-gateway'' | Stoppen | | ''systemctl restart data-gateway'' | Neustarten | | ''systemctl status data-gateway'' | Status | | ''systemctl enable data-gateway'' | Autostart an | | ''systemctl disable data-gateway'' | Autostart aus | ---- ===== Troubleshooting ===== | Problem | Ursache | Lösung | |---------|---------|--------| | ''code=exited, status=203'' | Falscher Pfad | ExecStart prüfen | | ''code=exited, status=1'' | Config-Fehler | journalctl prüfen | | ''Permission denied'' | Falsche Rechte | chown prüfen | | ''Address already in use'' | Port belegt | anderen Port oder Prozess killen | **Detaillierte Fehleranalyse:** # Ausführbare Datei direkt testen sudo -u datagateway /opt/data-gateway/WvdS.WebAPI.Data.Gateway.Api # SELinux-Probleme (RHEL/CentOS) sudo ausearch -m avc -ts recent sudo setsebool -P httpd_can_network_connect 1 ---- ===== Port ändern ===== In ''appsettings.json'': { "Kestrel": { "Endpoints": { "Http": { "Url": "http://0.0.0.0:8080" } } } } **Firewall öffnen:** # firewalld (RHEL/CentOS) sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload # ufw (Ubuntu/Debian) sudo ufw allow 8080/tcp ---- ===== Service entfernen ===== # Stoppen und deaktivieren sudo systemctl stop data-gateway sudo systemctl disable data-gateway # Unit-Datei entfernen sudo rm /etc/systemd/system/data-gateway.service sudo systemctl daemon-reload # Dateien entfernen (optional) sudo rm -rf /opt/data-gateway sudo userdel datagateway ---- ===== Verwandte Runbooks ===== * [[.:docker|Docker]] – Container-Alternative * [[..:monitoring:prometheus|Prometheus]] – Metrics exportieren * [[..:sicherheit:tls-einrichten|TLS einrichten]] – HTTPS ---- << [[.:windows-dienst|← Windows-Dienst]] | [[.:docker|→ Docker]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional// {{tag>operator runbook linux systemd service}}