61 lines
3.4 KiB
Markdown
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.
|