Skip to content
Cette page a été générée et traduite avec l'aide de l'IA. Si vous remarquez des inexactitudes, n'hésitez pas à contribuer. Modifier sur GitHub

Déploiement en production ​

Ce guide couvre le déploiement d'OpenPR dans un environnement de production avec HTTPS, un proxy inverse, le durcissement de la base de données et les bonnes pratiques de sécurité.

Architecture ​

mermaid
graph LR
    INTERNET["Internet<br/>:443"] --> CADDY["Caddy<br/>HTTPS automatique"]
    CADDY --> FE["Frontend<br/>Nginx :3000"]
    FE --> API["API :8080"]
    FE --> MCP["MCP :8090"]
    API --> PG["PostgreSQL :5432"]
    WORKER["Worker"] --> PG

Prérequis ​

  • Un serveur avec au moins 2 cœurs CPU et 2 Go de RAM
  • Un nom de domaine pointant vers l'adresse IP de votre serveur
  • Docker et Docker Compose (ou Podman)

Étape 1 : Configurer l'environnement ​

Créez un fichier .env de production :

bash
# Base de données (utilisez des mots de passe forts)
DATABASE_URL=postgres://openpr:STRONG_PASSWORD_HERE@postgres:5432/openpr
POSTGRES_DB=openpr
POSTGRES_USER=openpr
POSTGRES_PASSWORD=STRONG_PASSWORD_HERE

# JWT (générez un secret aléatoire)
JWT_SECRET=$(openssl rand -hex 32)
JWT_ACCESS_TTL_SECONDS=86400
JWT_REFRESH_TTL_SECONDS=604800

# Journalisation
RUST_LOG=info

Secrets

Ne commitez jamais les fichiers .env dans le contrôle de version. Utilisez chmod 600 .env pour restreindre les permissions du fichier.

Étape 2 : Configurer Caddy ​

Installez Caddy sur le système hôte :

bash
sudo apt install -y caddy

Configurez le Caddyfile :

# /etc/caddy/Caddyfile
your-domain.example.com {
    reverse_proxy localhost:3000
}

Caddy obtient et renouvelle automatiquement les certificats TLS Let's Encrypt.

Démarrez Caddy :

bash
sudo systemctl enable --now caddy

Alternative : Nginx

Si vous préférez Nginx, configurez-le avec un proxy_pass vers le port 3000 et utilisez certbot pour les certificats TLS.

Étape 3 : Déployer avec Docker Compose ​

bash
cd /opt/openpr
docker-compose up -d

Vérifiez que tous les services sont sains :

bash
docker-compose ps
curl -k https://your-domain.example.com/health

Étape 4 : Créer le compte administrateur ​

Ouvrez https://your-domain.example.com dans votre navigateur et enregistrez le compte administrateur.

Premier utilisateur

Le premier utilisateur enregistré devient administrateur. Enregistrez votre compte admin avant de partager l'URL.

Liste de vérification sécurité ​

Authentification ​

  • [ ] Changer JWT_SECRET en une valeur aléatoire de 32+ caractères
  • [ ] Définir des valeurs TTL de jetons appropriées (plus courtes pour l'accès, plus longues pour le rafraîchissement)
  • [ ] Créer le compte administrateur immédiatement après le déploiement

Base de données ​

  • [ ] Utiliser un mot de passe fort pour PostgreSQL
  • [ ] Ne pas exposer le port PostgreSQL (5432) à Internet
  • [ ] Activer SSL PostgreSQL pour les connexions (si la base de données est distante)
  • [ ] Configurer des sauvegardes régulières de la base de données

Réseau ​

  • [ ] Utiliser Caddy ou Nginx avec HTTPS (TLS 1.3)
  • [ ] Exposer uniquement les ports 443 (HTTPS) et optionnellement 8090 (MCP) à Internet
  • [ ] Utiliser un pare-feu (ufw, iptables) pour restreindre l'accès
  • [ ] Envisager de restreindre l'accès au serveur MCP aux plages IP connues

Application ​

  • [ ] Définir RUST_LOG=info (pas debug ou trace en production)
  • [ ] Surveiller l'utilisation du disque pour le répertoire uploads
  • [ ] Configurer la rotation des journaux pour les journaux de conteneurs

Sauvegardes de la base de données ​

Configurez des sauvegardes PostgreSQL automatisées :

bash
#!/bin/bash
# /opt/openpr/backup.sh
BACKUP_DIR="/opt/openpr/backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"

docker exec openpr-postgres pg_dump -U openpr openpr | gzip > "$BACKUP_DIR/openpr_$DATE.sql.gz"

# Conserver uniquement les 30 derniers jours
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +30 -delete

Ajouter à cron :

bash
# Sauvegarde quotidienne à 2h du matin
0 2 * * * /opt/openpr/backup.sh

Surveillance ​

Vérifications de santé ​

Surveillez les points de terminaison de santé des services :

bash
# API
curl -f http://localhost:8080/health

# Serveur MCP
curl -f http://localhost:8090/health

Surveillance des journaux ​

bash
# Suivre tous les journaux
docker-compose logs -f

# Suivre un service spécifique
docker-compose logs -f api --tail=100

Considérations de mise à l'échelle ​

  • Serveur API : Peut faire fonctionner plusieurs répliques derrière un équilibreur de charge. Toutes les instances se connectent à la même base de données PostgreSQL.
  • Worker : Exécutez une seule instance pour éviter le traitement dupliqué des tâches.
  • Serveur MCP : Peut faire fonctionner plusieurs répliques. Chaque instance est sans état.
  • PostgreSQL : Pour la haute disponibilité, envisagez la réplication PostgreSQL ou un service de base de données géré.

Mise à jour ​

Pour mettre à jour OpenPR :

bash
cd /opt/openpr
git pull origin main
docker-compose down
docker-compose up -d --build

Les migrations de base de données sont appliquées automatiquement au démarrage du serveur API.

Étapes suivantes ​

Released under the Apache-2.0 License.