Files
pdf_oralia_vibe/README.md
Bertrand Benjamin 0d39ea810b feat: déploiement Docker en conteneur unique (API + UI)
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>
2026-07-19 22:14:56 +02:00

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.