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: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: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 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 db:generate` | Régénère le client Prisma |
| `npm run deploy` | Déploiement complet sur o2switch (voir section ci-dessous) |
## Configuration ## Configuration
@@ -143,17 +145,19 @@ prisma/
1. Uploader les sources (hors `node_modules`, `.env`, `storage/`). 1. Uploader les sources (hors `node_modules`, `.env`, `storage/`).
2. Déposer `yt-dlp` et `ffmpeg` dans `BIN_DIR`. 2. Déposer `yt-dlp` et `ffmpeg` dans `BIN_DIR`.
3. Créer `.env` avec les valeurs de production. 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" : 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`. 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. Appliquer les migrations : `npm run db:migrate`. 5. En SSH, dans l'environnement Node fourni par cPanel (celui activé par le lien "Enter to the virtual environment" de cPanel) :
6. Démarrer le worker sous pm2 (en SSH, dans l'environnement Node fourni par cPanel) :
```bash ```bash
npm run worker:pm2:start npm run deploy
pm2 save # persiste la liste des process pour un `pm2 resurrect` après reboot
``` ```
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é. 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. 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 ## Tests
```bash ```bash
+3 -1
View File
@@ -19,7 +19,9 @@
"worker:pm2:status": "pm2 status ombrora-worker", "worker:pm2:status": "pm2 status ombrora-worker",
"worker:pm2:logs": "pm2 logs ombrora-worker", "worker:pm2:logs": "pm2 logs ombrora-worker",
"db:migrate": "prisma migrate dev", "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": { "jest": {
"testEnvironment": "node", "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."