Aller au contenu

Configuration du serveur

Configurez le comportement du serveur Silex avec des variables d'environnement et des plugins de configuration.

Aperçu

Le serveur Silex charge sa configuration depuis deux sources :

  1. Variables d'environnement — Définies avant le démarrage, elles contrôlent les ports, les URL, les connecteurs et les limites
  2. Fichier de configuration — Un plugin JavaScript/TypeScript qui personnalise les connecteurs, ajoute des routes et se connecte aux événements du serveur

Le fichier de configuration est traité comme un plugin : il reçoit un objet ServerConfig et peut ajouter des connecteurs, écouter des événements et étendre le serveur Express.

Prérequis

  • Serveur Silex en cours d'exécution (Docker, Node ou auto-hébergé)
  • Connaissances de base en Node.js et JavaScript pour les fichiers de configuration
  • Compréhension des connecteurs de stockage et d'hébergement

Variables d'environnement

Toutes les variables d'environnement sont optionnelles sauf SILEX_SESSION_SECRET (recommandé pour la sécurité).

Paramètres principaux du serveur

Variable Valeur par défaut Rôle
SILEX_PORT 6805 Port d'écoute du serveur
SILEX_HOST localhost Nom d'hôte (0.0.0.0 pour l'accès distant)
SILEX_PROTOCOL http http ou https (avant le reverse proxy)
SILEX_URL ${PROTOCOL}://${HOST}:${PORT} URL publique visitée par les utilisateurs
SILEX_DEBUG false Mettre à true pour les journaux détaillés et le rechargement de la configuration
SILEX_SESSION_NAME silex-session Nom du cookie de session
SILEX_SESSION_SECRET (aucune) Clé aléatoire pour le chiffrement de session ; minimum 32 caractères

Limites des requêtes Express

Pour les envois de fichiers volumineux ou les données :

Variable Valeur par défaut Rôle
SILEX_EXPRESS_JSON_LIMIT 100kb Taille maximale du corps JSON
SILEX_EXPRESS_TEXT_LIMIT 1mb Taille maximale du corps texte
SILEX_EXPRESS_URLENCODED_LIMIT 100kb Taille maximale du corps encodé en formulaire

SSL/HTTPS

Pour le HTTPS sans reverse proxy :

Variable Valeur par défaut Rôle
SILEX_SSL_PORT (aucune) Port HTTPS (par ex. 443)
SILEX_SSL_PRIVATE_KEY (aucune) Chemin vers le fichier de clé privée
SILEX_SSL_CERTIFICATE (aucune) Chemin vers le fichier de certificat
SILEX_FORCE_HTTPS false Rediriger HTTP vers HTTPS
SILEX_FORCE_HTTPS_TRUST_XFP_HEADER false Faire confiance à l'en-tête X-Forwarded-Proto du reverse proxy

CORS et configuration client

