Bati : déployer sur adgents.cloud (HTTPS, sauvegardes, perf) — guide 2026
Déployer Bati en production, ce n’est pas juste « lancer un conteneur ». Ce qui fait la différence le jour où ça chauffe (panne, erreur humaine, mise à jour ratée), c’est : HTTPS, données persistantes, sauvegardes testées, et une base simple à maintenir.
Si vous voulez éviter la gestion d’infra et gagner du temps : vous pouvez aussi déployer Bati en 1 clic sur adgents.cloud (backups automatiques, scaling CPU/RAM, start/stop).
Vidéo (YouTube, FR)

Prérequis
- Un serveur Linux (Debian/Ubuntu)
- Un nom de domaine (ex : bati.example.com)
- Docker + Docker Compose
- Un accès SSH
Pour les principes reverse proxy + HTTPS avec Docker, vous pouvez aussi vous appuyer sur ce guide : Installer PrestaShop avec Docker Compose (prod).
Architecture recommandée (simple et robuste)
Objectif : une architecture claire, facile à diagnostiquer.
- Reverse proxy (Traefik) : gère les certificats TLS, la redirection HTTP→HTTPS, des en-têvos de sécurité
- Bati (app) : le service web
- Base de données : persistance, perf
- (option) Cache/queue : si Bati en a besoin selon votre usage
Pourquoi cette séparation ?
- vous pouvez redémarrer l’app sans toucher aux données
- vous pouvez sauvegarder la base et les fichiers proprement
- vous pouvez faire évoluer (CPU/RAM) sans changer la structure
1) DNS : pointer le sous-domaine
Crée un enregistrement DNS A :
- Nom :
bati - Valeur : IP publique du serveur
Attends la propagation (souvent 1–30 minutes).
2) Dossier projet
Sur le serveur :
mkdir -p ~/bati-compose && cd ~/bati-compose
mkdir -p traefik
3) Fichier .env
Crée ~/bati-compose/.env :
# Domaine
BATI_HOST=bati.example.com
# Email Let's Encrypt
[email protected]
# Base de données (ex : PostgreSQL)
DB_NAME=bati
DB_USER=bati
DB_PASSWORD=change_me_strong_password
# (option) Mot de passe dashboard Traefik
TRAEFIK_DASHBOARD_USER=admin
TRAEFIK_DASHBOARD_HASHED_PASSWORD=$apr1$CHANGE$ME
# Timezone
TZ=Europe/Paris
Conseils pratiques :
- utilise un gestionnaire de secrets (ou au minimum des mots de passe longs)
- garde
.envhors Git
4) Compose : Traefik + Bati + DB
Crée ~/bati-compose/compose.yaml :
services:
traefik:
image: traefik:v3.1
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=${LETSENCRYPT_EMAIL}
- --certificatesresolvers.le.acme.storage=/letsencrypt/acme.json
ports:
- 80:80
- 443:443
volumes:
- traefik_letsencrypt:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
db:
image: postgres:16
restart: always
environment:
- POSTGRES_DB=${DB_NAME}
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
- TZ=${TZ}
volumes:
- db_data:/var/lib/postgresql/data
bati:
image: ghcr.io/example/bati:latest
restart: always
depends_on:
- db
environment:
- DATABASE_URL=postgresql://${DB_USER}:${DB_PASSWORD}@db:5432/${DB_NAME}
- TZ=${TZ}
labels:
- traefik.enable=true
- traefik.http.routers.bati.rule=Host(`${BATI_HOST}`)
- traefik.http.routers.bati.entrypoints=websecure
- traefik.http.routers.bati.tls=true
- traefik.http.routers.bati.tls.certresolver=le
- traefik.http.services.bati.loadbalancer.server.port=3000
# En-tetes de sécurité (base)
- traefik.http.middlewares.bati-headers.headers.framedeny=true
- traefik.http.middlewares.bati-headers.headers.contenttypenosniff=true
- traefik.http.middlewares.bati-headers.headers.browserxssfilter=true
- traefik.http.routers.bati.middlewares=bati-headers
volumes:
db_data:
traefik_letsencrypt:
À adapter :
- l’image
bati(registry officiel + tag) - le port interne (
3000) selon l’app - la variable
DATABASE_URLselon la doc Bati

5) Démarrer et vérifier
docker compose up -d
docker compose ps
Puis :
- ouvre
https://bati.example.com - vérifie que le HTTPS est actif (cadenas) et que les redirections HTTP→HTTPS fonctionnent
En cas de souci, commence par :
docker compose logs -f --tail=200 traefik
6) Sauvegardes : la base solide
Pour une appli type Bati, vous devez au minimum pouvoir restaurer :
- la base de données
- les fichiers persistants (uploads, documents, exports)
A) Dump DB (ex : PostgreSQL)
Exemple :
mkdir -p ~/backups/bati
docker exec -i $(docker compose ps -q db) pg_dump -U ${DB_USER} ${DB_NAME} \
| gzip > ~/backups/bati/db-$(date +%F).sql.gz
B) Sauvegarder les volumes
- soit via snapshots (si votre hébergeur le propose)
- soit via export régulier (tar) vers un stockage externe
C) Tester la restauration (indispensable)
Le test le plus simple :
- remonter un environnement de test
- restaurer le dump
- vérifier login + pages clés + génération d’un document
7) Sécurité : les réglages qui évitent les ennuis
- n’expose jamais la base au public
- limite SSH (clé + pare-feu)
- mets en place du rate limiting/WAF si l’app est très exposée
Si votre installation inclut des webhooks publics, ce guide peut vous aider à raisonner sécurité + surface d’exposition : Sécuriser n8n : secrets, webhooks, authentification, logs et RGPD.
Lancez-vous avec Bati.
Envie de vous lancer avec Bati ? Créez votre site web en quelques clics.
Bati
La solution pour les constructeurs
8) Performance : ce qui change vraiment la stabilité
- dimensionne la RAM pour la DB (c’est souvent le premier goulot)
- surveille CPU/RAM/IO disque
- évite les « petits serveurs » si la charge est irrégulière : vous allez subir les pics
Déployer Bati sans gérer l’infra
Si vous voulez vous concentrer sur l’app et le métier :
- déploiement en 1 clic
- backups automatiques (jusqu’à 1/h)
- scaling CPU/RAM à la demande
- start/stop (compute non facturé à l’arrêt)
→ Découvre Bati sur adgents.cloud.

