Déploiement Docker
Exécutez Sinaptic® DROID+ en production avec Docker. L'image officielle est minimale (<15 Mo), s'exécute sans les privilèges root et inclut une vérification de l'état (healthcheck) intégrée.
Images
| Registre | Image | Commande pull |
|---|---|---|
| Docker Hub (principal) | sinapticai/droid | docker pull sinapticai/droid:latest |
| GHCR (miroir) | ghcr.io/sinapticai/droid | docker pull ghcr.io/sinapticai/droid:latest |
Tags : latest, 0.5.0, 0.5, 0 (semver), ainsi que sha-<commit> pour figer une version spécifique.
Démarrage rapide
docker run -d \
--name droid \
-p 8080:8080 \
-p 8081:8081 \
-v ./droid.yaml:/etc/droid/droid.yaml \
-v ./configs/agents:/etc/droid/agents \
-e OPENAI_API_KEY=$OPENAI_API_KEY \
sinapticai/droid
Cela démarre Sinaptic® DROID+ avec :
- Port 8080 : API compatible OpenAI
- Port 8081 : API de gestion + Interface utilisateur Agent Builder
- Vos fichiers de configuration et d'agents locaux montés dans le conteneur
- Clé API transmise via une variable d'environnement
Configuration
Le conteneur attend deux chemins :
| Chemin | Usage | Par défaut |
|---|---|---|
/etc/droid/droid.yaml | Configuration d'exécution | Requis (montez le vôtre) |
/var/lib/droid | Répertoire de données (RAG, logs, audit) | Créé automatiquement |
Surchargez le chemin de configuration avec DROID_CONFIG et le répertoire de données avec les variables d'environnement DROID_DATA_DIR.
Variables d'environnement
Transmettez les clés API et les surcharges via des variables d'environnement. Le fichier de configuration prend en charge la syntaxe ${VAR} :
docker run -d \
-e OPENAI_API_KEY=sk-... \
-e ANTHROPIC_API_KEY=sk-ant-... \
-e GEMINI_API_KEY=AIza... \
-e GROK_API_KEY=xai-... \
sinapticai/droid
Docker Compose
Pour les déploiements en production, utilisez Docker Compose :
# docker-compose.yml
version: "3.8"
services:
droid:
image: sinapticai/droid:latest
ports:
- "8080:8080" # API compatible OpenAI
- "8081:8081" # API de gestion + Interface Builder
volumes:
- ./droid.yaml:/etc/droid/droid.yaml:ro
- ./configs/agents:/etc/droid/agents:ro
- droid-data:/var/lib/droid
environment:
- OPENAI_API_KEY=${OPENAI_API_KEY}
- ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY:-}
restart: unless-stopped
healthcheck:
test: ["/usr/local/bin/droid", "health", "--openai-port", "8080"]
interval: 30s
timeout: 3s
start_period: 5s
retries: 3
volumes:
droid-data:
Démarrer :
docker compose up -d
Vérifications de l'état (Health Checks)
Le conteneur inclut une vérification de l'état intégrée qui exécute droid health toutes les 30 secondes. Vous pouvez également vérifier l'état manuellement :
# Depuis l'extérieur du conteneur
curl http://localhost:8081/health
# Inspection Docker
docker inspect --format='{{.State.Health.Status}}' droid
Recommandations pour la production
Volumes
Montez votre configuration en lecture seule (:ro) et utilisez un volume nommé pour les données :
-v ./droid.yaml:/etc/droid/droid.yaml:ro
-v ./configs/agents:/etc/droid/agents:ro
-v droid-data:/var/lib/droid
Sécurité
Le conteneur s'exécute sans privilèges root par défaut (image distroless). Pour plus de sécurité :
- N'exposez pas publiquement le port 8081 — l'API de gestion et l'interface Builder sont destinées à un usage interne.
- Utilisez des secrets Docker ou un coffre-fort (vault) pour les clés API au lieu des variables d'environnement.
- Activez SinapticAI en mode blocage pour tous les agents de production.
# N'exposez que le port de l'API à l'extérieur
ports:
- "8080:8080"
# Gardez le port 8081 sur le réseau interne uniquement
Limites de ressources
Sinaptic® DROID+ lui-même est léger, mais les réponses LLM peuvent consommer de la mémoire pendant le streaming. Minimums recommandés :
deploy:
resources:
limits:
memory: 512M
cpus: "1.0"
reservations:
memory: 128M
cpus: "0.25"
Journalisation (Logging)
Sinaptic® DROID+ génère par défaut des journaux JSON structurés sur stdout. Capturez-les avec votre agrégateur de journaux préféré :
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
Réseautage
Si vous exécutez plusieurs instances de Sinaptic® DROID+ ou si vous vous connectez à des LLM locaux (Ollama, LM Studio) :
services:
droid:
# ... configuration droid ...
networks:
- droid-net
ollama:
image: ollama/ollama:latest
networks:
- droid-net
networks:
droid-net:
driver: bridge
Référencez ensuite Ollama par son nom de service dans droid.yaml :
ollama:
base_url: "http://ollama:11434/v1"
Mise à jour
docker pull sinapticai/droid:latest
docker compose up -d
Le conteneur est sans état (stateless) — toute la configuration est dans les fichiers montés et toutes les données sont dans le volume. Vous pouvez remplacer le conteneur en toute sécurité à tout moment.
Construction à partir des sources
Si vous préférez construire l'image Docker vous-même :
git clone https://github.com/SinapticAI/droid-community.git
cd droid-community
docker build -t droid:local .
Dépannage
Le conteneur s'arrête immédiatement :
Vérifiez les journaux avec docker logs droid. Cause la plus fréquente : fichier droid.yaml manquant ou invalide.
La vérification de l'état échoue : Assurez-vous que le port 8080 est accessible à l'intérieur du conteneur et que le fichier de configuration est un YAML valide.
Impossible de se connecter au LLM local :
Si Ollama ou LM Studio s'exécute sur l'hôte, utilisez host.docker.internal au lieu de localhost :
ollama:
base_url: "http://host.docker.internal:11434/v1"
Accès refusé sur les volumes (Permission denied) : Le conteneur s'exécute sans privilèges root. Assurez-vous que les répertoires montés sont lisibles par l'UID 65534 (nobody).