skydesportensdag/README.md

61 lines
3.4 KiB
Markdown

# Skydesportens Dag besøgsregistrering
Lille standalone ASP.NET Core app til Vestfalster Skytteforening.
## Funktioner
- Offentlig registrering uden login på `/`
- Felter: navn, adresse, fødselsdag og email
- Postby udfyldes automatisk ved indtastning af et kendt dansk postnummer og kan redigeres manuelt
- Adminliste på `/admin`
- Sletning med bekræftelse på adminlisten
- CSV-download og udskrivning via browserens dialog (vælg Gem som PDF for PDF)
- Adminlisten bruger enkel HTTP Basic Auth via konfiguration
- Data gemmes lokalt i SQLite uden databaseserver eller databaselogin
- Frontend serveres direkte fra samme dotnet app
## Opsætning
1. Sæt adminlogin via environment variables eller user secrets (kun nødvendigt for adminlisten):
```powershell
$env:Admin__Username="admin"
$env:Admin__Password="change-me"
```
2. Start appen:
```powershell
dotnet run
```
Appen opretter selv databasefilen `data/visitors.db` og `visitors`-tabellen. Data bevares efter genstart. Stien regnes fra projektmappen og kan ændres med `Database__Path`. Der kræves ingen databaseopsætning. En eventuel gammel `ConnectionStrings__Default` bruges ikke længere.
Tag backup af databasefilen, når appen er stoppet. Databasefiler er udeladt fra Git. Eksisterende data i PostgreSQL flyttes ikke automatisk.
Appen kører typisk på den URL, `dotnet run` skriver i terminalen, fx `http://localhost:5000`.
Postnummerlisten ligger lokalt i `wwwroot/postnumre.json`, så opslag virker uden internet. Data er hentet fra [GeoNames](https://download.geonames.org/export/zip/) den 2. oktober 2026 og bruges under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). Ukendte postnumre kan udfyldes manuelt. Opdater listen med `./scripts/update-postal-codes.ps1` (kræver internet).
## Docker-server uden Git-runner
Overfør `Dockerfile`, `compose.yaml`, `SkydesportensDag.csproj`, `Program.cs`, `appsettings.json`, `.dockerignore`, `.env.example` og mappen `wwwroot` til samme mappe på serveren med SCP/SFTP. Docker bygger appen på serveren; der kræves ingen .NET-installation eller Git-runner dér.
På serveren:
```sh
cp .env.example .env
chmod 600 .env
# Rediger .env og sæt Admin__Password samt ønsket port.
docker compose up -d --build
docker compose logs --tail=100 web
```
Appen lytter som standard på `127.0.0.1:5187` på serveren. En eksisterende reverse proxy kan sende trafik hertil; brug HTTPS ved adgang over internettet, da adminlogin bruger Basic Auth. Ved direkte adgang på det lokale netværk kan `APP_BIND` sættes til serverens LAN-adresse. En proxy i en anden container kræver tilpasning af Docker-netværket.
Databasen oprettes i Docker-volumenet `visitors-data` og bevares ved genstart og nye builds. `docker compose down -v` sletter databasen. Lokale registreringer overføres ikke automatisk; aftal overførsel af databasefilen, hvis de skal med.
Ved opdateringer overføres kodefilerne igen, og `docker compose up -d --build` køres. Bevar serverens `.env` og databasevolumen. Tag databasebackup, mens appen er stoppet.
Adminlisten viser et interaktivt kort med antal deltagere pr. postnummer. Positioner fra GeoNames ligger i wwwroot/postnummer-positioner.json og opdateres sammen med postnummerlisten. Leaflet 1.9.4 ligger lokalt i wwwroot/vendor/leaflet med licens. Baggrundskort fra OpenStreetMap kræver internet; navne og adresser sendes ikke til korttjenesten. Kortet opdateres efter sletning og udelades fra listeudskrift.