Aller au contenu

Exécution depuis Node.js

Installez et exécutez Silex depuis npm, le code source ou npx pour le développement et les installations auto-hébergées.

Aperçu

Au lieu de Docker, vous pouvez exécuter Silex directement sur votre serveur avec Node.js. Cela vous donne plus de contrôle sur le gestionnaire de processus (systemd, PM2, supervisor) et vous permet de personnaliser le script de démarrage.

Trois méthodes d'installation :

  1. Paquet npm — Recommandé pour le déploiement
  2. npx — Test rapide sans installation
  3. Code source — Pour le développement et la contribution

Prérequis

  • Node.js 18 ou ultérieur
  • npm 8 ou ultérieur (inclus avec Node)
  • Git (si vous clonez depuis le code source)

Installation depuis npm

1. Installation globale ou locale

Installation globale :

npm install -g @silexlabs/silex-platform

Ou par projet :

mkdir my-silex && cd my-silex
npm install @silexlabs/silex-platform

2. Créer le fichier .env

cat > .env << EOF
SILEX_SESSION_SECRET=$(openssl rand -base64 32)
SILEX_PORT=6805
SILEX_URL=http://localhost:6805
STORAGE_CONNECTORS=fs
HOSTING_CONNECTORS=fs,download
SILEX_FS_ROOT=./silex/storage
SILEX_FS_HOSTING_ROOT=./silex/hosting
EOF

3. Démarrer le serveur

Avec une installation globale :

silex-platform

Avec une installation locale :

npx @silexlabs/silex-platform

Ou ajoutez dans package.json :

{
  "scripts": {
    "start": "silex-platform"
  }
}

Puis exécutez :

npm start

Le serveur démarre à l'URL définie dans votre fichier .env (par défaut : http://localhost:6805).

Test rapide avec npx

Aucune installation nécessaire :

npx @silexlabs/silex-platform

Cela télécharge, installe et exécute la dernière version. Le serveur écoute par défaut sur le port 6805.

Arrêtez avec Ctrl+C. Toutes les données sont stockées dans ./silex/storage et ./silex/hosting dans votre répertoire courant.

Installation depuis le code source

Pour le développement ou la création de plugins :

git clone https://github.com/silexlabs/Silex.git
cd Silex
npm install
npm run build

Lancez le serveur de développement :

cd packages/silex-platform
npm start

Ou depuis la racine du monorepo :

npm -w packages/silex-platform start

Envie de contribuer ? Après le clonage, consultez les GitHub Issues pour des tâches adaptées aux débutants. Voir aussi Contribuer à Silex.

Variables d'environnement

Toutes les variables peuvent être définies dans un fichier .env ou passées en arguments de ligne de commande :

SILEX_PORT=6805 npx @silexlabs/silex-platform

Consultez docker.md#variables-denvironnement pour la liste complète.

Variables clés pour l'installation Node :

Variable Valeur par défaut Rôle
SILEX_PORT 6805 Port d'écoute
SILEX_HOST localhost Nom d'hôte (0.0.0.0 pour l'accès distant)
SILEX_URL http://localhost:6805 URL publique visitée par les utilisateurs
SILEX_SESSION_SECRET (aucune) Clé aléatoire pour le chiffrement de session
SILEX_SERVER_CONFIG .silex.js Chemin vers le fichier de configuration (relatif au répertoire courant)
SILEX_CLIENT_CONFIG client-config.js Chemin vers le fichier de configuration client

Définir SILEX_HOST pour l'accès distant

Par défaut, le serveur n'écoute que sur localhost. Pour autoriser les connexions distantes :

SILEX_HOST=0.0.0.0 npx @silexlabs/silex-platform

Accédez ensuite depuis une autre machine : http://your-server-ip:6805

Exécution en tant que service système

Avec systemd (Linux)

Créez /etc/systemd/system/silex.service :

[Unit]
Description=Silex Website Builder
After=network.target

[Service]
Type=simple
User=silex
WorkingDirectory=/home/silex/silex-instance
ExecStart=/usr/bin/node /usr/bin/silex-platform
Restart=on-failure
RestartSec=10

# Environment
Environment="SILEX_PORT=6805"
Environment="SILEX_URL=https://silex.example.com"
Environment="SILEX_SESSION_SECRET=your-random-secret"

[Install]
WantedBy=multi-user.target

Créez l'utilisateur silex :

sudo useradd -m -s /usr/sbin/nologin silex
sudo mkdir -p /home/silex/silex-instance
sudo chown silex:silex /home/silex/silex-instance

Activez et démarrez :

sudo systemctl daemon-reload
sudo systemctl enable silex
sudo systemctl start silex

Vérifiez l'état :

sudo systemctl status silex
sudo journalctl -u silex -f

Avec PM2

Installez PM2 :

npm install -g pm2

Créez ecosystem.config.js dans le répertoire de votre instance Silex :

module.exports = {
  apps: [
    {
      name: 'silex',
      script: 'silex-platform',
      instances: 1,
      exec_mode: 'cluster',
      env: {
        SILEX_PORT: 6805,
        SILEX_URL: 'https://silex.example.com',
        SILEX_SESSION_SECRET: 'your-random-secret',
        STORAGE_CONNECTORS: 'fs',
        HOSTING_CONNECTORS: 'fs,download',
      },
    },
  ],
}

Démarrez :

pm2 start ecosystem.config.js
pm2 save
pm2 startup

Consultez les journaux :

pm2 logs silex

Configuration serveur personnalisée

Vous pouvez modifier le comportement du serveur avec un fichier de configuration :

SILEX_SERVER_CONFIG=./my-config.js npx @silexlabs/silex-platform

Créez my-config.js :

const GitlabConnector = require('@silexlabs/silex-plugins').GitlabConnector

module.exports = async function (config) {
  // Add a storage connector
  config.addStorageConnector(
    new GitlabConnector(config, {
      clientId: process.env.GITLAB_CLIENT_ID,
      clientSecret: process.env.GITLAB_CLIENT_SECRET,
      domain: process.env.GITLAB_DOMAIN,
    })
  )
}

Consultez Configuration du serveur pour l'API complète de ServerConfig.

Débogage

Activez le mode débogage :

SILEX_DEBUG=true npx @silexlabs/silex-platform

Cela recharge le fichier de configuration à chaque requête et affiche des informations détaillées au démarrage.

Dépannage

Port déjà utilisé

Changez le port :

SILEX_PORT=8080 npx @silexlabs/silex-platform

Ou trouvez et terminez le processus utilisant le port 6805 :

lsof -i :6805
kill -9 <PID>

EACCES permission denied

npm a tenté une installation globale sans sudo. Corrigez les permissions npm :

mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH=~/.npm-global/bin:$PATH

Ajoutez ensuite dans votre profil shell (.bashrc, .zshrc) :

export PATH=~/.npm-global/bin:$PATH

Erreurs module not found

Réinstallez les dépendances :

npm install
npm run build

Voir aussi

Éditer cette page sur GitLab