85 lines
3.1 KiB
Markdown
85 lines
3.1 KiB
Markdown
# PdfEditor
|
|
|
|
Éditeur de PDF en ligne, auto-hébergé. L'utilisateur dépose un PDF (glisser-déposer),
|
|
l'édite directement dans le navigateur — **ajout de texte, d'images, de signatures,
|
|
de formes basiques et de liens** — puis le télécharge ou le sauvegarde sur son compte.
|
|
|
|
## Architecture
|
|
|
|
| Couche | Techno | Rôle |
|
|
|--------|--------|------|
|
|
| **Frontend** | Angular + [PDF.js](https://mozilla.github.io/pdf.js/) (rendu) + [pdf-lib](https://pdf-lib.js.org/) (édition/export) | Toute l'édition se fait **côté client**, dans le navigateur. |
|
|
| **Backend** | Go (`net/http` + `chi`) | Authentification (JWT) et persistance des PDF/projets de l'utilisateur. |
|
|
| **Base de données** | PostgreSQL | Comptes utilisateurs et métadonnées des documents. |
|
|
| **Stockage fichiers** | Volume disque | Les PDF sauvegardés sont écrits sur un volume monté. |
|
|
|
|
Le PDF n'est envoyé au serveur **que** si l'utilisateur choisit de le sauvegarder.
|
|
L'édition elle-même ne quitte jamais le navigateur.
|
|
|
|
Le contrat d'API partagé est décrit dans [`docs/API.md`](docs/API.md).
|
|
|
|
```
|
|
PdfEditor/
|
|
├── docker-compose.yml # Production : tire les images du registre Gitea
|
|
├── docker-compose.local.yml # Dev/debug : build à partir des sources locales
|
|
├── .env.example # Variables d'environnement (copier en .env)
|
|
├── scripts/push-images.sh # Build + push des images vers Gitea (gitignoré)
|
|
├── docs/API.md # Contrat d'API REST
|
|
├── backend/ # Service Go
|
|
└── frontend/ # Application Angular (servie par nginx)
|
|
```
|
|
|
|
## Développement local
|
|
|
|
Prérequis : Docker + Docker Compose.
|
|
|
|
```bash
|
|
cp .env.example .env # adapter si besoin
|
|
docker compose -f docker-compose.local.yml up --build
|
|
```
|
|
|
|
Services exposés :
|
|
- Frontend : http://localhost:8080
|
|
- Backend (debug) : http://localhost:8081
|
|
- PostgreSQL : localhost:5432
|
|
|
|
> Pour un cycle de dev plus rapide sur une seule couche, voir les README de
|
|
> `backend/` et `frontend/` (lancement natif `go run` / `ng serve`).
|
|
|
|
## Déploiement (production)
|
|
|
|
Les deux images (`pdfeditor-backend`, `pdfeditor-frontend`) sont publiées sur le
|
|
registre OCI intégré de Gitea, puis tirées par `docker-compose.yml`.
|
|
|
|
### 1. Publier les images
|
|
|
|
```bash
|
|
./scripts/push-images.sh # tag = git short SHA + latest
|
|
# ou
|
|
IMAGE_TAG=v1.0.0 ./scripts/push-images.sh
|
|
```
|
|
|
|
Le script construit `backend/` et `frontend/`, les tague
|
|
(`<short-sha>` + `latest`) et les pousse vers
|
|
`gitea.anthonybouteiller.ovh/blomios/pdfeditor-{backend,frontend}`.
|
|
|
|
### 2. Lancer sur le serveur
|
|
|
|
```bash
|
|
cp .env.example .env # renseigner les secrets (JWT_SECRET, mots de passe…)
|
|
docker compose pull
|
|
docker compose up -d
|
|
```
|
|
|
|
Le frontend est exposé sur le port défini par `HTTP_PORT` (défaut `8080`) ; il
|
|
proxifie les appels `/api` vers le backend.
|
|
|
|
## Images Docker
|
|
|
|
| Image | Description |
|
|
|-------|-------------|
|
|
| `…/pdfeditor-backend` | Binaire Go (build multi-stage). |
|
|
| `…/pdfeditor-frontend`| Build Angular servi par nginx, proxy `/api` → backend. |
|
|
|
|
Tags : `latest` (dernier build) et le **git short SHA** de chaque build.
|