diff --git a/.gitignore b/.gitignore index a39edfe..b5846b5 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ WebNationsGlory_ServeurBuild_Red/ # Fichiers de configuration sensibles .env +shared.env # Logs *.log diff --git a/SHARED_ENV.md b/SHARED_ENV.md new file mode 100644 index 0000000..8ffc736 --- /dev/null +++ b/SHARED_ENV.md @@ -0,0 +1,163 @@ +# Configuration Centralisée - shared.env + +## Vue d'ensemble + +À partir de maintenant, la configuration commune aux **deux services** (Minecraft + Web Admin) est centralisée dans un seul fichier au niveau du **dossier parent** : `shared.env`. + +Cela te permet de modifier **une seule fois** : +- ✅ `RCON_PASSWORD` → s'applique automatiquement aux 2 services +- ✅ `SESSION_SECRET` → s'applique à l'app web +- ✅ Tous les ports, mémoire, etc. + +## Hiérarchie de configuration + +``` +Projet/Serveur NationsGlory/ +├── shared.env ← Configuration CENTRALISÉE (priorité basse) +├── shared.env.example ← Template (pour documenter) +│ +├── NationsGlory_ServeurBuild_Red/ +│ ├── .env ← Surcharge locale (priorité haute) +│ ├── .env.example +│ └── docker-compose.yml ← Lit: shared.env PUIS .env +│ +└── WebNationsGlory_ServeurBuild_Red/ + ├── .env ← Surcharge locale (priorité haute) + ├── .env.example + └── docker-compose.yml ← Lit: shared.env PUIS .env +``` + +## Ordre de chargement + +Docker Compose charge les variables dans cet ordre (**les dernières écrasent les premières**) : + +1. **`../shared.env`** (parent) - Configuration commune +2. **`.env`** (local) - Surcharges spécifiques au service + +Cela signifie : si une variable est définie dans les DEUX fichiers, **la version locale gagne**. + +## Utilisation + +### Première installation + +1. **Copie le template** : + ```bash + cd "Projet/Serveur NationsGlory" + cp shared.env.example shared.env + ``` + +2. **Modifie les valeurs sensibles** (RCON_PASSWORD, SESSION_SECRET) : + ```bash + nano shared.env + ``` + +3. **Les deux services utiliseront automatiquement ces valeurs** + +### Modification des paramètres globaux + +Pour changer quelque chose qui concerne **les deux services** : + +```bash +# Depuis le dossier parent +nano shared.env + +# Puis redémarre les conteneurs +docker-compose -f NationsGlory_ServeurBuild_Red/docker-compose.yml down +docker-compose -f WebNationsGlory_ServeurBuild_Red/docker-compose.yml down +./deploy.sh +``` + +### Configuration spécifique à un service + +Si tu veux un paramètre **différent** dans un seul service, ajoute-le dans son `.env` local : + +**Exemple** : Si tu veux une `SESSION_SECRET` différente dans WebNationsGlory : + +```bash +# Dans WebNationsGlory_ServeurBuild_Red/.env +SESSION_SECRET=mon-secret-specifique-au-web +``` + +Cela écrasera la valeur du `shared.env` **uniquement pour ce service**. + +## Variables dans shared.env + +### Sécurité +- `RCON_PASSWORD` → Mot de passe RCON (utilisé par Minecraft + Web Admin) +- `SESSION_SECRET` → Clé de session pour l'app web + +### Ports +- `SERVER_PORT` → Port Minecraft (25565) +- `RCON_PORT` → Port RCON (25575) +- `PORT` → Port app web (4001) + +### Minecraft +- `MEMORY` → RAM allouée (2G, 4G, etc.) +- `INIT_MEMORY` → RAM initiale (1G) +- `ONLINE_MODE` → Mode authentification Mojang (true/false) + +### Environnement +- `NODE_ENV` → production/development + +## Génération sécurisée (Production) + +Pour générer un `SESSION_SECRET` sécurisé en production : + +```bash +# Linux/Mac +openssl rand -hex 32 + +# Windows (PowerShell) +[Convert]::ToHexString((1..32 | ForEach-Object { Get-Random -Maximum 256 })) + +# Node.js (universel) +node -e "console.log(require('crypto').randomBytes(32).toString('hex'))" +``` + +Puis colle la valeur dans `shared.env` : + +```bash +SESSION_SECRET=a1b2c3d4e5f6... (votre clé générée) +``` + +## .gitignore + +✅ `shared.env` est dans `.gitignore` → **NE SERA JAMAIS** envoyé au repo Git +✅ `shared.env.example` est versionné → Permet aux autres de savoir quelles variables existent + +## Dépannage + +### "Cannot find shared.env" au démarrage + +Assure-toi d'avoir créé le fichier : + +```bash +cd "Projet/Serveur NationsGlory" +cp shared.env.example shared.env +``` + +### Le changement ne s'applique pas après modification + +Docker utilise un cache. Redémarre complètement : + +```bash +docker-compose -f NationsGlory_ServeurBuild_Red/docker-compose.yml down +docker-compose -f WebNationsGlory_ServeurBuild_Red/docker-compose.yml down +docker system prune -f +./deploy.sh +``` + +## Exemple : Changer le RCON_PASSWORD + +Avant (2 fichiers à modifier) : +``` +NationsGlory_ServeurBuild_Red/.env → RCON_PASSWORD=ancien_mdp +WebNationsGlory_ServeurBuild_Red/.env → RCON_PASSWORD=ancien_mdp +``` + +Après (1 fichier à modifier) : +``` +shared.env → RCON_PASSWORD=nouveau_mdp +``` + +Les deux services récupèrent automatiquement la nouvelle valeur ! 🎉 diff --git a/repos.conf b/repos.conf index e5e10fc..bc64915 100644 --- a/repos.conf +++ b/repos.conf @@ -12,4 +12,4 @@ MC_SERVER_REPO="git@192.168.1.195:/path/to/NationsGlory_ServeurBuild_Red.git" WEB_ADMIN_REPO="git@192.168.1.195:/path/to/WebNationsGlory_ServeurBuild_Red.git" # Branche par défaut -DEFAULT_BRANCH="main" +DEFAULT_BRANCH="master" diff --git a/shared.env.example b/shared.env.example new file mode 100644 index 0000000..3bc585b --- /dev/null +++ b/shared.env.example @@ -0,0 +1,41 @@ +# ==================================== +# Configuration Partagée NationsGlory +# ==================================== +# Ce fichier centralise la configuration commune aux 2 services +# Copiez ce fichier vers shared.env et modifiez les valeurs + +# ==================================== +# Sécurité & Authentification +# ==================================== +# Mot de passe RCON (DOIT ÊTRE IDENTIQUE dans les 2 .env!) +RCON_PASSWORD=minecraft + +# Session secret pour l'app web (généré automatiquement en production) +SESSION_SECRET=your-super-secret-key-change-this-in-production + +# ==================================== +# Ports réseau +# ==================================== +# Port du serveur Minecraft +SERVER_PORT=25565 + +# Port RCON du serveur Minecraft +RCON_PORT=25575 + +# Port de l'application web admin +PORT=4001 + +# ==================================== +# Paramètres Minecraft +# ==================================== +# Mémoire allouée au serveur +MEMORY=2G +INIT_MEMORY=1G + +# Mode online (authentification Mojang) +ONLINE_MODE=false + +# ==================================== +# Environnement +# ==================================== +NODE_ENV=production