feat: add Passenger-compatible server.js startup file for o2switch

Passenger runs a literal JS entry file, not the next start CLI or an
npm script, so a custom server was needed for cPanel's Node.js App
startup file field.
This commit is contained in:
2026-08-11 15:24:30 +02:00
parent 09600118a5
commit ecdfc95ff3
3 changed files with 19 additions and 3 deletions
+4 -2
View File
@@ -73,7 +73,7 @@ L'interface est accessible sur [http://localhost:3000](http://localhost:3000).
|--------|-------------|
| `npm run dev` | Serveur de développement Next.js |
| `npm run build` | Build de production |
| `npm start` | Serveur de production |
| `npm start` | Serveur de production (`server.js`, requis par Passenger sur o2switch — `next start` seul n'est pas utilisable comme fichier de démarrage) |
| `npm test` | Tests Jest |
| `npm run worker` | Worker de téléchargement (boucle de polling, exécution directe/dev) |
| `npm run worker:pm2:start` | Démarre le worker sous pm2 (`ecosystem.config.cjs`), avec auto-restart |
@@ -155,6 +155,7 @@ worker/
messages/ # Traductions (en.json, fr.json, es.json, it.json)
server.js # Serveur HTTP custom (fichier de démarrage Passenger sur o2switch)
ecosystem.config.cjs # Config pm2 du process "ombrora-worker"
prisma/
@@ -168,13 +169,14 @@ prisma/
- **Pas de compilation sur le serveur** : `yt-dlp`, `ffmpeg` et `ffprobe` doivent être des binaires précompilés pour la plateforme cible, placés dans `BIN_DIR`.
- **`node_modules` unique** : Passenger ne crée qu'un seul `node_modules` à la racine. Le projet n'a qu'un seul `package.json` (pas de sous-dossier frontend séparé à synchroniser).
- **Worker** : Passenger ne supervise que l'app Next.js. Le worker est un process à part, maintenu vivant par **pm2** (auto-restart en cas de crash), à la manière de Passenger pour l'app web.
- **Fichier de démarrage (Passenger)** : Passenger exécute directement `node <fichier>` — il ne peut pas lancer une commande CLI (`next start`) ni un script npm. Le dépôt fournit donc `server.js` à la racine (serveur HTTP custom minimal, cf. [doc Next.js](https://nextjs.org/docs/app/guides/custom-server)), qui appelle l'API programmatique de Next.js et écoute sur `process.env.PORT` (port fourni par Passenger).
### Étapes de déploiement
1. Uploader les sources (hors `node_modules`, `.env`, `storage/`).
2. Déposer `yt-dlp` et `ffmpeg` dans `BIN_DIR`.
3. Remplir `.env.prod` avec les valeurs de production (non versionné, à créer/mettre à jour manuellement sur le serveur).
4. Via cPanel > "Setup Node.js App" : créer l'app Node une première fois pour que Passenger et le nodevenv soient configurés (pointer sur le dépôt).
4. Via cPanel > "Setup Node.js App" : créer l'app Node une première fois pour que Passenger et le nodevenv soient configurés (pointer sur le dépôt). Dans le champ **"Application startup file"**, indiquer `server.js`.
5. En SSH, dans l'environnement Node fourni par cPanel (celui activé par le lien "Enter to the virtual environment" de cPanel) :
```bash
npm run deploy