Installation avec Docker Compose¶
Hébergez Silex avec Docker et Docker Compose en un minimum de configuration.
Aperçu¶
Le moyen le plus simple d'auto-héberger Silex est d'utiliser Docker. L'image Docker officielle (silexlabs/silex-platform) inclut le serveur Node.js, tous les connecteurs (système de fichiers, GitLab, FTP) et l'éditeur web préconfigurés. Vous gérez l'instance via des variables d'environnement et Docker Compose, sans avoir besoin d'écrire du code.
Docker Compose vous permet également d'ajouter des reverse proxies (Nginx, Caddy), la terminaison SSL et de lier des services externes (PostgreSQL pour les backends CMS).
Prérequis¶
- Docker et Docker Compose installés
- Compréhension de base des variables d'environnement et de la redirection de ports
- Un nom de domaine (optionnel, pour les domaines personnalisés)
Installation¶
1. Créer un fichier docker-compose.yml¶
Créez un nouveau répertoire pour votre instance Silex :
2. Ajouter le service Silex¶
Collez ceci dans votre docker-compose.yml :
version: '3.8'
services:
silex:
image: silexlabs/silex-platform:latest
container_name: silex
ports:
- "6805:6805"
environment:
SILEX_PORT: 6805
SILEX_HOST: localhost
SILEX_PROTOCOL: http
SILEX_SESSION_SECRET: ${SILEX_SESSION_SECRET}
SILEX_URL: http://localhost:6805
STORAGE_CONNECTORS: fs
HOSTING_CONNECTORS: fs,download
volumes:
- ./silex-storage:/silex/storage
- ./silex-hosting:/silex/hosting
restart: unless-stopped
3. Définir les variables d'environnement¶
Modifiez .env :
Générez un secret sécurisé :
4. Démarrer l'instance¶
Silex est maintenant accessible à http://localhost:6805.
5. Accéder à Silex¶
Ouvrez votre navigateur à l'adresse http://localhost:6805. Vous verrez le tableau de bord avec une liste vide de sites web.
Variables d'environnement¶
| Variable | Valeur par défaut | Rôle |
|---|---|---|
SILEX_PORT |
6805 | Port interne sur lequel le serveur Node écoute |
SILEX_HOST |
localhost | Nom d'hôte interne (gardez localhost dans Docker) |
SILEX_PROTOCOL |
http | Protocole avant le reverse proxy (http ou https) |
SILEX_URL |
http://localhost:6805 | URL publique visitée par les utilisateurs (à modifier pour la production) |
SILEX_SESSION_SECRET |
(aucune) | Clé de chiffrement de session ; doit être aléatoire et comporter au moins 32 caractères |
SILEX_SESSION_NAME |
silex-session | Nom du cookie de session |
SILEX_DEBUG |
false | Mettre à true pour recharger les fichiers de configuration à chaque requête (développement uniquement) |
STORAGE_CONNECTORS |
fs | Séparés par des virgules : fs, gitlab, ftp |
HOSTING_CONNECTORS |
fs,download | Séparés par des virgules : fs, gitlab, ftp, download |
SILEX_FS_ROOT |
/silex/storage | Chemin pour le connecteur de stockage système de fichiers |
SILEX_FS_HOSTING_ROOT |
/silex/hosting | Chemin pour le connecteur d'hébergement système de fichiers |
Limites des requêtes Express¶
Si vous téléchargez des fichiers volumineux ou utilisez de gros payloads JSON :
| Variable | Valeur par défaut | Rôle |
|---|---|---|
SILEX_EXPRESS_JSON_LIMIT |
100kb | Taille maximale du corps de requête JSON |
SILEX_EXPRESS_TEXT_LIMIT |
1mb | Taille maximale du corps de requête texte |
SILEX_EXPRESS_URLENCODED_LIMIT |
100kb | Taille maximale du corps de requête URL-encoded |
Augmentez ces valeurs pour les ressources volumineuses ou les imports de données :
Connecteurs GitLab¶
Pour activer le stockage et l'hébergement GitLab :
environment:
STORAGE_CONNECTORS: fs,gitlab
HOSTING_CONNECTORS: fs,download,gitlab
GITLAB_DISPLAY_NAME: GitLab.com
GITLAB_CLIENT_ID: your-oauth-app-id
GITLAB_CLIENT_SECRET: your-oauth-app-secret
GITLAB_DOMAIN: gitlab.com
Pour une seconde instance GitLab (par exemple auto-hébergée), ajoutez :
environment:
STORAGE_CONNECTORS: fs,gitlab,gitlab2
HOSTING_CONNECTORS: fs,download,gitlab,gitlab2
GITLAB_DISPLAY_NAME: GitLab.com
GITLAB_CLIENT_ID: your-app-id
GITLAB_CLIENT_SECRET: your-app-secret
GITLAB_DOMAIN: gitlab.com
GITLAB2_DISPLAY_NAME: Company GitLab
GITLAB2_CLIENT_ID: your-second-app-id
GITLAB2_CLIENT_SECRET: your-second-app-secret
GITLAB2_DOMAIN: gitlab.mycompany.com
Consultez Connecteurs de stockage pour la configuration OAuth.
Connecteurs FTP¶
Pour utiliser le FTP pour le stockage ou l'hébergement :
environment:
STORAGE_CONNECTORS: ftp
HOSTING_CONNECTORS: ftp
FTP_STORAGE_PATH: /public_html
FTP_HOSTING_PATH: /public_html
Les utilisateurs s'authentifient avec leurs identifiants FTP via l'interface.
Reverse proxy avec Nginx¶
Exécutez Silex derrière Nginx pour la terminaison SSL et les domaines personnalisés :
version: '3.8'
services:
silex:
image: silexlabs/silex-platform:latest
expose:
- 6805
environment:
SILEX_URL: https://my-silex.example.com
SILEX_PROTOCOL: https
SILEX_PORT: 6805
SILEX_SESSION_SECRET: ${SILEX_SESSION_SECRET}
STORAGE_CONNECTORS: fs
HOSTING_CONNECTORS: fs,download
volumes:
- ./silex-storage:/silex/storage
- ./silex-hosting:/silex/hosting
restart: unless-stopped
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./certs:/etc/nginx/certs:ro
depends_on:
- silex
restart: unless-stopped
Créez nginx.conf :
events {
worker_connections 1024;
}
http {
upstream silex {
server silex:6805;
}
server {
listen 80;
server_name my-silex.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name my-silex.example.com;
ssl_certificate /etc/nginx/certs/cert.pem;
ssl_certificate_key /etc/nginx/certs/key.pem;
location / {
proxy_pass http://silex;
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;
}
}
}
Pointez l'enregistrement A de votre domaine vers l'adresse IP de votre serveur, puis générez les certificats SSL avec Let's Encrypt :
Copiez les certificats dans ./certs/ :
sudo cp /etc/letsencrypt/live/my-silex.example.com/fullchain.pem ./certs/cert.pem
sudo cp /etc/letsencrypt/live/my-silex.example.com/privkey.pem ./certs/key.pem
Reverse proxy avec Caddy¶
Caddy gère automatiquement les certificats SSL :
caddy:
image: caddy:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy-data:/data
depends_on:
- silex
volumes:
caddy-data:
Créez un Caddyfile :
Volumes et persistance des données¶
Le docker-compose.yml par défaut monte deux volumes :
./silex-storage: Emplacement de stockage des sites web (HTML, CSS, ressources)./silex-hosting: Emplacement de déploiement des sites publiés
Ces volumes persistent entre les redémarrages du conteneur. Sauvegardez-les régulièrement :
docker-compose exec silex tar czf /silex/storage-backup.tar.gz /silex/storage
docker cp silex:/silex/storage-backup.tar.gz ./backup/
Mise à jour de l'image Docker¶
Récupérez la dernière version :
Dépannage¶
Le conteneur ne démarre pas¶
Consultez les journaux :
Problèmes courants :
- Le port 6805 est déjà utilisé : Changez ports: ["6805:6805"] en ["8080:6805"]
- SILEX_SESSION_SECRET trop court : Doit comporter au moins 32 caractères
- Permission refusée sur les volumes : Exécutez chmod 777 silex-storage silex-hosting
Sites web stockés localement mais non accessibles¶
Le connecteur d'hébergement par système de fichiers stocke les fichiers dans le répertoire /silex/hosting du conteneur, sans les servir sur le web. Pour servir les sites publiés :
- Utilisez le connecteur
downloadpour obtenir un ZIP - Déployez sur un serveur web statique séparé
- Utilisez GitLab Pages ou l'hébergement FTP à la place
Consultez Deploiement vers d'autres plateformes d'hebergement.
Erreurs CORS¶
Si l'éditeur et l'API sont sur des domaines différents, définissez :
Voir aussi¶
- Exécution depuis npm/npx
- Déploiement en un clic — CapRover
- Configuration du serveur — API de configuration serveur