feat: migrate application port from 3000 to 4001 and fix circular dependencies

- Change default port to 4001 across all configuration files (server.js, docker-compose.yml, .env, Dockerfile)
- Update frontend API URL to use new port 4001
- Fix circular dependency issues in route files by using process.env.SERVER_DIR instead of importing from server.js
- Apply to all routes: auth.js, backup.js, logs.js, players.js, rcon.js, server.js, whitelist.js
- Fix environment variable loading in start.sh to properly handle paths with spaces
- Quote SERVER_DIR path in .env to preserve spaces in directory paths
- Update all documentation references from port 3000 to 4001 (README, QUICKSTART, CONFIGURATION, INDEX)
- Remove debug console.log statements from auth.js
- Remove test utility file test-ops.js

Fixes: Port conflict issues, circular dependency warnings, environment variable parsing
This commit is contained in:
y.campiontrebouta@innotexnas.ovh
2026-02-04 19:27:00 +01:00
parent abb51904d7
commit 4e12afe105
18 changed files with 1427 additions and 25 deletions

View File

@@ -81,8 +81,7 @@ Ouvrez `backend/.env` avec votre éditeur préféré:
# Mode d'exécution
NODE_ENV=development
# Port de l'application (8080, 3000, etc.)
PORT=3000
PORT=4001
# Clé de session (générer une clé aléatoire forte)
SESSION_SECRET=abc123def456ghi789jkl012mno345pqr
@@ -113,7 +112,7 @@ chmod +x start.sh
Vous devriez voir:
```
🚀 Backend Admin NationsGlory démarré sur http://localhost:3000
🚀 Backend Admin NationsGlory démarré sur http://localhost:4001
📁 Répertoire du serveur: /home/innotex/Documents/Projet/Serveur NationsGlory/NationsGlory_ServeurBuild_Red
```
@@ -193,7 +192,7 @@ Si ça marche, RCON est correctement configuré! ✓
2. Attendez que le serveur se redémarre ou recharge les OPs
3. Réessayez l'enregistrement
### Problème: "Impossible de se connecter à localhost:3000"
### Problème: "Impossible de se connecter à localhost:4001"
**Cause**: L'application n'est pas lancée ou sur le mauvais port

View File

@@ -9,6 +9,6 @@ RUN npm ci --only=production
COPY backend/src ./src
COPY frontend ./frontend
EXPOSE 3000
EXPOSE 4001
CMD ["node", "src/server.js"]

View File

@@ -66,7 +66,7 @@ WebNationsGlory_ServeurBuild_Red/
3. Éditer les fichiers .env
### Pour Utiliser l'Application
1. Ouvrir http://localhost:3000
1. Ouvrir http://localhost:4001
2. Créer le compte admin
3. Utiliser les onglets du dashboard
@@ -117,7 +117,7 @@ nano backend/.env
./start.sh
# 5. Accès
# Ouvrir: http://localhost:3000
# Ouvrir: http://localhost:4001
```
## 📚 Fichiers Importants à Connaître

View File

@@ -37,7 +37,7 @@ nano backend/.env
Vérifiez:
```env
PORT=3000
PORT=4001
SERVER_DIR=/home/innotex/Documents/Projet/Serveur NationsGlory/NationsGlory_ServeurBuild_Red
RCON_HOST=localhost
RCON_PORT=25575
@@ -51,12 +51,12 @@ RCON_PORT=25575
Vous devriez voir:
```
🚀 Backend Admin NationsGlory démarré sur http://localhost:3000
🚀 Backend Admin NationsGlory démarré sur http://localhost:4001
```
### 5⃣ Accès (10 secondes)
Ouvrez: **http://localhost:3000**
Ouvrez: **http://localhost:4001**
## 👤 Premier Compte

View File

@@ -81,7 +81,7 @@ chmod +x install.sh
Éditer `backend/.env`:
```env
NODE_ENV=development
PORT=3000
PORT=4001
SESSION_SECRET=changez-cette-cle-en-production
SERVER_DIR=/path/to/NationsGlory_ServeurBuild_Red
RCON_HOST=localhost
@@ -95,11 +95,11 @@ chmod +x start.sh
./start.sh
```
L'interface est maintenant accessible sur: **http://localhost:3000**
L'interface est maintenant accessible sur: **http://localhost:4001**
## 🎯 Premier Démarrage
1. Ouvrez http://localhost:3000
1. Ouvrez http://localhost:4001
2. Créez le compte admin (doit être un OP du serveur)
3. Connectez-vous
4. Explorez l'interface!

9
backend/data/users.json Normal file
View File

@@ -0,0 +1,9 @@
[
{
"id": "1770229357567",
"username": "admin",
"mcUsername": "anakine22",
"password": "$2a$10$Ie5mXaPcz.zrQ.bPFTpGbuWJ3rqPCxU8lGlcHvnJzxigkIufSaG7K",
"createdAt": "2026-02-04T18:22:37.567Z"
}
]

