Files
nas-runbooks/common/dsh-vps-procedure.md
T

86 lines
4.2 KiB
Markdown

# DeepSeek Harness (DSH) VPS & FileBrowser — Guide d'Exploitation et MAJ
Ce document décrit la structure, la configuration et la procédure de mise à jour de la stack **DeepSeek Harness (`dsh-vps`)** et de son compagnon **FileBrowser (`dsh-vps-filebrowser`)** hébergés sur le VPS Contabo (`100.94.90.119`).
---
## 1. Architecture et Composants
```
/home/dsh-agent/dsh-vps/
├── Dockerfile # node:20-bookworm-slim + @deepseek-ai/dsh pinné + inkstone + patch 0.0.0.0
├── docker-compose.yml # Services: dsh-proxy, dsh-vps, dsh-filebrowser
├── entrypoint.sh # Script de démarrage dsh-web-app
├── nginx.conf # Proxy inverse TLS + Basic Auth (ports 8900 et 8901)
├── auth/ # .htpasswd, credentials.txt
├── certs/ # Certificats auto-signés TLS
└── backups/ # Sauvegardes dsh_vps_home
```
### Services et Ports
| Service | Conteneur | Port Interne | Port Public / Tailscale | Auth | Description |
|---|---|---|---|---|---|
| `dsh-proxy` | `dsh-vps-proxy` | 8900 / 8901 | `100.94.90.119:8900` / `8901` | Basic Auth | Proxy TLS Nginx unifié |
| `dsh-vps` | `dsh-vps` | 3080 | Réseau Docker `dsh_vps_net` | Proxy 8900 | Instance DSH Web UI & Agent |
| `dsh-filebrowser` | `dsh-vps-filebrowser` | 8080 | Réseau Docker `dsh_vps_net` | Proxy 8901 | Explorateur de fichiers workspace |
---
## 2. Points d'Attention & Pièges Techniques
1. **Version DSH dans Dockerfile** :
- La version est explicitement fixée dans le `Dockerfile` à la ligne `RUN npm install -g @deepseek-ai/dsh@<version> @banlan/inkstone`.
- Ne jamais utiliser `@latest` sans vérifier les breaking changes.
2. **Patch de binding `0.0.0.0` dans `startup.js`** :
- Par défaut, `@deepseek-ai/dsh-web-app` interdit l'écoute sur `0.0.0.0` (erreur de sécurité native).
- Dans le conteneur, l'écoute sur `0.0.0.0` est indispensable pour que le proxy Nginx (`dsh-vps-proxy`) puisse lui transférer les requêtes.
- Le `Dockerfile` applique un patch obligatoire :
```dockerfile
RUN find /usr/local/lib/node_modules -name "startup.js" -path "*/@deepseek-ai/dsh-web-app/*" -exec sed -i 's/if (options.host === "0.0.0.0")/if (false \&\& options.host === "0.0.0.0")/' {} +
```
- **Vérification post-build impérative** :
```bash
docker exec dsh-vps sh -c 'grep -n "options.host" $(find /usr/local/lib/node_modules -name startup.js -path "*/@deepseek-ai/dsh-web-app/*")'
```
3. **FileBrowser Entrypoint (`v2.63.23+`)** :
- Depuis les versions récentes de l'image `filebrowser/filebrowser`, le binaire est localisé dans `/bin/filebrowser` (et non `/filebrowser`).
- L'entrypoint officiel utilise `tini` et `/init.sh` qui tente d'écrire dans `/config` appartenant à `root`.
- L'exécution avec `user: "1001:1001"` requiert de surcharger l'entrypoint :
```yaml
entrypoint: ["/bin/filebrowser"]
command: ["--noauth", "-a", "0.0.0.0", "-p", "8080", "-r", "/srv", "-d", "/srv/.filebrowser.db"]
```
---
## 3. Procédure de Mise à Jour DSH
1. **Sauvegarde préalable de `dsh_vps_home`** :
```bash
ssh -i ~/.ssh/vps_dsh_agent dsh-agent@100.94.90.119 \
"docker run --rm -v dsh_vps_home:/source:ro -v /home/dsh-agent/dsh-vps/backups:/backup alpine \
tar -czf /backup/dsh_vps_home-$(date +%Y%m%d-%H%M%S).tar.gz -C /source ."
```
2. **Mise à jour du Dockerfile** :
Modifier le tag de version dans `/home/dsh-agent/dsh-vps/Dockerfile`.
3. **Rebuild sans cache** :
```bash
cd /home/dsh-agent/dsh-vps && docker compose build --no-cache dsh-vps
```
4. **Recréation du conteneur** :
```bash
docker compose up -d --force-recreate dsh-vps
```
5. **Contrôles de conformité** :
- Version binaire : `docker exec dsh-vps dsh --version`
- Patch actif : `docker exec dsh-vps sh -c 'grep -n "options.host" $(find /usr/local/lib/node_modules -name startup.js -path "*/@deepseek-ai/dsh-web-app/*")'`
- Écoute interne : `docker exec dsh-vps curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:3080`
- Proxy HTTPS : `curl -sk -u "dsh-admin:..." https://100.94.90.119:8900`
- Vérification Bifrost : `docker exec dsh-vps curl -s -H "Authorization: Bearer sk-bf-..." http://100.86.197.88:3086/v1/models`