Installation avec Docker¶
Auto-hébergez Silex avec Docker en compilant l'image depuis le code source.
Vue d'ensemble¶
Silex fournit un Dockerfile à la racine du dépôt. Il compile le monorepo (serveur Node.js, tous les connecteurs et l'éditeur web) en une seule image, configurée en SaaS complète. Vous gérez l'instance via des variables d'environnement.
Note : l'image
silexlabs/silex-platformsur Docker Hub est compilée depuis ceDockerfileet fait tourner l'instance hébergée ainsi que l'app CapRover en un clic. La compiler vous-même depuis le code source, comme ci-dessous, suit toujours le code le plus récent et évite de dépendre d'un registre donné (un passage vers un registre libre est en discussion).
Prérequis¶
- Docker installé
- Git
- Connaissances de base des variables d'environnement et du forwarding de ports
Démarrage rapide¶
Clonez le dépôt et compilez l'image :
git clone --recurse-submodules https://github.com/silexlabs/Silex.git
cd Silex
docker build -t silex .
Lancez-la :
docker run -d --name silex -p 6805:6805 \
-e SILEX_SESSION_SECRET="$(openssl rand -base64 32)" \
-e SILEX_URL=http://localhost:6805 \
-e STORAGE_CONNECTORS=fs \
-e HOSTING_CONNECTORS=fs,download \
-e SILEX_FS_ROOT=/data/storage \
-e SILEX_FS_HOSTING_ROOT=/data/hosting \
-v "$PWD/data:/data" \
silex
Silex tourne désormais sur http://localhost:6805. Vous verrez le dashboard avec une liste de sites vide.
Avec Docker Compose¶
Créez docker-compose.yml à la racine du dépôt :
services:
silex:
build:
context: .
dockerfile: Dockerfile
container_name: silex
ports:
- "6805:6805"
environment:
SILEX_SESSION_SECRET: ${SILEX_SESSION_SECRET}
SILEX_URL: http://localhost:6805
STORAGE_CONNECTORS: fs
HOSTING_CONNECTORS: fs,download
SILEX_FS_ROOT: /data/storage
SILEX_FS_HOSTING_ROOT: /data/hosting
volumes:
- ./data:/data
restart: unless-stopped
Définissez le secret de session dans un fichier .env à côté :
Compilez et démarrez :
Variables d'environnement¶
| Variable | Défaut | Rôle |
|---|---|---|
SILEX_PORT |
6805 | Port interne d'écoute du serveur Node |
SILEX_HOST |
localhost | Nom d'hôte interne (laisser localhost dans Docker) |
SILEX_PROTOCOL |
http | Protocole avant un reverse proxy (http ou https) |
SILEX_URL |
http://localhost:6805 | URL publique visitée (à mettre à jour en production) |
SILEX_SESSION_SECRET |
(aucun) | Clé de chiffrement de session, aléatoire et d'au moins 32 caractères |
SILEX_SESSION_NAME |
silex-session | Nom du cookie de session |
SILEX_DEBUG |
false | true pour recharger la config à chaque requête (dev seulement) |
STORAGE_CONNECTORS |
ftp | Séparés par des virgules : fs, gitlab, ftp (les exemples ici utilisent fs pour une instance autonome) |
HOSTING_CONNECTORS |
ftp,download | Séparés par des virgules : fs, gitlab, ftp, download |
SILEX_FS_ROOT |
(relatif au cwd) | Chemin du connecteur de stockage fichiers |
SILEX_FS_HOSTING_ROOT |
(relatif au cwd) | Chemin du connecteur d'hébergement fichiers |
SILEX_SERVER_CONFIG |
(config SaaS intégrée) | Chemin d'un fichier de config serveur personnalisé |
SILEX_CLIENT_CONFIG |
(config SaaS intégrée) | Chemin d'un fichier de config client personnalisé |
Limites de requête Express¶
Pour les uploads volumineux ou les gros payloads JSON :
| Variable | Défaut | Rôle |
|---|---|---|
SILEX_EXPRESS_JSON_LIMIT |
1mb | Taille max du corps JSON |
SILEX_EXPRESS_TEXT_LIMIT |
10mb | Taille max du corps texte |
SILEX_EXPRESS_URLENCODED_LIMIT |
1mb | Taille max du corps URL-encodé |
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: votre-id-app-oauth
GITLAB_CLIENT_SECRET: votre-secret-app-oauth
GITLAB_DOMAIN: gitlab.com
Pour une seconde instance GitLab, ajoutez les variables GITLAB2_* et ajoutez gitlab2 aux listes de connecteurs. Voir Connecteurs de stockage pour la configuration OAuth.
Connecteurs FTP¶
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 dans l'interface.
Reverse proxy avec Caddy¶
Caddy gère automatiquement les certificats SSL. Ajoutez-le à votre docker-compose.yml :
services:
silex:
build:
context: .
dockerfile: Dockerfile
expose:
- 6805
environment:
SILEX_URL: https://silex.example.com
SILEX_PROTOCOL: https
SILEX_SESSION_SECRET: ${SILEX_SESSION_SECRET}
STORAGE_CONNECTORS: fs
HOSTING_CONNECTORS: fs,download
SILEX_FS_ROOT: /data/storage
SILEX_FS_HOSTING_ROOT: /data/hosting
volumes:
- ./data:/data
restart: unless-stopped
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 :
Pointez l'enregistrement A de votre domaine vers votre serveur, puis docker compose up -d --build. Caddy provisionne et renouvelle le certificat automatiquement.
Volumes et persistance des données¶
L'exemple monte ./data dans le conteneur, avec les sites sous /data/storage et les sites publiés sous /data/hosting. Cela persiste entre les redémarrages du conteneur. Sauvegardez régulièrement :
Mise à jour¶
Récupérez le dernier code et recompilez :
Dépannage¶
Le conteneur ne démarre pas¶
Problèmes fréquents :
- Port 6805 déjà utilisé : changez
portsen["8080:6805"] SILEX_SESSION_SECRETtrop court : au moins 32 caractères- Permission refusée sur le volume de données :
chmod -R 777 ./data
Les sites publiés sont stockés mais pas servis¶
Le connecteur d'hébergement fichiers écrit les fichiers dans le conteneur, il ne les sert pas sur le web. Pour servir les sites publiés, utilisez le connecteur download pour récupérer un ZIP, ou utilisez GitLab Pages ou l'hébergement FTP. Voir Déployer vers d'autres hébergeurs.
Erreurs CORS¶
Si l'éditeur et l'API sont sur des domaines différents :
Voir aussi¶
- Exécution depuis le code source avec Node.js
- Déploiement en un clic — CapRover
- Configuration serveur — API de config serveur