server: config PM2 (lancement du serveur dans le nix-shell)
This commit is contained in:
@@ -43,6 +43,7 @@ Pour régénérer le monde (ex. changer de `level-type`), stoppe le serveur et s
|
|||||||
| `server.properties` | Config plug-and-play (survie, normal, 20 joueurs) |
|
| `server.properties` | Config plug-and-play (survie, normal, 20 joueurs) |
|
||||||
| `eula.txt` | Passer à `eula=true` avant de lancer |
|
| `eula.txt` | Passer à `eula=true` avant de lancer |
|
||||||
| `start.sh` / `start.bat` | Scripts de lancement (4 Go RAM, `nogui`) |
|
| `start.sh` / `start.bat` | Scripts de lancement (4 Go RAM, `nogui`) |
|
||||||
|
| `ecosystem.config.cjs` | Config PM2 (démarre le serveur dans le nix-shell, Java 25) |
|
||||||
|
|
||||||
## Mods
|
## Mods
|
||||||
|
|
||||||
@@ -62,3 +63,30 @@ Pour régénérer le monde (ex. changer de `level-type`), stoppe le serveur et s
|
|||||||
- `server-ip=10.7.0.2` : le serveur n'écoute **que** sur l'interface portant cette IP (VPN).
|
- `server-ip=10.7.0.2` : le serveur n'écoute **que** sur l'interface portant cette IP (VPN).
|
||||||
Laisser vide = écouter sur toutes les interfaces (`0.0.0.0`).
|
Laisser vide = écouter sur toutes les interfaces (`0.0.0.0`).
|
||||||
- Ouvre le port 25565/TCP (box/pare-feu) et pointe `mcpv.ihorizon.org` vers l'IP publique.
|
- Ouvre le port 25565/TCP (box/pare-feu) et pointe `mcpv.ihorizon.org` vers l'IP publique.
|
||||||
|
|
||||||
|
## PM2 (daemon)
|
||||||
|
|
||||||
|
`ecosystem.config.cjs` lance le serveur **dans le nix-shell du repo** (`shell.nix` → `jdk25`),
|
||||||
|
sans dépendre du Java du système. Les chemins sont résolus depuis le fichier (`__dirname`) :
|
||||||
|
`server/` et la racine du repo.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /srv/mc/server
|
||||||
|
pm2 start ecosystem.config.cjs
|
||||||
|
pm2 logs surviepote-mc
|
||||||
|
pm2 restart surviepote-mc
|
||||||
|
pm2 stop surviepote-mc
|
||||||
|
|
||||||
|
pm2 save # mémorise la liste des process
|
||||||
|
sudo pm2 startup systemd -u anais --hp /home/anais # relance au boot
|
||||||
|
```
|
||||||
|
|
||||||
|
Équivalent manuel de la commande lancée par PM2 :
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd /srv/mc/server
|
||||||
|
nix-shell /srv/mc --run "bash /srv/mc/server/start.sh"
|
||||||
|
```
|
||||||
|
|
||||||
|
> PM2 ne relaie pas la console interactive : utilise `pm2 logs` pour la sortie et
|
||||||
|
> `pm2 sendSignal`/`pm2 stop` (SIGINT → sauvegarde propre via le shutdown hook Java).
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
/**
|
||||||
|
* PM2 — SurviePote serveur Minecraft (MC 26.3 / Fabric 0.20.0 / Java 25).
|
||||||
|
*
|
||||||
|
* Démarre le serveur DANS le shell Nix du repo (shell.nix => jdk25), sans
|
||||||
|
* dépendre du Java du système.
|
||||||
|
*
|
||||||
|
* cd /srv/mc/server
|
||||||
|
* pm2 start ecosystem.config.cjs
|
||||||
|
* pm2 logs surviepote-mc
|
||||||
|
* pm2 restart surviepote-mc
|
||||||
|
* pm2 stop surviepote-mc
|
||||||
|
* pm2 save
|
||||||
|
*
|
||||||
|
* Les chemins sont résolus depuis ce fichier (__dirname) :
|
||||||
|
* SERVER_DIR = /srv/mc/server
|
||||||
|
* ROOT_DIR = /srv/mc
|
||||||
|
* donc le fichier marche quel que soit l'endroit d'où pm2 est lancé.
|
||||||
|
*/
|
||||||
|
const path = require('path')
|
||||||
|
|
||||||
|
const SERVER_DIR = __dirname
|
||||||
|
const ROOT_DIR = path.resolve(__dirname, '..')
|
||||||
|
const START_SCRIPT = path.join(SERVER_DIR, 'start.sh')
|
||||||
|
|
||||||
|
// cd /srv/mc/server && nix-shell /srv/mc --run "bash /srv/mc/server/start.sh"
|
||||||
|
const command = [
|
||||||
|
`cd ${JSON.stringify(SERVER_DIR)}`,
|
||||||
|
`exec nix-shell ${JSON.stringify(ROOT_DIR)} --run ${JSON.stringify(`bash ${START_SCRIPT}`)}`
|
||||||
|
].join(' && ')
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
apps: [
|
||||||
|
{
|
||||||
|
name: 'surviepote-mc',
|
||||||
|
cwd: SERVER_DIR,
|
||||||
|
|
||||||
|
// On exécute `bash -lc "<commande>"` directement (pas un script Node).
|
||||||
|
script: 'bash',
|
||||||
|
args: ['-lc', command],
|
||||||
|
interpreter: 'none',
|
||||||
|
|
||||||
|
autorestart: true,
|
||||||
|
max_restarts: 10,
|
||||||
|
restart_delay: 5000,
|
||||||
|
min_uptime: '60s',
|
||||||
|
kill_timeout: 30000,
|
||||||
|
treekill: true, // SIGINT/SIGKILL propagés jusqu'à java (arrêt propre)
|
||||||
|
watch: false,
|
||||||
|
|
||||||
|
env: {
|
||||||
|
// On est déjà dans nix-shell : empêche start.sh de s'y relancer.
|
||||||
|
SURVIEPOTE_NIX: '1'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user