Installation
Prérequis système
| Composant | Version minimale |
|---|---|
| Docker Engine | 24.0 |
| Docker Compose | v2.20 |
| RAM | 2 Go (4 Go recommandés) |
| Disque | 20 Go |
| Domaine | Un FQDN avec enregistrement DNS A |
Un certificat TLS est fortement recommandé en production. Ce guide utilise Nginx comme reverse-proxy avec Let’s Encrypt.
Récupérer Fatplant
git clone https://github.com/fatplant/fatplant.git /opt/fatplant
cd /opt/fatplant Configurer l’environnement
cp .env.example .env
nano .env Les variables essentielles à renseigner pour la production :
# Domaine public de votre instance
APP_URL=https://monmedia.fr
ADMIN_URL=https://admin.monmedia.fr
# Base de données
DATABASE_URL=postgresql://fatplant:motdepasse@db:5432/fatplant
# Redis
REDIS_URL=redis://redis:6379
# Mailer (exemple SMTP)
MAILER_DSN=smtp://user:pass@smtp.monmedia.fr:587
# Serveur Yjs
YJS_SERVER_URL=wss://yjs.monmedia.fr
YJS_SERVER_PERSIST=http
YJS_BACKEND_URL=http://backend:8000 Générer les clés JWT
L’authentification entre l’admin et le backend repose sur des paires de clés asymétriques RS256. Générez-les avant le premier démarrage :
mkdir -p docker/frankenphp/jwt
openssl genrsa -out docker/frankenphp/jwt/private.pem 4096
openssl rsa -pubout -in docker/frankenphp/jwt/private.pem
-out docker/frankenphp/jwt/public.pem Puis référencez ces fichiers dans .env :
JWT_SECRET_KEY=%kernel.project_dir%/config/jwt/private.pem
JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem
JWT_PASSPHRASE= Démarrer les services
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d Le fichier docker-compose.prod.yml surcharge la configuration pour la production (suppression des ports exposés en direct, volumes persistants, logs structurés).
Initialiser la base de données
Au premier démarrage, les migrations sont appliquées automatiquement. Vous pouvez le vérifier :
docker compose exec backend php bin/console doctrine:migrations:status Pour créer le premier compte administrateur :
docker compose exec backend php bin/console fatplant:user:create
--email=admin@monmedia.fr
--password=VotreMotDePasse
--role=ROLE_ADMIN Configuration du reverse-proxy Nginx
Voici un exemple de configuration Nginx pour exposer les services :
# Backend API
server {
listen 443 ssl;
server_name api.monmedia.fr;
ssl_certificate /etc/letsencrypt/live/monmedia.fr/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/monmedia.fr/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
# Frontend public
server {
listen 443 ssl;
server_name monmedia.fr;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
}
}
# Serveur Yjs (WebSocket)
server {
listen 443 ssl;
server_name yjs.monmedia.fr;
location / {
proxy_pass http://127.0.0.1:1234;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
} Vérification post-installation
# Statut des conteneurs
docker compose ps
# Test de l'API
curl https://api.monmedia.fr/api/public/articles
# Test du endpoint health du serveur Yjs
curl https://yjs.monmedia.fr/health Mises à jour
git pull origin main
docker compose pull
docker compose up -d
docker compose exec backend php bin/console doctrine:migrations:migrate --no-interaction Consultez toujours le
CHANGELOG.mdavant de mettre à jour pour identifier les éventuels changements cassants.