nice
This commit is contained in:
parent
7677667d0b
commit
d6fe1dbb50
18
.env.example
18
.env.example
@ -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
|
||||
@ -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
|
||||
```
|
||||
@ -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.
|
||||
@ -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'),
|
||||
),
|
||||
]
|
||||
@ -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',
|
||||
],
|
||||
},
|
||||
})
|
||||
95
start.sh
95
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"
|
||||
Loading…
x
Reference in New Issue
Block a user