Initial local backup snapshot
This commit is contained in:
commit
acd9e14ba5
367 changed files with 118038 additions and 0 deletions
42
deployments/README.md
Normal file
42
deployments/README.md
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
## Déploiement VPS
|
||||
|
||||
Le portail utilise désormais une procédure unique et documentée pour éviter les dérives entre production et préproduction.
|
||||
|
||||
### Commandes officielles
|
||||
|
||||
```bash
|
||||
./scripts/deploy-vps.sh preprod
|
||||
./scripts/deploy-vps.sh prod
|
||||
```
|
||||
|
||||
### Ce que fait le script
|
||||
|
||||
1. vérifie l'accès SSH au VPS
|
||||
2. lance `corepack pnpm check`
|
||||
3. lance `corepack pnpm build`
|
||||
4. synchronise les fichiers utiles vers le bon dossier distant
|
||||
5. relance l'application avec la bonne commande Docker Compose
|
||||
6. vérifie la réponse HTTP finale
|
||||
|
||||
### Fichiers d'environnement
|
||||
|
||||
- production :
|
||||
- dossier applicatif : `/home/ubuntu/portail-associations`
|
||||
- fichier d'environnement : `/home/ubuntu/portail-associations/.env`
|
||||
|
||||
- préproduction :
|
||||
- dossier applicatif : `/home/ubuntu/portail-associations-preprod`
|
||||
- fichier d'environnement Compose : `/home/ubuntu/portail-associations-preprod/deployments/preprod/.env`
|
||||
|
||||
### Important
|
||||
|
||||
- ne pas lancer la préprod sans `--env-file .env`
|
||||
- ne pas synchroniser automatiquement les fichiers `.env`
|
||||
- garder prod et préprod sur leurs commandes Docker respectives
|
||||
|
||||
### Références
|
||||
|
||||
- production : [deployments/prod/README.md](/Users/selecta/Documents/portail-associations/deployments/prod/README.md)
|
||||
- préproduction : [deployments/preprod/README.md](/Users/selecta/Documents/portail-associations/deployments/preprod/README.md)
|
||||
- cartographie : [docs/openmaptiles-autonome-premium.md](/Users/selecta/Documents/portail-associations/docs/openmaptiles-autonome-premium.md)
|
||||
- runtime / maintenance : [docs/runtime-health-maintenance.md](/Users/selecta/Documents/portail-associations/docs/runtime-health-maintenance.md)
|
||||
33
deployments/preprod/.env.example
Normal file
33
deployments/preprod/.env.example
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
# Sécurité / session
|
||||
JWT_SECRET=local-dev-change-me
|
||||
|
||||
# Compte administrateur principal
|
||||
ADMIN_EMAIL=selectakeke973@gmail.com
|
||||
|
||||
# Bootstrap / amorçage admin
|
||||
BOOTSTRAP_ADMIN_EMAIL=selectakeke973@gmail.com
|
||||
BOOTSTRAP_ADMIN_PASSWORD=totototo
|
||||
BOOTSTRAP_ADMIN_NAME=selectakeke973
|
||||
BOOTSTRAP_USERS=[{"email":"william.meri@gmail.com","password":"totototo","name":"william.meri","role":"admin"}]
|
||||
|
||||
# URL d'application
|
||||
APP_BASE_URL=https://preprod.portail-association973.com
|
||||
|
||||
# SMTP / emails
|
||||
SMTP_PROVIDER=
|
||||
SMTP_HOST=
|
||||
SMTP_PORT=
|
||||
SMTP_USER=
|
||||
SMTP_PASS=
|
||||
SMTP_FROM=
|
||||
SMTP_SECURE=
|
||||
SMTP_REQUIRE_TLS=
|
||||
|
||||
# Intégrations métier
|
||||
ENTREPRISE_API_TOKEN=
|
||||
|
||||
# OAuth
|
||||
GOOGLE_CLIENT_ID=
|
||||
GOOGLE_CLIENT_SECRET=
|
||||
FACEBOOK_APP_ID=
|
||||
FACEBOOK_APP_SECRET=
|
||||
67
deployments/preprod/README.md
Normal file
67
deployments/preprod/README.md
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
## Préproduction portail-associations
|
||||
|
||||
Cette préproduction tourne sur le même VPS que la production, mais avec :
|
||||
|
||||
- un dossier séparé : `/home/ubuntu/portail-associations-preprod`
|
||||
- une application séparée : port `3001`
|
||||
- une base MySQL séparée : port `3308`
|
||||
- des volumes Docker séparés
|
||||
|
||||
URL préproduction recommandée :
|
||||
|
||||
- `https://preprod.portail-association973.com`
|
||||
|
||||
### Déploiement
|
||||
|
||||
Commande recommandée depuis le poste local :
|
||||
|
||||
```bash
|
||||
./scripts/deploy-vps.sh preprod
|
||||
```
|
||||
|
||||
Si un déploiement manuel est nécessaire :
|
||||
|
||||
1. Copier le projet dans `/home/ubuntu/portail-associations-preprod`
|
||||
2. Copier `deployments/preprod/.env.example` en `.env`
|
||||
3. Renseigner d'abord les variables d'accès et d'amorçage admin :
|
||||
|
||||
- `JWT_SECRET`
|
||||
- `ADMIN_EMAIL`
|
||||
- `BOOTSTRAP_ADMIN_EMAIL`
|
||||
- `BOOTSTRAP_ADMIN_PASSWORD`
|
||||
- `BOOTSTRAP_ADMIN_NAME`
|
||||
- `BOOTSTRAP_USERS`
|
||||
|
||||
4. Ajuster ensuite si besoin les secrets OAuth, SMTP et `APP_BASE_URL`
|
||||
5. Lancer :
|
||||
|
||||
```bash
|
||||
docker compose --env-file .env -f deployments/preprod/docker-compose.yml up -d --build
|
||||
```
|
||||
|
||||
### Variables attendues en préproduction
|
||||
|
||||
Le fichier `.env` de préproduction doit au minimum couvrir les familles suivantes :
|
||||
|
||||
- sécurité et session :
|
||||
- `JWT_SECRET`
|
||||
- compte administrateur principal :
|
||||
- `ADMIN_EMAIL`
|
||||
- amorçage bootstrap / comptes initiaux :
|
||||
- `BOOTSTRAP_ADMIN_EMAIL`
|
||||
- `BOOTSTRAP_ADMIN_PASSWORD`
|
||||
- `BOOTSTRAP_ADMIN_NAME`
|
||||
- `BOOTSTRAP_USERS`
|
||||
- URL et intégrations :
|
||||
- `APP_BASE_URL`
|
||||
- variables OAuth : `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET`, `FACEBOOK_APP_ID`, `FACEBOOK_APP_SECRET`
|
||||
- variables SMTP : `SMTP_PROVIDER`, `SMTP_HOST`, `SMTP_PORT`, `SMTP_USER`, `SMTP_PASS`, `SMTP_FROM`, `SMTP_SECURE`, `SMTP_REQUIRE_TLS`
|
||||
- `ENTREPRISE_API_TOKEN`
|
||||
|
||||
Le fichier modèle fourni pour cette cible reste :
|
||||
|
||||
- `deployments/preprod/.env.example`
|
||||
|
||||
### Base de données
|
||||
|
||||
La base `portail_associations_preprod` doit être initialisée puis alimentée par un dump de la production si l'on veut tester avec des données réalistes.
|
||||
72
deployments/preprod/docker-compose.yml
Normal file
72
deployments/preprod/docker-compose.yml
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
services:
|
||||
app:
|
||||
build:
|
||||
context: ../..
|
||||
container_name: portail-associations-preprod-app
|
||||
init: true
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
NODE_ENV: production
|
||||
PORT: 3000
|
||||
DATABASE_URL: mysql://portail_preprod:portail_preprod_password@db:3306/portail_associations_preprod
|
||||
JWT_SECRET: ${JWT_SECRET}
|
||||
ADMIN_EMAIL: ${ADMIN_EMAIL}
|
||||
BOOTSTRAP_ADMIN_EMAIL: ${BOOTSTRAP_ADMIN_EMAIL}
|
||||
BOOTSTRAP_ADMIN_PASSWORD: ${BOOTSTRAP_ADMIN_PASSWORD}
|
||||
BOOTSTRAP_ADMIN_NAME: ${BOOTSTRAP_ADMIN_NAME}
|
||||
BOOTSTRAP_USERS: ${BOOTSTRAP_USERS}
|
||||
SMTP_PROVIDER: ${SMTP_PROVIDER:-}
|
||||
SMTP_HOST: ${SMTP_HOST:-}
|
||||
SMTP_PORT: ${SMTP_PORT:-}
|
||||
SMTP_USER: ${SMTP_USER:-}
|
||||
SMTP_PASS: ${SMTP_PASS:-}
|
||||
SMTP_FROM: ${SMTP_FROM:-}
|
||||
SMTP_SECURE: ${SMTP_SECURE:-}
|
||||
SMTP_REQUIRE_TLS: ${SMTP_REQUIRE_TLS:-}
|
||||
APP_BASE_URL: ${APP_BASE_URL}
|
||||
APP_READY_DELAY_MS: ${APP_READY_DELAY_MS:-8000}
|
||||
GRACEFUL_SHUTDOWN_TIMEOUT_MS: ${GRACEFUL_SHUTDOWN_TIMEOUT_MS:-20000}
|
||||
MAINTENANCE_FLAG_PATH: ${MAINTENANCE_FLAG_PATH:-/app/uploads/system/maintenance.flag}
|
||||
ENTREPRISE_API_TOKEN: ${ENTREPRISE_API_TOKEN:-}
|
||||
GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID:-}
|
||||
GOOGLE_CLIENT_SECRET: ${GOOGLE_CLIENT_SECRET:-}
|
||||
FACEBOOK_APP_ID: ${FACEBOOK_APP_ID:-}
|
||||
FACEBOOK_APP_SECRET: ${FACEBOOK_APP_SECRET:-}
|
||||
ports:
|
||||
- "3001:3000"
|
||||
volumes:
|
||||
- portail_associations_preprod_uploads:/app/uploads
|
||||
command: sh -c "pnpm exec drizzle-kit migrate && exec pnpm start"
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "wget -q -O - http://127.0.0.1:3000/health/ready | grep '\"ok\":true' >/dev/null"]
|
||||
interval: 10s
|
||||
timeout: 4s
|
||||
retries: 12
|
||||
start_period: 25s
|
||||
stop_grace_period: 25s
|
||||
restart: unless-stopped
|
||||
|
||||
db:
|
||||
image: mysql:8.4
|
||||
container_name: portail-associations-preprod-db
|
||||
environment:
|
||||
MYSQL_DATABASE: portail_associations_preprod
|
||||
MYSQL_USER: portail_preprod
|
||||
MYSQL_PASSWORD: portail_preprod_password
|
||||
MYSQL_ROOT_PASSWORD: root_preprod_password
|
||||
ports:
|
||||
- "3308:3306"
|
||||
volumes:
|
||||
- portail_associations_preprod_mysql:/var/lib/mysql
|
||||
healthcheck:
|
||||
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "portail_preprod", "-pportail_preprod_password"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 20
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
portail_associations_preprod_mysql:
|
||||
portail_associations_preprod_uploads:
|
||||
21
deployments/prod/.env.example
Normal file
21
deployments/prod/.env.example
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
DATABASE_URL=mysql://portail:portail_password@db:3306/portail_associations
|
||||
JWT_SECRET=
|
||||
ADMIN_EMAIL=
|
||||
BOOTSTRAP_ADMIN_EMAIL=
|
||||
BOOTSTRAP_ADMIN_PASSWORD=
|
||||
BOOTSTRAP_ADMIN_NAME=
|
||||
BOOTSTRAP_USERS=
|
||||
APP_BASE_URL=https://www.portail-association973.com
|
||||
SMTP_PROVIDER=
|
||||
SMTP_HOST=
|
||||
SMTP_PORT=
|
||||
SMTP_USER=
|
||||
SMTP_PASS=
|
||||
SMTP_FROM=
|
||||
SMTP_SECURE=
|
||||
SMTP_REQUIRE_TLS=
|
||||
ENTREPRISE_API_TOKEN=
|
||||
GOOGLE_CLIENT_ID=
|
||||
GOOGLE_CLIENT_SECRET=
|
||||
FACEBOOK_APP_ID=
|
||||
FACEBOOK_APP_SECRET=
|
||||
50
deployments/prod/README.md
Normal file
50
deployments/prod/README.md
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
## Production portail-associations
|
||||
|
||||
Cette production tourne sur le VPS principal avec :
|
||||
|
||||
- dossier : `/home/ubuntu/portail-associations`
|
||||
- application : port `3000`
|
||||
- base MySQL : port `3307`
|
||||
- URL publique : `https://www.portail-association973.com`
|
||||
|
||||
### Fichier d'environnement
|
||||
|
||||
La production s'appuie sur le fichier :
|
||||
|
||||
- `/home/ubuntu/portail-associations/.env`
|
||||
|
||||
Ce fichier ne doit pas être écrasé automatiquement par les synchronisations de code.
|
||||
|
||||
Variables attendues au minimum :
|
||||
|
||||
- `DATABASE_URL`
|
||||
- `JWT_SECRET`
|
||||
- `ADMIN_EMAIL`
|
||||
- `BOOTSTRAP_ADMIN_EMAIL`
|
||||
- `BOOTSTRAP_ADMIN_PASSWORD`
|
||||
- `BOOTSTRAP_ADMIN_NAME`
|
||||
- `BOOTSTRAP_USERS`
|
||||
- `APP_BASE_URL`
|
||||
- `SMTP_*`
|
||||
- `ENTREPRISE_API_TOKEN`
|
||||
- `GOOGLE_CLIENT_ID`
|
||||
- `GOOGLE_CLIENT_SECRET`
|
||||
- `FACEBOOK_APP_ID`
|
||||
- `FACEBOOK_APP_SECRET`
|
||||
|
||||
### Déploiement recommandé
|
||||
|
||||
Depuis le poste local :
|
||||
|
||||
```bash
|
||||
./scripts/deploy-vps.sh prod
|
||||
```
|
||||
|
||||
Cette commande :
|
||||
|
||||
- vérifie le SSH
|
||||
- lance `pnpm check`
|
||||
- lance `pnpm build`
|
||||
- synchronise les sources utiles
|
||||
- exécute `docker compose --env-file .env up -d --build app`
|
||||
- contrôle la réponse HTTP publique
|
||||
Loading…
Add table
Add a link
Reference in a new issue