Le backend FastAPI sert déjà le SPA buildé : on abandonne le duo nginx + backend au profit d'une seule image multi-stage (build Vue puis service par le backend). docker-compose passe à un service unique, avec PLESNA_DATA_DIR déclarant le stockage persistant. - backend.Dockerfile : stage node build -> copie frontend/dist, CMD en `uv run --no-sync` (plus de resync des deps dev au démarrage) - docker-compose.yml : service unique `app`, volume ./data, PLESNA_DATA_DIR=/app/data - supprime frontend/Dockerfile, frontend/nginx.conf, frontend/.dockerignore - .dockerignore : ignore **/node_modules, data, data_bck - README : section Production mise à jour Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
113 lines
3.3 KiB
Markdown
113 lines
3.3 KiB
Markdown
# Plesna Gerance
|
|
|
|
Extracteur de comptes rendus de gerance Oralia/ICS.
|
|
|
|
## Prerequis
|
|
|
|
- Python >= 3.10
|
|
- [uv](https://docs.astral.sh/uv/)
|
|
- Node.js >= 22
|
|
|
|
> L'extraction de PDF utilise `pdfplumber` (Python pur) : aucun binaire
|
|
> systeme requis (plus besoin de `poppler-utils`/`pdftotext`).
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
uv sync
|
|
cd frontend && npm install
|
|
```
|
|
|
|
## Developpement
|
|
|
|
Lancer backend et frontend dans deux terminaux separés :
|
|
|
|
```bash
|
|
make dev_back # Backend sur http://localhost:8000 (auto-reload)
|
|
make dev_front # Frontend sur http://localhost:5173 (hot-reload)
|
|
```
|
|
|
|
Ou les deux en parallele :
|
|
|
|
```bash
|
|
make dev
|
|
```
|
|
|
|
Ouvrir **http://localhost:5173** — le proxy Vite redirige `/api` vers le backend.
|
|
|
|
## Production (Docker)
|
|
|
|
Un **conteneur unique** : l'image builde le frontend Vue puis le fait servir
|
|
par le backend FastAPI (API + interface web sur le meme port). Pas de nginx.
|
|
|
|
```bash
|
|
make docker # podman-compose up --build
|
|
# ou : docker compose up --build
|
|
```
|
|
|
|
Accessible sur **http://localhost:8080**.
|
|
|
|
Les donnees (base SQLite + documents) sont declarees via `PLESNA_DATA_DIR`
|
|
(voir `docker-compose.yml`) et persistees dans le volume `./data`, donc
|
|
conservees entre les redemarrages du conteneur.
|
|
|
|
## Application de bureau (Windows, sans ligne de commande)
|
|
|
|
L'application peut etre empaquetee en **executable Windows autonome** : un seul
|
|
fichier que l'utilisateur final installe et lance via une icone, sans Python,
|
|
sans Node, sans terminal. L'extraction etant en Python pur, aucun binaire
|
|
externe n'est requis.
|
|
|
|
### Tester le mode bureau (depuis les sources)
|
|
|
|
Sous **Windows** (pywebview utilise WebView2, deja present) :
|
|
|
|
```bash
|
|
uv sync --group desktop
|
|
cd frontend && npm run build && cd ..
|
|
uv run plesna-gerance desktop # ouvre une fenetre native
|
|
```
|
|
|
|
Sous **Linux**, pywebview a besoin d'un moteur de rendu. Le groupe
|
|
`desktop-linux` fournit un backend Qt entierement pip-installable :
|
|
|
|
```bash
|
|
uv sync --group desktop-linux
|
|
cd frontend && npm run build && cd ..
|
|
uv run plesna-gerance desktop # necessite un environnement graphique ($DISPLAY)
|
|
```
|
|
|
|
> Ce backend Qt ne sert qu'a **tester** le mode fenetre sous Linux : il n'est
|
|
> pas embarque dans le build Windows.
|
|
|
|
### Produire l'executable + l'installeur
|
|
|
|
Deux options (le build doit se faire **sur Windows**, PyInstaller ne croise pas
|
|
les plateformes) :
|
|
|
|
1. **Sur une machine Windows** — installer uv, Node.js et (optionnel) Inno
|
|
Setup 6, puis :
|
|
|
|
```powershell
|
|
powershell -ExecutionPolicy Bypass -File packaging\build_windows.ps1
|
|
```
|
|
|
|
Produit `dist\PlesnaGerance.exe` et, si Inno Setup est present,
|
|
`dist\PlesnaGerance-Setup.exe`.
|
|
|
|
2. **Sans machine Windows** — via GitHub Actions : le workflow
|
|
`.github/workflows/build-windows.yml` compile sur un runner Windows.
|
|
Le declencher (onglet *Actions* ou en poussant un tag `v*`) puis telecharger
|
|
l'artefact `PlesnaGerance-windows`.
|
|
|
|
### Cote utilisateur final
|
|
|
|
Lancer `PlesnaGerance-Setup.exe`, suivre l'assistant (installation par
|
|
utilisateur, sans droits administrateur), puis cliquer sur l'icone **Plesna
|
|
Gerance**. Les donnees (base et documents) sont stockees dans
|
|
`%APPDATA%\PlesnaGerance` et conservees entre les mises a jour.
|
|
|
|
> **Assistant IA (optionnel)** : la page IA necessite [Ollama](https://ollama.com)
|
|
> installe separement. Sans Ollama, l'application fonctionne normalement et la
|
|
> page IA indique simplement que le service est indisponible.
|