DOC
Accueil/ Projets/ VPS Hostinger - Stack ENGWE/ 04 - Lancer la stack (bases, n8n, NocoDB, Open WebUI, Mongo Express, FastAPI)

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 avec N8N_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 :

  1. OpenRouter - compatible OpenAI nativement → accès à Claude + des centaines de modèles (GPT, Gemini, Llama…) avec une seule clé.
  2. 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