douwe 72dba8bcfa Track deploy/mysql/init.sql so fresh deployments initialize the database
The blanket *.sql ignore rule (meant for database dumps) also excluded
deploy/mysql/init.sql, so it was never committed. On a fresh clone the
compose bind mount resolves to a missing file, MySQL skips schema
initialization, and every database-backed page throws.
2026-10-09 13:01:10 +02:00
2023-12-26 14:31:53 +01:00
2023-12-26 14:31:53 +01:00
2022-10-04 12:54:59 +02:00

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

docker compose up -d --build

Regressietest (draait tegen de draaiende stack; maakt testartikelen en drukt een proefeditie):

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.

S
Description
No description provided
Readme MIT
187 MiB
Languages
HTML 41.9%
C# 33.2%
CSS 12.9%
TeX 8.1%
Dockerfile 1.8%
Other 2.1%