04 - Lancer la stack (bases, n8n, NocoDB, Open WebUI, Mongo Express, FastAPI)
On copie le dossier docker/ sur le VPS, on remplit les secrets, et on démarre
tout avec une seule commande.
1. Copier le dossier docker/ sur le VPS
Depuis ton PC (PowerShell), dans le dossier du projet :
scp -r .\docker\ engwe-seer@IP_DU_VPS:/home/engwe-seer/stack
(ou : git clone ton dépôt sur le VPS, ou recopie les fichiers à la main.)
Résultat attendu sur le VPS : ~/stack/docker-compose.yml, ~/stack/.env.example, etc.
2. Créer le fichier de secrets .env
cd ~/stack
cp .env.example .env
nano .env
Remplace chaque change_me... par un secret fort. Pour en générer :
openssl rand -base64 24
Points importants :
DOMAIN=engwe-france.fr(doit correspondre à tes DNS ; les services répondent sur<nom>-it.engwe-france.fr).N8N_ENCRYPTION_KEY: génère-la une fois, ne la change jamais ensuite.OPENAI_API_BASE_URL/OPENAI_API_KEY: ta clé API externe (voir §6 pour Claude).
Sauvegarde (Ctrl+O, Ctrl+X).
3. Démarrer toute la stack
docker compose up -d
Docker télécharge les images (quelques minutes la première fois) puis démarre tout. Vérifie :
docker compose ps # tous les services doivent être "Up" / "healthy"
docker compose logs -f # logs en direct (Ctrl+C pour quitter)
Si un service est en erreur, cible ses logs, ex. :
docker compose logs -f nocodb
4. Configurer le reverse proxy
Retourne à 03-dns-et-reverse-proxy.md §4 et crée un Proxy Host + SSL pour chaque service. Une fois fait, chaque service est accessible en HTTPS.
5. Premier accès à chaque service
| Service | URL | Première connexion |
|---|---|---|
| n8n | https://n8n-it.engwe-france.fr |
Crée le compte propriétaire (owner) au 1er lancement |
| NocoDB | https://data-it.engwe-france.fr |
Crée le compte super-admin |
| Open WebUI | https://chat-it.engwe-france.fr |
Le 1er compte créé devient admin |
| Mongo Express | https://mongo-it.engwe-france.fr |
Auth basique (identifiants du .env) |
| FastAPI | https://api-it.engwe-france.fr/docs |
Doc interactive Swagger |
| Portainer | https://portainer-it.engwe-france.fr |
Crée l'admin dans les 5 min suivant le 1er démarrage |
| Uptime Kuma | https://uptime-it.engwe-france.fr |
Crée le compte admin, puis ajoute tes moniteurs |
Notes par service
- n8n utilise PostgreSQL (base
n8n) - pas de SQLite fragile. Tes workflows et credentials y sont stockés, chiffrés avecN8N_ENCRYPTION_KEY. - NocoDB stocke ses métadonnées dans PostgreSQL (base
nocodb). Tu peux y créer des bases « tableur » et connecter tes propres bases PostgreSQL existantes en lecture/écriture (parfait pour des non-IT). - Open WebUI : pas de modèle local (pas d'Ollama). Il appelle l'API définie
dans
.env. Les modèles listés dépendent de cette API. - Mongo Express : interface pour explorer/éditer les collections MongoDB.
- FastAPI : squelette dans
docker/fastapi/app/main.py. Après modification du code :docker compose up -d --build fastapi. - Portainer : interface graphique pour gérer Docker (conteneurs, images,
volumes, logs, stats). ⚠️ Au tout premier accès, crée le compte admin dans
les 5 minutes - sinon Portainer se verrouille par sécurité et il faut
redémarrer le conteneur (
docker restart portainer). - Uptime Kuma : surveillance de disponibilité. Ajoute un moniteur HTTP(s)
par service (ex.
https://n8n-it.engwe-france.fr) et branche des alertes (email, Telegram, Discord, webhook n8n…) pour être prévenu en cas de panne.
6. Modèles d'Open WebUI : OpenRouter + Claude en direct
Open WebUI parle le format OpenAI. Il est déjà configuré (dans
docker-compose.yml) pour deux connexions :
- OpenRouter - compatible OpenAI nativement → accès à Claude + des centaines de modèles (GPT, Gemini, Llama…) avec une seule clé.
- LiteLLM - passerelle qui expose Claude en direct (facturé sur ton compte Anthropic), utile pour le contrôle des coûts / du prompt caching.
Tout est déjà branché. Il te suffit de renseigner les clés dans .env :
OPENROUTER_API_KEY=sk-or-v1-... # depuis https://openrouter.ai/keys
ANTHROPIC_API_KEY=sk-ant-... # depuis https://console.anthropic.com/
LITELLM_MASTER_KEY=<génère avec: openssl rand -base64 24>
Les modèles Claude en direct sont listés dans docker/litellm/config.yaml
(déjà fourni). Puis :
docker compose up -d litellm open-webui
Dans Open WebUI, le sélecteur de modèle montrera les modèles OpenRouter
(incl. anthropic/claude-*) et les modèles LiteLLM directs
(claude-opus-4-8, claude-sonnet-5, claude-haiku-4-5).
Astuce : dans Admin → Settings → Models, tu peux masquer les modèles que tu ne veux pas voir (OpenRouter en expose énormément) et mettre tes préférés en favoris.
7. Se connecter aux bases depuis tes apps
Les bases ne sont pas exposées à Internet, mais tes conteneurs (FastAPI,
n8n, NocoDB) les joignent par leur nom sur le réseau backend :
- PostgreSQL :
postgresql://<user>:<pass>@postgres:5432/<base> - MongoDB :
mongodb://<user>:<pass>@mongo:27017/
Pour t'y connecter depuis ton PC (ex. avec DBeaver/Compass), passe par un tunnel SSH :
# PostgreSQL
ssh -L 5432:postgres:5432 engwe-seer@IP_DU_VPS
# MongoDB
ssh -L 27017:mongo:27017 engwe-seer@IP_DU_VPS
Puis connecte ton client sur localhost:5432 / localhost:27017.
Vérifications de fin d'étape
docker compose ps # tout "Up"
curl -s localhost:8000/health # depuis le VPS, si tu exposes le port ; sinon via l'URL HTTPS
Chaque URL HTTPS répond correctement.
➡️ Étape suivante : 05-maintenance-sauvegardes.md
