Docker avec PostgreSQL externe
Méthode recommandée pour la production lorsque tu as déjà un serveur PostgreSQL géré (RDS, Scaleway, Supabase, etc.).
Prérequis
- Docker 20+ et Docker Compose v2
- Une base PostgreSQL 14+ accessible depuis les containers
- Un utilisateur dédié avec droits
CREATE TABLEsur la base cible
Préparation de la base
Connectez-vous à votre serveur PostgreSQL et créez une base + un utilisateur dédiés :
CREATE USER rclone_ui WITH PASSWORD 'change-me';
CREATE DATABASE rclone_ui OWNER rclone_ui;
GRANT ALL PRIVILEGES ON DATABASE rclone_ui TO rclone_ui;
Les migrations SeaORM sont appliquées automatiquement au démarrage du backend.
Lancement
Créez un fichier .env à la racine du projet :
DATABASE_URL=postgresql://rclone_ui:change-me@host.docker.internal:5432/rclone_ui
host.docker.internalpointe vers la machine hôte depuis un container. Sur Linux, ajoutezextra_hosts: ["host.docker.internal:host-gateway"](déjà présent dansdocker-compose.yml).
Puis lancez :
docker compose up --build -d
Deux containers démarrent :
| Service | Port | Image |
|---|---|---|
backend |
3000 | FROM scratch |
frontend |
80 | nginx:alpine |
Utiliser l’image publiée
Pour ne pas builder localement, utilisez les images du registry GitHub :
services:
backend:
image: ghcr.io/sixmon/rclone-replication-webui-backend:latest
# ...
frontend:
image: ghcr.io/sixmon/rclone-replication-webui-frontend:latest
# ...
Les images sont buildées automatiquement à chaque tag v*.*.* par le workflow GitHub Actions.
Reverse proxy / HTTPS
Le frontend nginx écoute sur le port 80 en HTTP simple. Pour exposer en HTTPS, placez-le derrière un reverse proxy (Caddy, Traefik, nginx, Cloudflare) qui gère TLS.
Exemple Caddy :
mon-rclone-ui.example.com {
reverse_proxy localhost:80
}
Pensez à ajouter X-Forwarded-Proto: https et X-Forwarded-Host dans les headers — le backend les lit pour construire les URLs de callback OAuth.
Considérations production
- Read-only : les containers tournent en
read_only: trueavecno-new-privileges. Voirdocker-compose.yml. - Healthcheck : le backend expose
--health(CLI) qui teste la connexion DB. Le compose redémarre automatiquement si la BDD tombe. - Sauvegardes : vos backups PostgreSQL contiennent toute la config. Si vous utilisez un Secret Manager externe, les credentials sensibles n’y sont pas (uniquement les références).