Référence CLI & serveur (`cms.pl`)
cms.pl est le daemon du CMS Chinaski : il sert l'interface admin et l'API, tandis que le site public est du HTML statique construit séparément. Cette page explique comment exécuter le serveur en développement, en production et hors ligne, plus les outils en ligne de commande qui l'accompagnent.
Avant de commencer
- Le serveur ne démarrera pas sans
CHINASKI_SECRET. C'est la clé de signature des sessions admin et elle protège les credentials stockés pour les services tiers ; définissez-la à une longue valeur aléatoire et ne la changez jamais à la légère. - La session admin dure 8 heures, et le cookie n'est envoyé que sur HTTPS.
Exécuter le serveur
Développement
morbo cms.plMorbo est le serveur de développement : il redémarre aux changements de code. Construisez le site statique séparément avec perl builder/build.pl.
Production (systemd, recommandé)
Le répertoire deploy/ livre une unité systemd templatisée, chinaski@.service, de sorte qu'un seul jeu de fichiers exécute un nombre quelconque d'instances du CMS sur le même hôte. Activez-en une avec le nom d'instance :
systemctl enable --now chinaski@1(1 peut être 2, prod, staging : tout ce qui est alphanumérique.) Ce que l'unité fait pour vous :
- Exécute comme un utilisateur
chinaskidédié avec le répertoire de travail/var/www/chinaski<instance>. - Définit automatiquement les chemins de base de données et de sortie à partir du nom d'instance (
CHINASKI_DB,CHINASKI_OUTPUT) ; vous n'avez normalement pas à les définir à la main. - Lit un unique fichier env verrouillé en permissions,
/etc/chinaski<instance>/env, que vous créez avant de démarrer. Il doit contenirCHINASKI_SECRETetLISTEN_URL. - Redémarre automatiquement en cas de défaillance (avec backoff), attend les requêtes en vol à l'arrêt (un drain de 330 secondes ; un build en vol est annulé plutôt qu'attendu), et applique des limites mémoire/CPU et un hardening standard pour qu'un build déchaîné ne puisse pas affamer l'hôte.
- Logue vers journald : consultez avec
journalctl -u chinaski@<instance>.
Liez le serveur au loopback. Dans cette configuration un reverse proxy (Caddy ou nginx) se tient devant et l'exemple de l'unité lie LISTEN_URL à http://127.0.0.1:3001. Le CMS ne fait confiance aux IP client transmises que depuis les connexions loopback : le lier à une interface publique permettrait aux visiteurs d'usurper leur IP et de défaire les rate limits et les lockouts de connexion.
Production (sans gestionnaire de services)
Les déploiements ponctuels s'exécutent pendant un deploy.sh <instance>, qui tire le code, installe les dépendances, vérifie la syntaxe, rebuild la sortie statique et redémarre le service. Si un build échoue, le deploy avorte par défaut pour que vous ne redémarriez jamais par-dessus une sortie cassée ; CHINASKI_ALLOW_BUILD_FAIL=1 outrepasse cela pour les deploys de code d'urgence uniquement.
Installation serveur en une commande
Sur un serveur Debian/Ubuntu vous pouvez dresser une nouvelle instance en une seule commande ; l'installateur gère les paquets, les dépendances, l'utilisateur chinaski, l'initialisation de la base de données, le fichier env et le service systemd :
curl -fsSL https://chinaski.net/install | sudo bash -s -- 1 --repo https://github.com/bigjohncobb/chinaskiRemplacez 1 par votre nom d'instance ; passez --port PORT pour outrepasser le port d'écoute par défaut.
Mode hors ligne / « EOTW » (hypnotoad, HTTP simple)
Pour les machines sans accès internet (pas de DNS, pas d'autorités de certification) hypnotoad peut être le seul serveur, servant du HTTP simple sur le port 8080 pour toujours.
- Construisez ou procurez-vous un bundle hors ligne (
bash install/make-bundle.shsur une machine connectée) et suivez l'installation du bundle. - Copiez
install/hypnotoad.confdans le répertoire de l'application. - Démarrez :
export CHINASKI_SECRET=$(openssl rand -hex 32) # once; save the value
export CHINASKI_AIRGAP=1
hypnotoad cms.plGérer une instance en marche :
hypnotoad cms.pl # start, or hot-reload a running instance
hypnotoad -s cms.pl # graceful stop
kill -USR2 $(cat hypnotoad.pid) # hot-reload without dropping connectionsDeux workers sont sûrs sur une machine de 1 Go ; montez à 4 sur un hôte de 2+ Go avec plusieurs éditeurs simultanés.
Sécurité sans proxy : hors loopback, le CMS ignore les en-têtes X-Forwarded-For et utilise l'adresse réelle de la connexion TCP, de sorte que le rate limiting et le lockout de connexion fonctionnent correctement sans configuration supplémentaire. Il n'y a pas de TLS dans ce mode ; n'envoyez pas de mots de passe sur un réseau non fiable ; utilisez un VPN ou des règles de firewall pour restreindre qui peut atteindre l'admin.
Variables d'environnement
| Variable | Rôle |
|---|---|
CHINASKI_SECRET | Requise. Clé de signature des sessions (32+ octets aléatoires) ; déverrouille aussi les credentials chiffrés que le CMS stocke |
CHINASKI_LISTEN | Adresse d'écoute du serveur ; défaut http://127.0.0.1:8080 |
CHINASKI_WORKERS | Nombre de workers du serveur ; défaut 2. Utilisez 4 sur des machines de 2+ Go avec plusieurs éditeurs simultanés |
CHINASKI_DB | Emplacement du fichier de base de données ; habituellement dérivé du nom d'instance par l'unité systemd |
CHINASKI_OUTPUT | Répertoire de sortie du build statique ; habituellement dérivé du nom d'instance |
CHINASKI_AIRGAP | Définir à 1 pour désactiver toute requête sortante : webhooks de build, webhooks de formulaire, et vérification du bot-check (la protection par case est aussi cachée) |
CHINASKI_TRUSTED_PROXIES | Adresses IP séparées par des virgules ou plages IPv4 CIDR autorisées à transmettre les IP client. Le loopback est toujours de confiance ; le défaut est loopback seulement |
CHINASKI_ALLOW_BUILD_FAIL | Définir à 1 devant deploy.sh pour autoriser les deploys de code seul quand un build échoue |
CHINASKI_FORCE_FULL | Utilisée en interne par la commande de rebuild complet ; normalement pas définie à la main |
MOJO_MODE | Définir à production dans les déploiements de production (l'unité systemd le fait) ; le mode test change le hash de mot de passe vers un coût plus rapide, propre au test |
D'autres variables existent dans le code (CHINASKI_CMS_URL, CHINASKI_DOCS_DIR, CHINASKI_RELEASE_PUBKEY, CHINASKI_SMTP_INSECURE_NOVERIFY, CHINASKI_UPDATE_MANIFEST_URL, CHINASKI_URL_BASE, CHINASKI_FORCE_PROMOTE) mais leurs réglages exactement supportés ne sont pas couverts par ces docs.
Utilitaires en ligne de commande
Tous vivent dans bin/ et lisent la même base de données que le CMS.
| Commande | Ce qu'elle fait |
|---|---|
perl bin/chinaski-setup.pl | Configuration scriptée du premier démarrage. Passez --username, --site-url et --password, ou utilisez la variable d'environnement CHINASKI_ADMIN_PASSWORD à la place, pour que le mot de passe n'apparaisse pas dans la liste des processus. Applique le minimum de 12 caractères plus les règles de complexité. |
perl bin/reset-admin.pl [username] | Remet le compte d'un administrateur en mode de configuration premier démarrage pour qu'un nouveau mot de passe puisse être choisi ; requiert un accès shell et une confirmation YES tapée. La prochaine visite du site passe par l'écran de configuration. |
perl bin/chinaski-config.pl get KEY / set KEY VALUE | Lire ou écrire n'importe quel réglage de site depuis la ligne de commande. |
perl bin/force-full-build.pl | Vide le cache de build et exécute un rebuild statique complet. |
perl bin/check-schema-sync.pl | Confirmer que la base de données correspond au schéma livré ; sortie 0 signifie en synchronisation, 1 signifie dérive. Utile après des mises à jour. |
bin/cron-build-monitor.sh | Script cron (prévu toutes les 5 minutes) qui alerte quand les builds cessent de se terminer ou que des pages disparaissent du répertoire de sortie. |