ID: DOC_000014 | Version: 0.2.3 | Status: Draft By: Codex (GPT-5) # Deployment ## Lokale Installation (systemd) `./scripts/install.sh` fuehrt folgende Schritte aus: - legt Service-User/Group an - kopiert das Projekt nach `/opt/sk` - erstellt/aktualisiert `.venv` - erstellt `/etc/skd/env` aus `env.example` - erstellt `/etc/skd/update.env` aus `env.update.example` - schreibt eine systemd-Unit nach `/etc/systemd/system/skd.service` Beispiel: ```bash make install sudo systemctl status skd.service ``` ## Manuelles Starten ```bash ./scripts/run.sh ``` ## Makefile Targets (Ops) ```bash make install make up make down make restart make update make uninstall ``` ## Remote-Deploy (SSH) `./scripts/deploy.sh` packt das Repo und deployt es auf einen Zielhost. Konfiguration in `deploy_hosts.yml`. Beispiel: ```bash ./scripts/deploy.sh kid-laptop ``` ## Deployment via ZIP Im Repo liegt `sk_deploy.zip`. Dieses Archiv kann auf den Zielhost kopiert und nach `/opt/sk` entpackt werden. Anschliessend Abhaengigkeiten installieren und Service neu starten: ```bash sudo -u skd /opt/sk/.venv/bin/pip install -r /opt/sk/backend/requirements.txt sudo systemctl restart skd.service ``` ## Update des Services `./scripts/update.sh` zieht den Branch neu und fuehrt einen harten Reset aus. Wichtig: Das Script nutzt `git reset --hard origin/main`. ```bash sudo ./scripts/update.sh ``` ## Update-Client (Remote Update Service) Die Update-API startet `scripts/update_client.sh` bzw. `scripts/rollback_client.sh`. Wichtige ENV-Variablen: - `SKD_UPDATE_SERVICE_URL` - `SKD_UPDATE_PROJECT_ID` - `SKD_UPDATE_TOKEN` oder `SKD_UPDATE_TOKEN_FILE` Voraussetzungen auf dem Host: - `curl`, `tar`, `sha256sum`, `python3`, `systemctl` Referenz: Update-Service (intern) https://git.wlkns.org/stephan/update-webservice ### Update-Service einbinden 1. Service-URL und Projekt setzen: ``` SKD_UPDATE_SERVICE_URL=https://update.wlkns.org SKD_UPDATE_PROJECT_ID=safe-kiddo-control ``` 2. Enrollment-Token besorgen (vom Update-Service-Admin) und einen Langzeit-Token erzeugen: - Option A: Ueber lokale API ```bash curl -X POST -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d "{\"enroll_token\":\"example-enroll-token\"}" \ http://localhost/update/enroll ``` - Option B: Direkter Enrollment-Client ```bash ./scripts/manual_enroll.py --url "https://update.wlkns.org" --project "safe-kiddo-control" --token "example-enroll-token" ``` 3. Token-Datei pruefen: ``` sudo cat /var/lib/skd/update_token ``` Hinweis: Der Update-Check ist erst moeglich, wenn der Langzeit-Token gespeichert wurde. Enrollment-Tools: - `scripts/manual_enroll.py`: Enrollment direkt gegen den Update-Service, schreibt Token in `SKD_UPDATE_TOKEN_FILE`. - `scripts/enroll_local.py`: Enrollment ueber die lokale API (`/update/enroll`), benoetigt Admin-Session; `--token` setzen (Default-Token ist nur Prototyp-Altlast). - `scripts/enroll_update_service.sh`: Holt den Langzeit-Token per curl vom Update-Service (liest `update-addon.env`). Beispiel (curl-Script): ```bash sudo ./scripts/enroll_update_service.sh --enroll-token "enroll_example" ``` ## Release-Upload (Dev/Prod) Fuer Dev/Prod Uploads kann ein Release-Archiv (tar.gz) automatisiert gebaut und hochgeladen werden. Beispiel: ```bash ./scripts/upload_release.sh --profile dev ``` Token-Quelle: - `update-addon.env` (z.B. `DEV_UPDATE_UPLOAD_TOKEN_FILE=./upload.token`). ## Lokale update-addon.env Fuer lokale Tests kann eine `update-addon.env` im Repo genutzt werden (gitignored). Beispiel: ```bash cp update-addon.env.example update-addon.env ``` Lokale Status/Logs: - `SKD_UPDATE_STATUS_FILE` (default `/var/lib/skd/update_status.json`) - `SKD_UPDATE_LOG_FILE` (default `/var/lib/skd/update_logs.jsonl`) ## Backup/Restore - Bei Apply wird `/opt/sk` nach `/opt/sk_backup_1.2.3_1700000000` verschoben (Beispiel). - Rollback nutzt das letzte Backup (`/opt/sk_backup_*`). ## Weitere Dokumente - Konfiguration: `docs/CONFIGURATION.md` - Nutzung: `docs/USAGE.md` - Troubleshooting: `docs/TROUBLESHOOTING.md`