feat: add npm run deploy script for o2switch deployment

Consolidates the manual deploy steps (env copy, install, prisma
generate/migrate deploy, build, pm2 startOrRestart+save) documented
in the README into a single scripts/deploy.sh run over SSH.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-11 14:55:05 +02:00
co-authored by Claude Sonnet 5
parent 2b5f68752f
commit d2e491c762
3 changed files with 40 additions and 8 deletions
+11 -7
View File
@@ -77,8 +77,10 @@ L'interface est accessible sur [http://localhost:3000](http://localhost:3000).
| `npm run worker:pm2:status` | Affiche l'état du process `ombrora-worker` |
| `npm run worker:pm2:logs` | Affiche les logs du worker géré par pm2 |
| `npm run worker:cleanup` | Expire et supprime les fichiers anciens (usage cron) |
| `npm run db:migrate` | Crée et applique les migrations Prisma |
| `npm run db:migrate` | Crée et applique les migrations Prisma (dev, interactif) |
| `npm run db:migrate:deploy` | Applique les migrations en attente (production, non interactif) |
| `npm run db:generate` | Régénère le client Prisma |
| `npm run deploy` | Déploiement complet sur o2switch (voir section ci-dessous) |
## Configuration
@@ -143,17 +145,19 @@ prisma/
1. Uploader les sources (hors `node_modules`, `.env`, `storage/`).
2. Déposer `yt-dlp` et `ffmpeg` dans `BIN_DIR`.
3. Créer `.env` avec les valeurs de production.
4. Via cPanel > "Setup Node.js App" : pointer sur le dépôt, lancer `npm install` puis `npm run build`. `pm2` est installé comme dépendance de production par ce même `npm install`.
5. Appliquer les migrations : `npm run db:migrate`.
6. Démarrer le worker sous pm2 (en SSH, dans l'environnement Node fourni par cPanel) :
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).
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 worker:pm2:start
pm2 save # persiste la liste des process pour un `pm2 resurrect` après reboot
npm run deploy
```
Ce script (`scripts/deploy.sh`) enchaîne : copie de `.env.prod` vers `.env`, `npm install`, génération du client Prisma, application des migrations en attente (`prisma migrate deploy`), `npm run build`, puis démarrage/redémarrage du worker sous pm2 (`pm2 startOrRestart` + `pm2 save`, pour persister la liste des process en vue d'un `pm2 resurrect` après reboot).
6. Redémarrer l'app Next.js via le bouton "Restart" de cPanel > "Setup Node.js App" pour que Passenger recharge le nouveau build (le script ne pilote pas Passenger, qui est géré en dehors du SSH/nodevenv).
7. Configurer un cron cPanel pour `npm run worker:cleanup` une fois par jour (suppression des fichiers expirés). pm2 gère lui-même le redémarrage du worker en cas de crash ; il n'y a donc plus besoin de cron de supervision dédié.
8. Si l'hébergeur redémarre le serveur, relancer `pm2 resurrect` (ou `npm run worker:pm2:start` si la sauvegarde `pm2 save` n'a pas été faite) pour reprendre le worker.
Pour les déploiements suivants, seule l'étape 5 (`npm run deploy`) et l'étape 6 (redémarrage Passenger) sont nécessaires.
## Tests
```bash
+3 -1
View File
@@ -19,7 +19,9 @@
"worker:pm2:status": "pm2 status ombrora-worker",
"worker:pm2:logs": "pm2 logs ombrora-worker",
"db:migrate": "prisma migrate dev",
"db:generate": "prisma generate"
"db:migrate:deploy": "prisma migrate deploy",
"db:generate": "prisma generate",
"deploy": "bash scripts/deploy.sh"
},
"jest": {
"testEnvironment": "node",
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$0")/.."
echo "==> Copie de .env.prod vers .env"
cp .env.prod .env
echo "==> Installation des dependances"
npm install
echo "==> Generation du client Prisma"
npm run db:generate
echo "==> Application des migrations Prisma (production)"
npm run db:migrate:deploy
echo "==> Build de production"
npm run build
echo "==> Demarrage/redemarrage du worker sous pm2"
pm2 startOrRestart ecosystem.config.cjs
pm2 save
echo "==> Deploiement termine."
echo "Pensez a redemarrer l'app Next.js via cPanel > Setup Node.js App si Passenger ne recharge pas automatiquement le nouveau build."