From d6fe1dbb50f89559226a21436ce8f2548e224183 Mon Sep 17 00:00:00 2001 From: Louis Mazin Date: Wed, 14 Oct 2026 15:42:26 +0200 Subject: [PATCH] nice --- .env.example | 18 ---- EDITEUR_ADMIN.md | 39 -------- MISE_EN_PLACE.md | 11 --- ...ent_id_alter_contactmessage_id_and_more.py | 33 +++++++ frontend/vite.config.js | 31 ++++-- start.sh | 95 +++++++++++++++---- 6 files changed, 131 insertions(+), 96 deletions(-) delete mode 100644 .env.example delete mode 100644 EDITEUR_ADMIN.md delete mode 100644 MISE_EN_PLACE.md create mode 100644 backend/education/migrations/0004_alter_announcement_id_alter_contactmessage_id_and_more.py diff --git a/.env.example b/.env.example deleted file mode 100644 index c237dac..0000000 --- a/.env.example +++ /dev/null @@ -1,18 +0,0 @@ -# Copier vers .env et remplacer toutes les valeurs avant le déploiement. -SECRET_KEY=CHANGE_ME_GENERATE_A_RANDOM_SECRET -DEBUG=False -ALLOWED_HOSTS=localhost,127.0.0.1,example.fr -MYSQL_DATABASE=accrocbio -MYSQL_USER=accrocbio -MYSQL_PASSWORD=CHANGE_ME -MYSQL_ROOT_PASSWORD=CHANGE_ME -MYSQL_HOST=db -MYSQL_PORT=3306 -# Notifications facultatives des formulaires (sinon messages dans /admin/). -CONTACT_NOTIFICATION_EMAIL= -DEFAULT_FROM_EMAIL=no-reply@example.fr -EMAIL_HOST=localhost -EMAIL_PORT=25 -EMAIL_HOST_USER= -EMAIL_HOST_PASSWORD= -EMAIL_USE_TLS=False diff --git a/EDITEUR_ADMIN.md b/EDITEUR_ADMIN.md deleted file mode 100644 index 120ec60..0000000 --- a/EDITEUR_ADMIN.md +++ /dev/null @@ -1,39 +0,0 @@ -# Éditeur visuel AccroCbio - -L'administration éditoriale fonctionne depuis **le frontend** : `http://ADRESSE-DU-SERVEUR:1028/admin` ou `https://votre-domaine/admin` (si nginx dirige cette URL vers React). - -L'URL `:1029/admin/` correspond toujours à **Django Admin**, un outil différent. - -## Première mise en route - -1. Installer / redémarrer les deux conteneurs avec le `docker-compose.yml` habituel. -2. Dans le conteneur backend Django, exécuter `python manage.py migrate` (nouvelle migration `education/0003_sitecontent.py`). -3. Créer un compte administrateur si nécessaire : `python manage.py createsuperuser` (ou utiliser un utilisateur Django existant avec `is_staff=True`). -4. Ouvrir `http://IP:1028/admin` et s'identifier. -5. Dans l'onglet **Pages**, choisir une page : le **mode édition** s'active automatiquement. Cliquer sur les petits crayons à côté des textes et sur **Changer l'image** près des illustrations. **Enregistrer** publie le changement, **Restaurer** remet la valeur par défaut. -6. Utiliser les onglets **Ressources / Avis / Offres / Messages** pour créer, modifier, masquer et supprimer les éléments de la base. -7. **Terminer** désactive les crayons ; **Tableau de bord** revient au panneau d'administration. - -## Informations techniques - -- Le frontend reste sur le port **1028** et le backend Django sur le port **1029** ; les fichiers Docker d'origine sont conservés. -- Le `vite.config.js` transmet automatiquement `/api/` au service Docker `backend:1029`. En production derrière nginx, veiller à transmettre `/api/` à Django et toutes les routes du frontend, notamment `/admin`, à React. -- Les images téléversées (PNG, JPG, WebP ; maximum 5 Mo) sont conservées dans `backend/media/editor/`. Sauvegarder ce dossier avec la base de données. Les liens HTTPS vers des images externes fonctionnent aussi. -- Les textes modifiés sont enregistrés dans la table `education_sitecontent` (différentiel par rapport au texte du code). L'édition ne nécessite ni recompilation React ni redémarrage Docker. -- Le mot de passe n'est pas stocké dans le navigateur. Le jeton d'accès est conservé uniquement durant l'onglet ouvert (`sessionStorage`) et est contrôlé côté API. Utiliser **HTTPS** en dehors du réseau local. -- Les modifications des liens n'acceptent que les chemins internes (`/contact`) ou les URL HTTPS. -- Le texte de la page et les illustrations peuvent être édités ; il ne s'agit pas encore d'un constructeur de sections glisser-déposer. Les composants React/shadcn et les mises en page restent définis dans le code. - -## Vérifications - -Tests Django (dans le conteneur backend avec sa configuration de test) : - -```bash -python manage.py test education -``` - -Compilation du frontend : - -```bash -npm run build -``` diff --git a/MISE_EN_PLACE.md b/MISE_EN_PLACE.md deleted file mode 100644 index b8c2eae..0000000 --- a/MISE_EN_PLACE.md +++ /dev/null @@ -1,11 +0,0 @@ -# Installation - -**Archive complète :** à extraire dans un NOUVEAU dossier, pas au-dessus de la production actuelle. Conserver un environnement et une base de données séparés. - -**Archive de modifications :** copier les fichiers `Site/...` au-dessus d’une COPIE du projet d’origine, puis supprimer les anciens fichiers indiqués dans `FICHIERS_SUPPRIMES.txt` si vous souhaitez nettoyer totalement le dépôt. - -Important : sauvegardez votre projet et la base avant toute intervention, et n’importez pas le `.env` de la boulangerie sans adapter `MYSQL_DATABASE`, secrets et hôtes. Aucun fichier `.env` réel n’est présent dans les ZIP. - -Les Dockerfiles et docker-compose.yml sont conservés tels quels. Seul `start.sh` a été modifié pour ne plus écraser le projet depuis l’ancien dépôt Git. Lire `README.md` pour configurer Django, MySQL et nginx. - -Contrôles effectués : syntaxe Python, analyse JSX/JS, résolution des imports locaux. Aucun build Vite ou test Django complet n'a pu être lancé ici, faute des dépendances npm/Python et d’une base de données disponibles dans le conteneur de travail. diff --git a/backend/education/migrations/0004_alter_announcement_id_alter_contactmessage_id_and_more.py b/backend/education/migrations/0004_alter_announcement_id_alter_contactmessage_id_and_more.py new file mode 100644 index 0000000..b213baf --- /dev/null +++ b/backend/education/migrations/0004_alter_announcement_id_alter_contactmessage_id_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 5.2.18 on 2026-10-13 16:36 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('education', '0003_sitecontent'), + ] + + operations = [ + migrations.AlterField( + model_name='announcement', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='contactmessage', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='resource', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + migrations.AlterField( + model_name='testimonial', + name='id', + field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), + ), + ] diff --git a/frontend/vite.config.js b/frontend/vite.config.js index e1227c6..82a77b6 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -1,12 +1,23 @@ -import { defineConfig } from 'vite'; -import react from '@vitejs/plugin-react'; -import tailwindcss from '@tailwindcss/vite'; -import { fileURLToPath, URL } from 'node:url'; +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' +import tailwindcss from '@tailwindcss/vite' +import { fileURLToPath, URL } from 'node:url' export default defineConfig({ - plugins: [react(), tailwindcss()], - resolve: { alias: { '@': fileURLToPath(new URL('./src', import.meta.url)) } }, - server: { proxy: { '/api': { target: 'http://backend:1029', changeOrigin: true } } }, - // L'accès public hors développement passe idéalement par nginx (frontend + /api). - preview: { proxy: { '/api': { target: 'http://backend:1029', changeOrigin: true } }, allowedHosts: ['coursbiologiechaillou.fr', 'www.coursbiologiechaillou.fr', 'localhost', 'boulangerie.louismazin.ovh'] }, -}); + plugins: [ + react(), + tailwindcss(), + ], + + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + }, + + preview: { + allowedHosts: [ + 'accrocbio.louismazin.ovh', + ], + }, +}) \ No newline at end of file diff --git a/start.sh b/start.sh index 728da39..3b66636 100644 --- a/start.sh +++ b/start.sh @@ -1,27 +1,86 @@ + #!/bin/bash -set -euo pipefail +set -e + cd /home/container -echo '=== AccroCbio — lancement ===' -( - cd backend - python3 manage.py check - python3 manage.py migrate --noinput - exec python3 manage.py runserver 0.0.0.0:1029 -) & +echo "======================================" +echo "AccroCBio" +echo "======================================" + +# -------------------------------------- +# Mise à jour du projet +# -------------------------------------- + +if [ ! -d ".git" ]; then + echo "Dépôt Git absent → clonage..." + + git clone https://gitea.louismazin.ovh/LouisMazin/AccroCBio.git /tmp/accrocbio + + cp -a /tmp/accrocbio/. /home/container/ + rm -rf /tmp/accrocbio +else + echo "Mise à jour du dépôt Git..." + + git fetch origin + git reset --hard origin/main +fi + +echo "Git : $(git rev-parse --short HEAD)" + +# -------------------------------------- +# Backend +# -------------------------------------- + +cd /home/container/backend + +python3 manage.py check + +echo "Démarrage Django sur :1037" + +python3 manage.py migrate --noinput + +python3 manage.py runserver 0.0.0.0:1037 & BACKEND_PID=$! -( - cd frontend - npm ci - npm run build - exec npm run preview -- --host 0.0.0.0 --port 1028 -) & +# -------------------------------------- +# Frontend +# -------------------------------------- + +cd /home/container/frontend + +echo "Installation des dépendances frontend..." +npm ci + + +echo "Build React..." + +npm run build + +echo "Démarrage frontend sur :1036" + +npm run preview -- --host 0.0.0.0 --port 1036 & FRONTEND_PID=$! +# -------------------------------------- +# Arrêt propre +# -------------------------------------- + cleanup() { - kill "$BACKEND_PID" "$FRONTEND_PID" 2>/dev/null || true - wait "$BACKEND_PID" "$FRONTEND_PID" 2>/dev/null || true + echo "Arrêt des applications..." + + kill "$BACKEND_PID" 2>/dev/null || true + kill "$FRONTEND_PID" 2>/dev/null || true + + wait "$BACKEND_PID" 2>/dev/null || true + wait "$FRONTEND_PID" 2>/dev/null || true } -trap cleanup EXIT INT TERM -wait -n "$BACKEND_PID" "$FRONTEND_PID" + +trap cleanup SIGTERM SIGINT EXIT + +echo "======================================" +echo " Frontend : :1036" +echo " Backend : :1037" +echo "======================================" + +wait -n "$BACKEND_PID" "$FRONTEND_PID" \ No newline at end of file