# 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@ @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`