Dé-Replit-isation complète du projet
Supprimés : - replit.md — doc Replit obsolète - docs/GITEA_TUTO.md — tuto push Replit → Gitea (obsolète) - artifacts/api-server/ — serveur TypeScript mort, remplacé par Flask - artifacts/voix-du-peuple/vite.config.selfhost.ts — fusionné dans vite.config.ts Nettoyés : - ai_agent.py — fallback Replit AI supprimé (Mistral + OpenAI-compatible suffisent) - vite.config.ts — plugins @replit/* retirés, PORT optionnel (défaut 5173) - package.json + pnpm-workspace.yaml — @replit/* retirés du catalog et des deps - badge.tsx + button.tsx — commentaires // @replit supprimés - README.md, DEPLOIEMENT.md, DAT.md, DEX.md, WIKI.md — références Replit remplacées Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
+5
-6
@@ -2,7 +2,7 @@
|
||||
|
||||
**Version** : 1.4
|
||||
**Date** : Avril 2026
|
||||
**Statut** : En production (Replit), prêt pour auto-hébergement
|
||||
**Statut** : Prêt pour auto-hébergement
|
||||
|
||||
---
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
|
||||
**Variables d'environnement frontend** :
|
||||
- `BASE_URL` — Préfixe de chemin (injecté par Vite)
|
||||
- `PORT` — Port du serveur de développement (assigné par Replit)
|
||||
- `PORT` — Port du serveur de développement (défaut : 5173)
|
||||
|
||||
---
|
||||
|
||||
@@ -172,9 +172,8 @@ Deux appels distincts à l'API Mistral (compatible OpenAI SDK) :
|
||||
- **Déclencheur** : À chaque nouvelle contribution acceptée (asynchrone)
|
||||
|
||||
**Priorité de configuration du client IA** :
|
||||
1. `MISTRAL_API_KEY` → `https://api.mistral.ai/v1`
|
||||
2. `OPENAI_API_KEY` → API OpenAI standard
|
||||
3. `AI_INTEGRATIONS_OPENAI_*` → Proxy Replit (intégration native)
|
||||
1. `MISTRAL_API_KEY` → `https://api.mistral.ai/v1` (recommandé)
|
||||
2. `OPENAI_API_KEY` → tout fournisseur compatible OpenAI (`OPENAI_BASE_URL` optionnel)
|
||||
|
||||
---
|
||||
|
||||
@@ -232,7 +231,7 @@ Internet ──▶ HAProxy (TLS, load balancing)
|
||||
**Fichiers fournis** :
|
||||
- `deploy/nginx.conf` — Configuration Nginx avec HAProxy support
|
||||
- `deploy/voix-du-peuple-api.service` — Unité systemd pour Gunicorn
|
||||
- `artifacts/voix-du-peuple/vite.config.selfhost.ts` — Build sans plugins Replit
|
||||
- `artifacts/voix-du-peuple/vite.config.ts` — Config Vite (développement + production)
|
||||
- `scripts/push-gitea.sh` — Push sécurisé vers Gitea (compatible Git 2.50+, lit `GITEA_TOKEN`)
|
||||
|
||||
---
|
||||
|
||||
+5
-26
@@ -21,19 +21,6 @@
|
||||
|
||||
## 1. Démarrage et arrêt des services
|
||||
|
||||
### Sur Replit
|
||||
|
||||
Les services sont gérés par les **Workflows** Replit. Ils démarrent automatiquement.
|
||||
|
||||
| Workflow | Commande | Port |
|
||||
|----------|----------|------|
|
||||
| API Server | `PORT=8080 sh artifacts/flask-api/start.sh` | 8080 |
|
||||
| Frontend | `pnpm --filter @workspace/voix-du-peuple run dev` | auto |
|
||||
|
||||
Pour redémarrer manuellement : onglet **Workflows** → bouton restart.
|
||||
|
||||
---
|
||||
|
||||
### En auto-hébergement (RockyLinux / Debian)
|
||||
|
||||
```bash
|
||||
@@ -111,10 +98,6 @@ systemctl restart voix-du-peuple-api
|
||||
|
||||
## 4. Consultation des logs
|
||||
|
||||
### Sur Replit
|
||||
|
||||
Voir les logs dans l'onglet **Workflows** → cliquer sur le workflow concerné.
|
||||
|
||||
### En auto-hébergement
|
||||
|
||||
```bash
|
||||
@@ -352,19 +335,15 @@ Toutes les occurrences de `--primary` dans le fichier CSS s'appliquent automatiq
|
||||
|
||||
---
|
||||
|
||||
## 15. Synchronisation avec Gitea
|
||||
|
||||
Pour pousser le code depuis Replit vers Gitea (après chaque session de travail) :
|
||||
## 15. Push vers Gitea
|
||||
|
||||
```bash
|
||||
bash scripts/push-gitea.sh
|
||||
git push
|
||||
```
|
||||
|
||||
**Prérequis** : le secret `GITEA_TOKEN` doit être configuré dans Replit → Secrets.
|
||||
> **Note** : le script `scripts/push-gitea.sh` permet un push avec token HTTP si besoin (`GITEA_TOKEN`). Pour Git 2.50+, préférer `git remote set-url` avec un token en variable d'environnement.
|
||||
|
||||
> **Contexte** : Git 2.50+ ignore les tokens embarqués dans les URLs. Le script contourne ce comportement en transmettant les identifiants via l'en-tête HTTP `Authorization: Basic` (encodage Base64). Voir `docs/GITEA_TUTO.md` pour le détail complet.
|
||||
|
||||
Pour régénérer un token Gitea : **Paramètres du compte Gitea → Applications → Générer un token**
|
||||
Pour régénérer un token Gitea : **Paramètres du compte → Applications → Générer un token**
|
||||
Permissions requises : `repository` (lecture + écriture).
|
||||
|
||||
---
|
||||
@@ -385,7 +364,7 @@ https://votredomaine.fr/admin
|
||||
|
||||
| Variable | Où la définir |
|
||||
|----------|---------------|
|
||||
| `ADMIN_SECRET` | Replit → Secrets · ou `.env` en auto-hébergement |
|
||||
| `ADMIN_SECRET` | `.env` ou variable d'environnement système |
|
||||
|
||||
### Fonctionnalités
|
||||
|
||||
|
||||
@@ -1,172 +0,0 @@
|
||||
# Récupérer le projet sur Gitea
|
||||
|
||||
Ce tutoriel explique comment pousser le code de **La Voix du Peuple** depuis Replit vers votre instance Gitea, et comment vous synchroniser ensuite à votre rythme.
|
||||
|
||||
> **État du dépôt** : branche `main`, synchronisée. Remote actif : `origin` (Gitea).
|
||||
|
||||
---
|
||||
|
||||
## Prérequis
|
||||
|
||||
- Une instance Gitea accessible (`https://homegit.gyozamancave.fr`)
|
||||
- Un token d'accès Gitea avec droits `repository:write`
|
||||
- Le secret `GITEA_TOKEN` configuré dans Replit (voir Étape 1)
|
||||
|
||||
---
|
||||
|
||||
## Étape 1 — Stocker le token dans Replit Secrets
|
||||
|
||||
Votre token Gitea doit être stocké comme secret Replit, jamais dans un fichier versionné.
|
||||
|
||||
1. Dans Replit → **Secrets** (cadenas dans le panneau latéral)
|
||||
2. Ajouter un secret :
|
||||
- **Clé** : `GITEA_TOKEN`
|
||||
- **Valeur** : votre token Gitea
|
||||
|
||||
Pour générer ou renouveler un token sur Gitea :
|
||||
**Paramètres du compte → Applications → Générer un token**
|
||||
Permissions requises : `repository` (lecture + écriture)
|
||||
|
||||
---
|
||||
|
||||
## Étape 2 — Pousser vers Gitea
|
||||
|
||||
Le script `scripts/push-gitea.sh` gère l'authentification automatiquement.
|
||||
|
||||
Dans le shell Replit :
|
||||
|
||||
```bash
|
||||
bash scripts/push-gitea.sh
|
||||
```
|
||||
|
||||
Ce script :
|
||||
- Lit `GITEA_TOKEN` depuis l'environnement
|
||||
- Encode les identifiants en Base64 (compatibilité Git 2.50+)
|
||||
- Pousse la branche `main` vers `origin` (Gitea)
|
||||
|
||||
---
|
||||
|
||||
## Pourquoi ce script ? (contexte technique)
|
||||
|
||||
Git 2.50+ ignore les tokens embarqués dans les URLs (`https://user:token@host/...`) pour des raisons de sécurité. La solution est de passer l'en-tête `Authorization: Basic` explicitement via `-c http.extraHeader`.
|
||||
|
||||
```bash
|
||||
# Ce que fait le script, en détail :
|
||||
B64=$(printf '%s' "billisdead:${GITEA_TOKEN}" | base64 -w0)
|
||||
git -c "http.extraHeader=Authorization: Basic ${B64}" push origin main
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Étape 3 — Récupérer les mises à jour depuis Replit
|
||||
|
||||
Chaque fois que vous voulez synchroniser votre Gitea avec l'état actuel du projet :
|
||||
|
||||
```bash
|
||||
bash scripts/push-gitea.sh
|
||||
```
|
||||
|
||||
Si vous avez modifié des fichiers directement sur Gitea (peu recommandé) :
|
||||
|
||||
```bash
|
||||
# Récupérer les changements Gitea d'abord
|
||||
B64=$(printf '%s' "billisdead:${GITEA_TOKEN}" | base64 -w0)
|
||||
git -c "http.extraHeader=Authorization: Basic ${B64}" pull origin main --rebase
|
||||
bash scripts/push-gitea.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Étape 4 — Cloner depuis Gitea sur votre serveur de production
|
||||
|
||||
Sur votre serveur RockyLinux / Debian :
|
||||
|
||||
```bash
|
||||
git clone https://homegit.gyozamancave.fr/billisdead/la-voix-du-peuple.git
|
||||
cd la-voix-du-peuple
|
||||
|
||||
# Copier et adapter les variables d'environnement
|
||||
cp .env.example .env
|
||||
nano .env # Renseignez DATABASE_URL, MISTRAL_API_KEY, SESSION_SECRET
|
||||
|
||||
# Installer les dépendances Python
|
||||
pip install -r artifacts/flask-api/requirements.txt
|
||||
|
||||
# Installer les dépendances Node
|
||||
pnpm install
|
||||
|
||||
# Construire le frontend
|
||||
pnpm --filter @workspace/voix-du-peuple run build --config vite.config.selfhost.ts
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Résumé des commandes utiles
|
||||
|
||||
```bash
|
||||
# Pousser vers Gitea (commande principale)
|
||||
bash scripts/push-gitea.sh
|
||||
|
||||
# Voir l'état du dépôt
|
||||
git status
|
||||
git log --oneline -10
|
||||
|
||||
# Voir les remotes configurés
|
||||
git remote -v
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Structure des branches
|
||||
|
||||
| Branche | Usage |
|
||||
|---------|-------|
|
||||
| `main` | Code de production, stable — **seule branche à pousser vers Gitea** |
|
||||
| `replit-agent` | Branche de travail interne de l'agent Replit — ne pas pousser |
|
||||
|
||||
---
|
||||
|
||||
## Remotes configurés
|
||||
|
||||
| Nom | URL | Usage |
|
||||
|-----|-----|-------|
|
||||
| `origin` | `https://homegit.gyozamancave.fr/billisdead/la-voix-du-peuple.git` | Gitea principal |
|
||||
| `gitsafe-backup` | `git://gitsafe:5418/backup.git` | Sauvegarde interne Replit |
|
||||
|
||||
> **Important** : ne jamais inclure de token dans une URL de remote. Le token doit rester dans `GITEA_TOKEN` (Replit Secrets) et être transmis via le script.
|
||||
|
||||
---
|
||||
|
||||
## Contenu du dépôt (structure principale)
|
||||
|
||||
```
|
||||
artifacts/
|
||||
flask-api/ ← Backend Python Flask
|
||||
app.py ← Routes API
|
||||
ai_agent.py ← Intégration Mistral / OpenAI
|
||||
database.py ← Accès PostgreSQL
|
||||
requirements.txt ← Dépendances Python
|
||||
voix-du-peuple/ ← Frontend React + Vite
|
||||
src/
|
||||
pages/
|
||||
home.tsx ← Page principale (synthèse, partage, PDF)
|
||||
about.tsx ← À propos
|
||||
transparence.tsx ← Fonctionnement & données
|
||||
flyer.tsx ← Flyer QR code imprimable
|
||||
components/
|
||||
accessibility-panel.tsx ← Panneau d'accessibilité
|
||||
hooks/
|
||||
use-accessibility.tsx ← Contexte et persistance
|
||||
App.tsx ← Routing et navbar
|
||||
index.css ← Styles globaux, dark mode, accessibilité
|
||||
scripts/
|
||||
push-gitea.sh ← Script de push sécurisé vers Gitea
|
||||
deploy/
|
||||
nginx.conf ← Config Nginx production
|
||||
voix-du-peuple-api.service ← Unité systemd Gunicorn
|
||||
docs/
|
||||
DAT.md ← Architecture technique
|
||||
DEX.md ← Exploitation
|
||||
WIKI.md ← Page wiki
|
||||
GITEA_TUTO.md ← Ce fichier
|
||||
```
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
|
||||
**Type** : Plateforme civique numérique
|
||||
**Stack** : Python / Flask · React / Vite · PostgreSQL · Mistral AI
|
||||
**Hébergement** : Replit (dev) / Auto-hébergeable (RockyLinux, Debian)
|
||||
**Hébergement** : Auto-hébergeable (RockyLinux, Debian, VPS UE)
|
||||
**Dépôt** : `voix-du-peuple` (Gitea)
|
||||
**Statut** : Actif — avril 2026
|
||||
**Version doc** : 1.4
|
||||
|
||||
Reference in New Issue
Block a user