Installer Botpress avec Docker Compose (prod) + reverse proxy HTTPS

Installer Botpress avec Docker Compose (prod) + reverse proxy HTTPS

Guide action (2026) pour installer Botpress en Docker Compose en production avec reverse proxy HTTPS, PostgreSQL, persistance et checklist sécurité.

Objectif

Déployer Botpress sur un serveur Linux en Docker Compose, avec :

  • HTTPS (Let’s Encrypt) via reverse proxy
  • persistance (données + base PostgreSQL)
  • une base saine pour la prod (sécurité, backups, ops)

Schéma de stack Botpress : runtime, base de données/stockage, HTTPS et monitoring

Dans la pratique, le pattern “app derrière reverse proxy + volumes + DB dédiée” est celui qu’on retrouve dans la plupart des guides de déploiement Docker en production.

Prérequis

  • Un serveur Linux (Debian/Ubuntu), 2 vCPU / 4 Go RAM (recommandé)
  • Un nom de domaine (ex: example.com) + un sous-domaine (ex: bot.example.com)
  • Docker + Docker Compose

1) DNS : pointer le sous-domaine vers le serveur

Crée un enregistrement DNS A :

  • Nom : botpress (ou ce que vous voulez)
  • Valeur : IP publique du serveur

Attends la propagation (souvent 1–30 minutes).

2) Arborescence & fichiers

Sur le serveur :

mkdir -p ~/botpress-compose && cd ~/botpress-compose

3) Créer le fichier .env

Crée un fichier .env (à adapter) :

# Domaine
DOMAIN_NAME=example.com
SUBDOMAIN=botpress
[email protected]

# Postgres
PG_DB=botpress
PG_USER=botpress
PG_PASSWORD=change-me

# Timezone
TZ=Europe/Paris

4) Docker Compose : Botpress + PostgreSQL + HTTPS (Traefik)

Crée compose.yaml :

services:
  traefik:
    image: traefik:v3.2
    restart: always
    command:
      - --providers.docker=true
      - --providers.docker.exposedbydefault=false
      - --entrypoints.web.address=:80
      - --entrypoints.web.http.redirections.entrypoint.to=websecure
      - --entrypoints.web.http.redirections.entrypoint.scheme=https
      - --entrypoints.websecure.address=:443
      - --certificatesresolvers.le.acme.tlschallenge=true
      - --certificatesresolvers.le.acme.email=${SSL_EMAIL}
      - --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - traefik_data:/letsencrypt
      - /var/run/docker.sock:/var/run/docker.sock:ro

  postgres:
    image: postgres:16
    restart: always
    environment:
      POSTGRES_DB: ${PG_DB}
      POSTGRES_USER: ${PG_USER}
      POSTGRES_PASSWORD: ${PG_PASSWORD}
      TZ: ${TZ}
    volumes:
      - postgres_data:/var/lib/postgresql/data

  botpress:
    image: botpress/server:latest
    restart: always
    depends_on:
      - postgres
    # Option “safe” : pas d'exposition directe, uniquement via Traefik
    ports:
      - "127.0.0.1:3000:3000"
    environment:
      NODE_ENV: production
      BP_HOST: 0.0.0.0
      PORT: 3000
      PG_HOST: postgres
      PG_PORT: 5432
      PG_USER: ${PG_USER}
      PG_PASSWORD: ${PG_PASSWORD}
      PG_SSL: "false"
      TZ: ${TZ}
    labels:
      - traefik.enable=true
      - traefik.http.routers.botpress.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
      - traefik.http.routers.botpress.entrypoints=web,websecure
      - traefik.http.routers.botpress.tls=true
      - traefik.http.routers.botpress.tls.certresolver=le
      - traefik.http.services.botpress.loadbalancer.server.port=3000

volumes:
  traefik_data:
  postgres_data:

Pourquoi cette structure ?

  • Le reverse proxy ne publie que 80/443 (HTTPS + routage)
  • Botpress n’est accessible qu’en interne (bind 127.0.0.1) → surface d’attaque réduite
  • PostgreSQL est dédiée, persistée

5) Démarrer

docker compose up -d

docker compose ps
docker compose logs -f --tail=200

Accède ensuite à :

  • https://${SUBDOMAIN}.${DOMAIN_NAME}

6) Checklist production (sécurité & ops)

  • Firewall : n’ouvrir que 80/443 (et SSH si nécessaire)
  • Backups : volume postgres_data (DB) + données applicatives
  • Mises à jour : docker compose pull && docker compose up -d
  • Logs/monitoring : CPU/RAM, espace disque (volumes), erreurs Traefik

7) Dépannage rapide

  • Certificat Let’s Encrypt ne sort pas : DNS pas propagé, port 80/443 bloqué, ou mauvaise valeur SSL_EMAIL
  • 404/Bad Gateway : vérifier loadbalancer.server.port=3000 + que le conteneur écoute bien

Vidéo (FR)

  • Cloud background

Images (CDN)

  • Schéma “reverse proxy + volumes” : https://cdn.adgents.cloud/images/screen-2.png
  • Illustration “hébergement / infra” : https://cdn.adgents.cloud/images/screen-3.png

CTA — Héberger Botpress sans prise de têvous

  • Voir l’app : /applications/botpress
  • Essayer gratuitement

Avec adgents.cloud :

  • Déploiement en 1 clic
  • Facturation à l’heure
  • Stop/Start (compute non facturé à l’arrêt ; stockage conservé)
  • Backups automatiques (toutes les 24h par défaut, jusqu’à 1/h)
  • Rétention longue (jusqu’à 10 ans)
  • Scaling CPU/RAM à la demande

Sources (structure/intent alignés)

  • https://hub.docker.com/r/botpress/server
  • https://raw.githubusercontent.com/botpress/v12/master/examples/docker-compose/README.md
  • https://itsfoss.gitlab.io/post/nginx-reverse-proxy-docker-compose/

Lancez-vous avec Botpress.

Envie de vous lancer avec Botpress ? Créez votre site web en quelques clics.

Botpress

Botpress

Plateforme open-source de chatbots

Déployer Botpress

Aller plus loin


Essayer sur Adgents.cloud

Envie d’un déploiement propre sans passer des heures sur l’infra ? Sur Adgents.cloud, vous pouvez :

  • déployer en 1 clic
  • être facturé à l’heure
  • utiliser stop/start (compute non facturé à l’arrêt)
  • activer des backups automatiques (24h par défaut, jusqu’à 1/h)
  • garder une rétention longue (jusqu’à 10 ans)
  • ajuster le scaling CPU/RAM à la demande

Découvrir botpress sur Adgents.cloudEssayer gratuitement

Cloud pattern

Cet article vous a été utile ?

N'hésitez pas à découvrir d'autres articles

Voir plus d'articles