summaryrefslogtreecommitdiff
path: root/app-management.md
diff options
context:
space:
mode:
Diffstat (limited to 'app-management.md')
-rw-r--r--app-management.md214
1 files changed, 214 insertions, 0 deletions
diff --git a/app-management.md b/app-management.md
new file mode 100644
index 0000000..b979018
--- /dev/null
+++ b/app-management.md
@@ -0,0 +1,214 @@
+# App management - Lucien-sens-bon
+
+Ce document explique comment diagnostiquer les conteneurs, la base de donnees
+et le reverse proxy (Apache).
+
+## 1) Diagnostic Docker
+
+Statut des services :
+```
+docker compose ps
+```
+
+Logs temps reel :
+```
+docker compose logs -f
+docker compose logs -f backend
+docker compose logs -f storefront
+```
+
+Redemarrer un service :
+```
+docker compose restart backend
+```
+
+Rebuild force d'un service :
+```
+docker compose build --no-cache backend
+docker compose up -d --build backend
+```
+
+Entrer dans un conteneur :
+```
+docker exec -it medusa-backend sh
+```
+
+## 2) Verifier la connexion PostgreSQL
+
+La connexion est definie dans `.env` :
+```
+DATABASE_URL=postgres://user:password@host:5432/nom_db
+```
+
+### 2.1 Tester depuis le serveur (si psql est installe)
+```
+psql "$DATABASE_URL" -c "select 1;"
+```
+
+### 2.2 Tester depuis un conteneur temporaire
+```
+docker run --rm -it postgres:16-alpine psql "$DATABASE_URL" -c "select 1;"
+```
+
+### 2.3 Tester le port (reseau)
+```
+nc -vz <host_db> 5432
+```
+
+Si la DB est sur la machine hote :
+- eviter `localhost` dans `DATABASE_URL`
+- utiliser l'IP de la machine hote
+
+Documentation PostgreSQL :
+https://www.postgresql.org/docs/current/app-psql.html
+https://www.postgresql.org/docs/current/app-pg-isready.html
+
+## 3) Tests applicatifs rapides
+
+Storefront :
+```
+curl http://localhost:8000
+```
+
+API Medusa :
+```
+curl http://localhost:9000/store/products
+```
+
+## 3.1) Depannage avance: backend 9000 ne repond pas
+
+Cette section documente les commandes utilisees en incident et explique
+ce qu'elles permettent de verifier.
+
+### A) Etre dans le bon dossier compose
+
+```
+cd /var/www/lucien-sens-bon
+ls -l docker-compose.yml
+```
+
+- `cd ...` : se place dans le dossier ou se trouve `docker-compose.yml`.
+- `ls -l docker-compose.yml` : confirme que le fichier compose existe
+ (sinon `docker compose` renvoie "no configuration file provided").
+
+### B) Etat et logs du backend
+
+```
+sudo docker compose ps
+sudo docker compose logs -f backend
+```
+
+- `docker compose ps` : liste les conteneurs, leur statut et les ports publies.
+- `docker compose logs -f backend` : suit les logs du backend en temps reel
+ pour identifier l'erreur exacte.
+
+### C) Test HTTP local (depuis le serveur)
+
+```
+curl -v http://localhost:9000/store/products
+```
+
+- `curl -v` : verifie que l'API repond et montre les details de connexion.
+- Si "connection reset by peer" -> le backend crash apres accept.
+
+### D) Verifier la base (depuis un conteneur temporaire)
+
+```
+sudo docker compose run --rm backend node -e "const { Client }=require('pg'); const c=new Client({connectionString: process.env.DATABASE_URL}); c.connect().then(()=>console.log('DB OK')).catch(e=>{console.error('DB ERROR:', e.message); process.exit(1)})"
+```
+
+- `docker compose run --rm backend` : lance un conteneur temporaire base sur
+ l'image backend (meme environnement que le service).
+- `node -e ...` : teste la connexion a PostgreSQL via `DATABASE_URL`.
+
+### E) Tester droits et extension PostgreSQL
+
+```
+sudo docker compose run --rm backend node -e "const {Client}=require('pg'); const c=new Client({connectionString: process.env.DATABASE_URL}); c.connect().then(async()=>{const p=await c.query(\"select has_database_privilege(current_user, current_database(), 'CREATE') as can_create\"); console.log(p.rows); try{await c.query('CREATE EXTENSION IF NOT EXISTS \"uuid-ossp\"'); console.log('EXT OK');}catch(e){console.error('EXT ERROR:', e.message);} await c.end();}).catch(e=>{console.error('DB ERROR:', e.message); process.exit(1);});"
+```
+
+- Verifie que l'utilisateur a le droit de creer dans la base.
+- Cree l'extension `uuid-ossp` si elle manque (souvent requise par Medusa).
+
+### F) Migrations Medusa (creation des tables)
+
+```
+sudo docker compose run --rm backend npx medusa migrations run
+```
+
+- Applique les migrations en base. Sans ca, le backend peut echouer a demarrer.
+
+### G) Seed de donnees (optionnel)
+
+```
+sudo docker compose run --rm backend npm run seed
+```
+
+- Ajoute des donnees de demo si un fichier seed existe.
+- Si le fichier `data/seed.json` manque, cette commande echoue sans impact
+ sur le demarrage de l'API.
+
+### H) Redemarrage et rebuild
+
+```
+sudo docker compose restart backend
+sudo docker compose up -d --build backend
+```
+
+- `restart` : redemarre seulement le backend.
+- `up -d --build` : reconstruit l'image puis redemarre le service.
+
+### I) Cas erreur PaymentProviderService (crash apres init)
+
+```
+sudo docker compose run --rm backend node -e "const {Client}=require('pg'); const c=new Client({connectionString: process.env.DATABASE_URL}); c.connect().then(async()=>{const rows=await c.query('select * from payment_provider'); console.log(rows.rows); await c.end();}).catch(e=>{console.error('DB ERROR:', e.message); process.exit(1);});"
+```
+
+- Controle le contenu de `payment_provider` si le backend plante au demarrage
+ dans le service des providers de paiement.
+
+## 4) Apache / Reverse proxy
+
+Verifier les services Apache :
+```
+sudo systemctl status apache2
+```
+
+Logs Apache :
+```
+sudo journalctl -u apache2 -f
+sudo tail -f /var/log/apache2/error.log
+sudo tail -f /var/log/apache2/access.log
+```
+
+Modules proxy :
+```
+sudo a2enmod proxy
+sudo a2enmod proxy_http
+```
+
+Reload Apache :
+```
+sudo systemctl reload apache2
+```
+
+Documentation Apache reverse proxy :
+https://httpd.apache.org/docs/2.4/howto/reverse_proxy.html
+
+## 5) Ports a verifier
+
+- `8000` : storefront
+- `9000` : backend
+- `5432` : PostgreSQL
+- `6379` : Redis
+
+Verifier l'ouverture locale :
+```
+ss -lntp | egrep '8000|9000|5432|6379'
+```
+
+Verifier le firewall (UFW) :
+```
+sudo ufw status
+```
+