Aller au contenu

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-platform sur Docker Hub est compilée depuis ce Dockerfile et 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é :

echo "SILEX_SESSION_SECRET=$(openssl rand -base64 32)" > .env

Compilez et démarrez :

docker compose up -d --build

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é
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: 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 :

silex.example.com {
  reverse_proxy silex:6805
}

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 :

tar czf data-backup.tar.gz ./data

Mise à jour

Récupérez le dernier code et recompilez :

git pull
git submodule update --init --recursive
docker compose up -d --build

Dépannage

Le conteneur ne démarre pas

docker compose logs silex

Problèmes fréquents :

  • Port 6805 déjà utilisé : changez ports en ["8080:6805"]
  • SILEX_SESSION_SECRET trop 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 :

environment:
  SILEX_CORS_URL: https://votre-domaine.com

Voir aussi

Éditer cette page sur GitLab