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:
@@ -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
@@ -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",
|
||||||
|
|||||||
@@ -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."
|
||||||
Reference in New Issue
Block a user