134 lines
4.0 KiB
Markdown
134 lines
4.0 KiB
Markdown
ID: DOC_000014 | Version: 0.2.2 | 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`
|