Déploiement
Variables d'environnement, mise en production et hébergement.
Ghost's Sanctuary est deux processus : le bot Python (qui porte l'API et la base) et le site Next.js. Ils partagent un jeton, et rien d'autre.
Vérifier avant de déployer
npm run doctor # vérifie tout, y compris la validité des secrets
npm run doctor:full # + build + testsLe doctor ne se contente pas de constater qu'une variable est remplie : il valide vos identifiants Discord par un véritable échange client_credentials, et vos identifiants Roblox en présentant un code volontairement invalide. Un ✓ signifie qu'une vérification a réussi.
Variables du bot
| Variable | Rôle | Sans elle |
|---|---|---|
| DISCORD_TOKEN | Jeton du bot | Le bot ne démarre pas |
| DISCORD_CLIENT_ID | Identifiant d'application | Déduit du jeton |
| GS_API_TOKEN | Jeton partagé avec le site | L'API ne démarre pas |
| GS_DATABASE_PATH | Chemin de la base SQLite | data/ghosts_sanctuary.db |
| APP_URL | Adresse du site | /verify bascule sur la vérification par code |
| SYNC_COMMANDS | Force la resynchro des commandes | Resynchro seulement si l'arbre a changé |
Variables du site
| Variable | Rôle | Sans elle |
|---|---|---|
| APP_URL | Base de toutes les URL absolues | Repli sur localhost:3000 |
| AUTH_SECRET | Signature des sessions (32+ car.) | Aucune connexion possible |
| DISCORD_CLIENT_SECRET | OAuth Discord | Personne ne peut se connecter |
| BOT_API_TOKEN | Doit égaler GS_API_TOKEN | Aucune donnée réelle affichée |
| ROBLOX_CLIENT_ID / SECRET | OAuth Roblox | « Configuration requise » sur /verify |
| SUPPORT_AGENT_IDS | Agents du support | Personne ne traite les demandes |
Aucun secret dans le navigateur
Seules les variables préfixées NEXT_PUBLIC_ atteignent le navigateur, et aucune ne contient de secret. Ne préfixez jamais une clé d'API ainsi : elle deviendrait lisible par tous les visiteurs.
De localhost à la production
Trois valeurs changent, et rien d'autre : APP_URL, DISCORD_REDIRECT_URI et ROBLOX_REDIRECT_URI. Aucune URL n'est codée en dur dans le projet. Déclarez ensuite les nouvelles URL de redirection chez Discord et chez Roblox.
Sauvegardes
npm run backupPourquoi pas une simple copie de fichier
La base tourne en mode WAL : une partie des données vit dans le journal, pas encore dans le fichier principal. Copier le .db pendant que le bot écrit produit une sauvegarde amputée. Le script utilise l'API de sauvegarde de SQLite, puis relit la copie pour prouver qu'elle est exploitable.
Hébergement
L'intégration au panel Pterodactyl (YorkHost) est entièrement facultative : le bot et le site n'en dépendent pas. Renseignée, elle permet de lire l'état du serveur et de le redémarrer depuis le site. Le chemin est toujours navigateur → route Next.js → panel ; la clé ne part jamais dans le navigateur.
L'API interne reste locale
Elle écoute sur 127.0.0.1. Ne l'exposez pas sur Internet : elle fait confiance à son appelant, c'est justement pourquoi elle reste sur la boucle locale.