Variable Valeur par défaut Rôle
SILEX_CORS_URL (aucune) Autoriser les requêtes depuis cette origine (par ex. https://editor.example.com)
SILEX_CLIENT_CONFIG (aucune) Chemin vers le fichier de configuration client (servi à /client-config.js)

Connecteurs

Variable Valeur par défaut Rôle
STORAGE_CONNECTORS fs Liste séparée par des virgules : fs, gitlab, ftp
HOSTING_CONNECTORS fs,download Liste séparée par des virgules : fs, gitlab, ftp, download
SILEX_FS_ROOT /silex/storage Chemin de stockage du système de fichiers
SILEX_FS_HOSTING_ROOT /silex/hosting Chemin d'hébergement du système de fichiers
FTP_STORAGE_PATH (aucune) Chemin racine sur le serveur FTP pour le stockage
FTP_HOSTING_PATH (aucune) Chemin racine sur le serveur FTP pour l'hébergement
GITLAB_DISPLAY_NAME (aucune) Nom d'affichage du connecteur GitLab principal
GITLAB_DOMAIN (aucune) Domaine de l'instance GitLab (ex : gitlab.com)
GITLAB_CLIENT_ID (aucune) ID de l'application OAuth pour GitLab
GITLAB_CLIENT_SECRET (aucune) Secret de l'application OAuth pour GitLab
GITLAB2_DISPLAY_NAME (aucune) Nom d'affichage d'un second connecteur GitLab
GITLAB2_DOMAIN (aucune) Domaine de la seconde instance GitLab
GITLAB2_CLIENT_ID (aucune) ID de l'application OAuth pour le second GitLab
GITLAB2_CLIENT_SECRET (aucune) Secret de l'application OAuth pour le second GitLab

Intégration NocoDB

Variable Valeur par défaut Rôle
NOCO_URL (aucune) URL de l'instance NocoDB
NOCO_API_KEY (aucune) Clé API NocoDB
NOCO_TABLE (aucune) Nom de la table NocoDB pour les métadonnées des sites

Chemins des fichiers de configuration

Variable Valeur par défaut Rôle
SILEX_SERVER_CONFIG .silex.js Chemin vers le fichier de configuration serveur (relatif au répertoire courant)

Fichier de configuration (patron plugin)

Le fichier de configuration est un module qui exporte une fonction asynchrone recevant ServerConfig. Voici un exemple minimal :

// .silex.js
module.exports = async function (config) {
  console.log('Silex server is starting')
  // Add plugins, connectors, routes, listeners here
}

API ServerConfig

class ServerConfig extends Config {
  // Core properties
  port: string | undefined
  debug: boolean
  url: string
  userConfigPath: Plugin | undefined
  configFilePath: Plugin

  // Connectors
  addStorageConnector(connector: StorageConnector | StorageConnector[]): void
  setStorageConnectors(connectors: StorageConnector[]): void
  getStorageConnectors(): StorageConnector[]
  addHostingConnector(connector: HostingConnector | HostingConnector[]): void
  setHostingConnectors(connectors: HostingConnector[]): void
  getHostingConnectors(): HostingConnector[]
  getConnectors(type?: ConnectorType | string | null): Connector[]

  // Plugins
  async addPlugin(plugin: Plugin, options: any): Promise<void>

  // Routes
  async addRoutes(app: Express.Application): Promise<void>

  // Events
  on(event: ServerEvent, listener: Function): void
  off(event: ServerEvent, listener: Function): void
  emit(event: ServerEvent, data?: any): void
}

Ajouter des connecteurs dans la configuration

Exemple : Activer les connecteurs de stockage GitLab et FTP :

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

module.exports = async function (config) {
  // Clear default filesystem connector
  config.setStorageConnectors([])

  // Add GitLab storage
  config.addStorageConnector(
    new GitlabConnector(config, {
      clientId: process.env.GITLAB_CLIENT_ID,
      clientSecret: process.env.GITLAB_CLIENT_SECRET,
      domain: process.env.GITLAB_DOMAIN,
    })
  )

  // Add FTP storage
  config.addStorageConnector(
    new FtpConnector(config, {
      type: 'storage',
      path: process.env.FTP_STORAGE_PATH,
    })
  )
}

Ajouter des routes

Étendez le serveur Express avec des routes personnalisées :

module.exports = async function (config) {
  // This is called after the Express app is set up
  // but before plugins are loaded
  const originalAddRoutes = config.addRoutes.bind(config)
  config.addRoutes = async (app) => {
    await originalAddRoutes(app)

    // Add a custom endpoint
    app.get('/api/custom', (req, res) => {
      res.json({ message: 'Custom route' })
    })

    // Add a static file route
    app.use('/my-files', express.static('/path/to/files'))
  }
}

Écouter les événements du serveur

L'objet de configuration est un émetteur d'événements. Écoutez les événements du cycle de vie :

const { ServerEvent } = require('@silexlabs/silex/dist/server/events')

module.exports = async function (config) {
  config.on(ServerEvent.STARTUP_START, () => {
    console.log('Server is starting')
  })

  config.on(ServerEvent.STARTUP_END, () => {
    console.log('Server is ready')
  })

  config.on(ServerEvent.PUBLISH_START, async (publicationData) => {
    console.log(`Publishing website: ${publicationData.siteSettings.name}`)
  })

  config.on(ServerEvent.PUBLISH_END, async (error) => {
    if (error) {
      console.error(`Publication failed: ${error.message}`)
    } else {
      console.log('Publication successful')
    }
  })

  config.on(ServerEvent.WEBSITE_STORE_START, async ({ websiteId, connectorId }) => {
    console.log(`Saving website ${websiteId} to connector ${connectorId}`)
  })
}

Événements du serveur

Événement Type Rôle
STARTUP_START none Le serveur s'initialise
STARTUP_END none Le serveur est prêt à accepter des requêtes
PUBLISH_START PublicationData La publication commence
PUBLISH_END Error | null Publication terminée (erreur si échouée)
WEBSITE_STORE_START {websiteId, websiteData, connectorId} Sur le point de sauvegarder un site web
WEBSITE_STORE_END Error | null Site web sauvegardé
WEBSITE_ASSET_STORE_START {files, websiteId, connectorId} Sur le point de sauvegarder des ressources
WEBSITE_ASSET_STORE_END Error | null Ressources sauvegardées

Utiliser des plugins dans la configuration

Chargez des plugins supplémentaires en appelant config.addPlugin() :

const dashPlugin = require('@silexlabs/silex-dashboard')
const customPlugin = require('./my-plugin.js')

module.exports = async function (config) {
  // Load dashboard plugin
  await config.addPlugin(dashPlugin, {})

  // Load custom plugin with options
  await config.addPlugin(customPlugin, {
    option1: 'value1',
    option2: true,
  })
}

Emplacement du fichier de configuration

Silex cherche .silex.js dans le répertoire de travail par défaut. Remplacez avec :

SILEX_SERVER_CONFIG=/path/to/config.js npm start

Le chemin est relatif au répertoire de travail courant.

Exemple : Configuration serveur complète

// .silex.js
const path = require('path')
const { ServerEvent } = require('@silexlabs/silex/dist/server/events')
const GitlabConnector = require('@silexlabs/silex-plugins').GitlabConnector
const FtpConnector = require('@silexlabs/silex-plugins').FtpConnector
const FsStorage = require('@silexlabs/silex/dist/server/connectors/FsStorage').FsStorage
const FsHosting = require('@silexlabs/silex/dist/server/connectors/FsHosting').FsHosting

require('dotenv').config()

module.exports = async function (config) {
  console.log(`Starting Silex at ${config.url}`)

  // Set storage connectors
  config.setStorageConnectors([
    new FsStorage(config, {
      path: process.env.SILEX_FS_ROOT || './silex/storage',
    }),
  ])

  // Add optional GitLab storage if credentials are set
  if (process.env.GITLAB_CLIENT_ID) {
    config.addStorageConnector(
      new GitlabConnector(config, {
        clientId: process.env.GITLAB_CLIENT_ID,
        clientSecret: process.env.GITLAB_CLIENT_SECRET,
        domain: process.env.GITLAB_DOMAIN || 'gitlab.com',
      })
    )
  }

  // Set hosting connectors
  config.setHostingConnectors([
    new FsHosting(config, {
      path: process.env.SILEX_FS_HOSTING_ROOT || './silex/hosting',
    }),
  ])

  // Listen to events
  config.on(ServerEvent.PUBLISH_END, (error) => {
    if (error) {
      console.error(`Publication failed: ${error.message}`)
    } else {
      console.log('Website published successfully')
    }
  })
}

Dépannage

Fichier de configuration introuvable

Assurez-vous que .silex.js est dans votre répertoire de travail :

ls -la .silex.js

Ou spécifiez le chemin explicitement :

SILEX_SERVER_CONFIG=./config/silex-config.js npm start

Erreurs de syntaxe dans le fichier de configuration

Activez le mode débogage pour voir les erreurs détaillées :

SILEX_DEBUG=true npm start

Vérifiez la sortie console pour la ligne spécifique causant l'erreur.

Les connecteurs ne se chargent pas

Vérifiez que les variables d'environnement sont définies :

env | grep GITLAB
env | grep FTP

Vérifiez que les paquets npm requis sont installés :

npm ls @silexlabs/silex-plugins

Voir aussi

Éditer cette page sur GitLab