This commit is contained in:
Louis Mazin 2026-10-14 15:42:26 +02:00
parent 7677667d0b
commit d6fe1dbb50
6 changed files with 131 additions and 96 deletions

View File

@ -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

View File

@ -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
```

View File

@ -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.

View File

@ -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'),
),
]

View File

@ -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',
],
},
})

View File

@ -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"