From d2e491c76213f6f1d6a5d4673f9563b6682b0e13 Mon Sep 17 00:00:00 2001 From: Anthony GAEREMYNCK <1@anthony.sh> Date: Tue, 11 Aug 2026 14:55:05 +0200 Subject: [PATCH] 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 --- README.md | 18 +++++++++++------- package.json | 4 +++- scripts/deploy.sh | 26 ++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 scripts/deploy.sh diff --git a/README.md b/README.md index 962ebfc..1de697f 100644 --- a/README.md +++ b/README.md @@ -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 diff --git a/package.json b/package.json index bafbf21..f24d220 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/scripts/deploy.sh b/scripts/deploy.sh new file mode 100644 index 0000000..9a8c258 --- /dev/null +++ b/scripts/deploy.sh @@ -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."