1381
backend/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -2,10 +2,10 @@ const express = require('express');
const bcrypt = require('bcryptjs');
const fs = require('fs-extra');
const path = require('path');
const { SERVER_DIR } = require('../server');
const router = express.Router();
const USERS_FILE = path.join(__dirname, '../../data/users.json');
const SERVER_DIR = process.env.SERVER_DIR || '/home/innotex/Documents/Projet/Serveur NationsGlory/NationsGlory_ServeurBuild_Red';
async function initUsersFile() {
await fs.ensureDir(path.dirname(USERS_FILE));

View File

@@ -2,9 +2,9 @@ const express = require('express');
const fs = require('fs-extra');
const path = require('path');
const { exec } = require('child_process');
const { SERVER_DIR } = require('../server');
const router = express.Router();
const SERVER_DIR = process.env.SERVER_DIR || '/home/innotex/Documents/Projet/Serveur NationsGlory/NationsGlory_ServeurBuild_Red';
function isAuthenticated(req, res, next) {
if (req.session.user) {

View File

@@ -1,9 +1,9 @@
const express = require('express');
const fs = require('fs-extra');
const path = require('path');
const { SERVER_DIR } = require('../server');
const router = express.Router();
const SERVER_DIR = process.env.SERVER_DIR || '/home/innotex/Documents/Projet/Serveur NationsGlory/NationsGlory_ServeurBuild_Red';
function isAuthenticated(req, res, next) {
if (req.session.user) {

View File

@@ -1,9 +1,9 @@
const express = require('express');
const fs = require('fs-extra');
const path = require('path');
const { SERVER_DIR } = require('../server');
const router = express.Router();
const SERVER_DIR = process.env.SERVER_DIR || '/home/innotex/Documents/Projet/Serveur NationsGlory/NationsGlory_ServeurBuild_Red';
function isAuthenticated(req, res, next) {
if (req.session.user) {

View File

@@ -2,9 +2,9 @@ const express = require('express');
const RconClient = require('../utils/rcon');
const fs = require('fs-extra');
const path = require('path');
const { SERVER_DIR } = require('../server');
const router = express.Router();
const SERVER_DIR = process.env.SERVER_DIR || '/home/innotex/Documents/Projet/Serveur NationsGlory/NationsGlory_ServeurBuild_Red';
function isAuthenticated(req, res, next) {
if (req.session.user) {

View File

@@ -1,9 +1,9 @@
const express = require('express');
const fs = require('fs-extra');
const path = require('path');
const { SERVER_DIR } = require('../server');
const router = express.Router();
const SERVER_DIR = process.env.SERVER_DIR || '/home/innotex/Documents/Projet/Serveur NationsGlory/NationsGlory_ServeurBuild_Red';
function isAuthenticated(req, res, next) {
if (req.session.user) {

View File

@@ -1,9 +1,9 @@
const express = require('express');
const fs = require('fs-extra');
const path = require('path');
const { SERVER_DIR } = require('../server');
const router = express.Router();
const SERVER_DIR = process.env.SERVER_DIR || '/home/innotex/Documents/Projet/Serveur NationsGlory/NationsGlory_ServeurBuild_Red';
function isAuthenticated(req, res, next) {
if (req.session.user) {

View File

@@ -54,11 +54,24 @@ app.get('/api/health', (req, res) => {
res.json({ status: 'ok', timestamp: new Date() });
});
// Erreur 404
app.use((req, res) => {
// Servir les fichiers statiques du frontend
app.use(express.static(path.join(__dirname, '../../frontend/public')));
// Route pour l'index
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, '../../frontend/public/index.html'));
});
// Erreur 404 pour les routes API non trouvées
app.use('/api/*', (req, res) => {
res.status(404).json({ error: 'Route non trouvée' });
});
// Pour toutes les autres routes, servir index.html (SPA support)
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, '../../frontend/public/index.html'));
});
// Error handler
app.use((err, req, res, next) => {
console.error(err);

View File

@@ -1,5 +1,5 @@
// Configuration API
const API_URL = 'http://localhost:3000/api';
const API_URL = 'http://localhost:4001/api';
// State
let currentUser = null;

View File

@@ -33,7 +33,7 @@ echo ""
echo "📝 Prochaines étapes:"
echo "1. Modifiez backend/.env avec la bonne configuration"
echo "2. Lancez le serveur: cd backend && npm start"
echo "3. Accédez à l'interface: http://localhost:3000"
echo "3. Accédez à l'interface: http://localhost:4001"
echo ""
echo " IMPORTANT: Activez RCON dans le server.properties du serveur MC:"
echo " - enable-rcon=true"

View File

@@ -26,7 +26,7 @@ if [ ! -f "backend/.env" ]; then
fi
# Charger les variables d'environnement
export $(cat backend/.env | grep -v '^#' | xargs)
source backend/.env
echo -e "${GREEN}✓ Variables d'environnement chargées${NC}"
echo " - Port: $PORT"