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 :
- Variables d'environnement — Définies avant le démarrage, elles contrôlent les ports, les URL, les connecteurs et les limites
- 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 :
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 :
Ou spécifiez le chemin explicitement :
Erreurs de syntaxe dans le fichier de configuration¶
Activez le mode débogage pour voir les erreurs détaillées :
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 :
Vérifiez que les paquets npm requis sont installés :
Voir aussi¶
- API des plugins côté client
- Configuration des connecteurs de stockage
- Configuration des connecteurs d'hébergement
- Comment fonctionne le CMS — Concepts du CMS