Infrastructure française · Données hébergées en France15 € de crédits offerts
Botpress

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é.

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

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

BotpressPlateforme 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

Cet article vous a été utile ?

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

Voir plus d'articles