Updated the proostekrant to work properly again.
This commit is contained in:
@@ -1,2 +1,124 @@
|
||||
# ProostenKrant
|
||||
A newspaper for our family
|
||||
# ProostenKrant 3.0 — Blazor
|
||||
|
||||
De ProostenKrant is een webkrant van en voor de familie Proosten: familieleden leveren
|
||||
artikelen in via de website, de redactie publiceert ze per seizoeneditie en drukt de
|
||||
krant als PDF via LaTeX.
|
||||
|
||||
Deze versie vervangt de PHP/MySQL-applicatie door een **Blazor Server**-applicatie
|
||||
(.NET 10) met dezelfde database en hetzelfde LaTeX-krantenontwerp.
|
||||
|
||||
## Architectuur
|
||||
|
||||
| Onderdeel | Keuze |
|
||||
|---------------|---------------------------------------------------|
|
||||
| Framework | Blazor Web App (static SSR, geen JavaScript nodig) |
|
||||
| Database | MySQL 8 (zelfde schema als voorheen, Dapper) |
|
||||
| Authenticatie | Cookie-auth met universeel wachtwoord + paszin |
|
||||
| PDF-generatie | LaTeX (`newspaper`-pakket) aangeroepen vanuit .NET |
|
||||
| Hosting | Docker Compose: `app` (Blazor + texlive) + `mysql`|
|
||||
|
||||
**Waarom Blazor Server en niet WebAssembly?** De applicatie is servergebonden:
|
||||
MySQL-toegang, bestandsuploads en LaTeX-compilatie gebeuren allemaal op de server.
|
||||
Met WASM zou je een aparte REST-API met token-authenticatie moeten bouwen en dezelfde
|
||||
werkzaamheden toch op de server doen. Server-side rendering is bovendien sneller voor
|
||||
een kleine gebruikersgroep en werkt zonder JavaScript.
|
||||
|
||||
**Waarom LaTeX en niet een .NET PDF-bibliotheek?** .NET kan goede PDF's genereren
|
||||
(bijv. met QuestPDF, gratis Community-licentie), maar echte krantenzetting —
|
||||
automatische tekstverdeling over drie kolommen, microtype, woordafbreking,
|
||||
kopbalancering — is waar TeX in uitblinkt. De krant blijft daarom met LaTeX gedrukt,
|
||||
nu aangestuurd vanuit .NET.
|
||||
|
||||
## Snel starten
|
||||
|
||||
```bash
|
||||
docker compose up -d --build
|
||||
```
|
||||
|
||||
Regressietest (draait tegen de draaiende stack; maakt testartikelen en drukt een proefeditie):
|
||||
|
||||
```bash
|
||||
scripts/e2e-test.sh
|
||||
```
|
||||
|
||||
Daarna:
|
||||
|
||||
- Website: http://localhost:8080
|
||||
- Inloggen redactie: kies je naam + universel wachtwoord (standaard `ProostenKrant2024!`,
|
||||
via `UNIVERSAL_PASSWORD` in `.env`)
|
||||
- Paszin voor inzendingen: hetzelfde wachtwoord
|
||||
|
||||
De eerste build duurt lang (de texlive-installatie is ±2 GB). Daarna cachet Docker de
|
||||
LaTeX-laag: **hertesten vraagt geen herinstallatie meer**, zolang je niet
|
||||
`--no-cache` gebruikt.
|
||||
|
||||
## Gebruik
|
||||
|
||||
| Route | Doel |
|
||||
|------------------------------|---------------------------------------------------|
|
||||
| `/` | Voorpagina (krantenstijl) |
|
||||
| `/indienen` | Artikel inleveren via paszin |
|
||||
| `/indienen/bewerken` | Kladartikel bewerken (alleen de schrijver) |
|
||||
| `/archief` | Gedrukte edities + gepubliceerde artikelen |
|
||||
| `/login` | Redactie-login |
|
||||
| `/dashboard` | Overzicht, statistieken, krant drukken |
|
||||
| `/artikelen`, `/artikelen/nieuw`, `/artikelen/{id}` | Artikelbeheer (redactie) |
|
||||
| `/seizoenen`, `/seizoenen/{id}` | Edities drukken (redactie) |
|
||||
| `/edities/{bestand}` | PDF-download |
|
||||
|
||||
Werkstroom: familie dient in via `/indienen` (status *klad*) → redactie publiceert
|
||||
via `/artikelen/{id}` → redactie drukt de editie via `/seizoenen` of `/dashboard`.
|
||||
|
||||
## Projectstructuur
|
||||
|
||||
```
|
||||
proostenkrant.net/
|
||||
├── src/ProostenKrant/ # Blazor-applicatie
|
||||
│ ├── Components/Pages/ # Alle pagina's (Razor, static SSR)
|
||||
│ ├── Services/ # Db, ArticleService, LatexService, auth, uploads
|
||||
│ └── wwwroot/ # css, fonts, EU-vlag, uploads (volume-mounted)
|
||||
├── deploy/
|
||||
│ ├── Dockerfile # Build + runtime met texlive (gecachete laag)
|
||||
│ └── mysql/init.sql # Database-initialisatie
|
||||
├── compose.yml # app + mysql stack
|
||||
├── app/ # (legacy) PHP-versie — niet verwijderd, zie hieronder
|
||||
└── Latex/ # (legacy) origineel krantenontwerp ter referentie
|
||||
```
|
||||
|
||||
De artikel- en profielfoto's uit de PHP-versie worden hergebruikt via volumes:
|
||||
`app/public/images/articles` en `app/public/images/profiles` worden gekoppeld aan de
|
||||
uploadmappen van de Blazor-app. De gedrukte PDF's landen in `app/storage/latex`.
|
||||
|
||||
De Europese vlag in de voettekst is een SVG (`src/ProostenKrant/wwwroot/images/european-flag.svg`)
|
||||
volgens de officiële specificaties (12 gouden sterren, cirkelradius ⅓ van de hoogte).
|
||||
|
||||
## Deployen op een server
|
||||
|
||||
1. Vereiste: Docker + Docker Compose op de server.
|
||||
2. Clone de repository en zet in `.env` een **sterk wachtwoord** voordat je live gaat:
|
||||
- `UNIVERSAL_PASSWORD` — inlogwachtwoord én paszin (standaard `ProostenKrant2024!`)
|
||||
- `DB_PASSWORD` / `MYSQL_ROOT_PASSWORD` — database (`MYSQL_ROOT_PASSWORD` staat in `compose.yml`)
|
||||
3. Start: `docker compose up -d --build` — de database wordt automatisch geïnitialiseerd
|
||||
(users incl. Kevin, Luc en Tilde; seizoenen).
|
||||
4. Zet eventueel een reverse proxy met HTTPS (Caddy/nginx) voor `http://server:8080`.
|
||||
Overweeg de MySQL-poort (`3306`) dicht te zetten in `compose.yml` als de database
|
||||
niet van buitenaf benodigd is.
|
||||
5. Backups: `resources/` (repo), `app/public/images/` (foto's) en de mysql-data volume
|
||||
bevatten alles; `docker compose down -v` verwijdert de data definitief.
|
||||
|
||||
De eerste build installeert texlive eenmalig (±2 GB, enkele minuten); daarna pakken
|
||||
Docker-lagen alles en duurt een rebuild seconden.
|
||||
|
||||
## Configuratie
|
||||
|
||||
Omgevingsvariabelen (of `.env`):
|
||||
|
||||
- `DB_HOST`, `DB_NAME`, `DB_USER`, `DB_PASSWORD` — database (standaard `mysql`/`proostenkrant`)
|
||||
- `UNIVERSAL_PASSWORD` — inlogwachtwoord en paszin (standaard `ProostenKrant2024!`)
|
||||
|
||||
## Legacy PHP-versie
|
||||
|
||||
De oude PHP-applicatie staat nog in `app/` en is niet verwijderd; de oude
|
||||
`docker-compose`-bestanden zijn verplaatst naar `legacy/` zodat Compose automatisch
|
||||
de Blazor-stack (`compose.yml`) pakt. Zodra de Blazor-versie goedgekeurd is, kunnen
|
||||
`app/`, `docker/` en `legacy/` worden opgeruimd.
|
||||
|
||||
Reference in New Issue
Block a user