Aller au contenu

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 :

mkdir silex-instance && cd silex-instance
touch docker-compose.yml .env

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 :

SILEX_SESSION_SECRET=your-random-secret-here-min-32-chars

Générez un secret sécurisé :

openssl rand -base64 32

4. Démarrer l'instance

docker-compose up -d

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 :

environment:
  SILEX_EXPRESS_JSON_LIMIT: 50mb
  SILEX_EXPRESS_TEXT_LIMIT: 50mb

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 :

certbot certonly --standalone -d my-silex.example.com

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 :

my-silex.example.com {
  reverse_proxy silex:6805
}

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 :

docker-compose pull
docker-compose up -d

Dépannage

Le conteneur ne démarre pas

Consultez les journaux :

docker-compose logs silex

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 :

  1. Utilisez le connecteur download pour obtenir un ZIP
  2. Déployez sur un serveur web statique séparé
  3. 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 :

environment:
  SILEX_CORS_URL: https://your-domain.com

Voir aussi

Éditer cette page sur GitLab