Files
leerdoelen_tracker/README.md
2026-02-28 00:02:02 +01:00

213 lines
5.6 KiB
Markdown

# Leerdoelen Tracker
Leerdoelen-opvolgsysteem voor GO! scholengroepen.
## Rollenstructuur
| Rol | Wat kan die? |
|---|---|
| `superadmin` | Platformbeheer, scholengroep ICT aanwijzen |
| `scholengroep_ict` | Scholen aanmaken, school ICT en directeurs toewijzen |
| `school_ict` | Leerkrachten en klassen van eigen school beheren |
| `director` | Overzicht van eigen school raadplegen |
| `teacher` | Leerdoelen invullen |
Alle gebruikers (behalve superadmin) loggen in via **Microsoft Entra ID**.
---
## Snelle start
```bash
# 1. Configuratie
cp .env.example .env
# Vul POSTGRES_PASSWORD, SECRET_KEY, BASE_URL en Entra gegevens in
# 2. JSON doelen klaarzetten
# Voer converteer_doelen.py uit en kopieer de doelen/ map hier
# 3. Opstarten
docker compose up -d
# 4. Superadmin wachtwoord instellen
# Ga naar http://localhost/auth/setup
```
---
## Entra ID configureren
1. Ga naar https://portal.azure.com → **App registrations****New registration**
2. Naam: `Leerdoelen Tracker`
3. **Supported account types**: kies **"Accounts in any organizational directory (Any Microsoft Entra ID tenant - Multitenant)"**
- Dit is cruciaal! Elke school heeft een eigen tenant.
4. **Redirect URI**: `https://jouwdomain.be/auth/callback`
5. Na aanmaken → **Certificates & secrets** → nieuwe client secret aanmaken
6. Kopieer **Application (client) ID** en de secret naar `.env`
### Benodigde API permissions
- `openid` (ingebouwd)
- `profile` (ingebouwd)
- `email` (ingebouwd)
- `User.Read` (Microsoft Graph)
---
## Opstartflow voor een nieuwe scholengroep
### Stap 1: Superadmin setup (eenmalig)
```
http://jouwdomain.be/auth/setup
→ Stel wachtwoord in voor admin@leerdoelen.local
```
### Stap 2: Scholengroep ICT toevoegen (superadmin)
```
Dashboard → Scholengroep ICT → Toevoegen
→ Vul Microsoft e-mailadres in van de ICT-medewerker
→ Zij loggen in via "Inloggen met Microsoft" en krijgen automatisch de juiste rol
```
### Stap 3: Scholen aanmaken (scholengroep ICT)
```
Dashboard → School toevoegen
→ Naam: "Basisschool De Krekel"
→ E-maildomeinen: "dekrekel.be" (optioneel, voor automatische koppeling)
```
### Stap 4: Directeur/School ICT toevoegen (scholengroep ICT)
```
Dashboard → Gebruiker toevoegen
→ Selecteer school, vul Microsoft e-mail in, kies rol
```
### Stap 5: Leerkrachten toevoegen (school ICT of directeur)
```
Directeur dashboard → Leerkracht toevoegen
```
---
## Automatische schoolkoppeling via e-maildomein
Als je een e-maildomein koppelt aan een school (bv. `dekrekel.be`),
dan wordt elke nieuwe gebruiker die inlogt met een adres op dat domein
**automatisch** aan die school gekoppeld met de rol `teacher`.
Handig als leerkrachten zelf de URL krijgen en inloggen zonder dat je
ze eerst handmatig hoeft toe te voegen.
---
## Onderhoud
### Database backup
```bash
docker compose exec db pg_dump -U leerdoelen leerdoelen > backup_$(date +%Y%m%d).sql
```
### Doelen updaten
```bash
# Nieuwe JSON bestanden kopiëren
cp -r doelen/ /pad/naar/leerdoelen/doelen/
docker compose restart backend
```
### Logs
```bash
docker compose logs -f backend
```
---
## CI/CD via Gitea Actions
### Hoe het werkt
Bij elke push op `main`:
1. Runner bouwt de Docker image van `./backend`
2. Image wordt gepusht naar de Gitea Container Registry met twee tags:
- `:latest` — altijd de meest recente versie
- `:sha-<commithash>` — voor traceerbaarheid en rollback
3. Runner SSH't naar de VPS → `docker compose pull && docker compose up -d`
### Eenmalige setup in Gitea
#### 1. Repository variabelen (Settings → Actions → Variables)
| Naam | Waarde | Uitleg |
|---|---|---|
| `GITEA_REGISTRY` | `gitea.jouwdomein.be` | Hostname van je Gitea instantie |
#### 2. Repository secrets (Settings → Actions → Secrets)
| Naam | Waarde | Uitleg |
|---|---|---|
| `REGISTRY_USER` | `jouw-gitea-gebruikersnaam` | Gitea login voor de registry |
| `REGISTRY_TOKEN` | `gitea_xxxx...` | Gitea Access Token (Settings → Applications → Generate token, scope: `package:write`) |
| `DEPLOY_HOST` | `123.456.789.0` | IP of hostnaam van de app-VPS |
| `DEPLOY_USER` | `deploy` | SSH gebruiker op de VPS |
| `DEPLOY_SSH_KEY` | `-----BEGIN OPENSSH...` | Privésleutel (zie stap 3) |
| `DEPLOY_PORT` | `22` | SSH poort (weglaten = standaard 22) |
| `DEPLOY_PATH` | `/opt/leerdoelen` | Pad naar de docker-compose map op de VPS |
#### 3. SSH deploy key aanmaken
Voer dit uit op je **lokale machine** (niet op de VPS):
```bash
ssh-keygen -t ed25519 -C "gitea-deploy" -f ~/.ssh/gitea_deploy -N ""
```
Publieke sleutel toevoegen aan de VPS:
```bash
cat ~/.ssh/gitea_deploy.pub | ssh user@jouw-vps "cat >> ~/.ssh/authorized_keys"
```
Privésleutel kopiëren naar Gitea secret `DEPLOY_SSH_KEY`:
```bash
cat ~/.ssh/gitea_deploy
```
#### 4. `.env` op de VPS aanpassen
Voeg toe aan `/opt/leerdoelen/.env`:
```
BACKEND_IMAGE=gitea.jouwdomein.be/jouw-org/leerdoelen-tracker:latest
```
#### 5. Eerste push
```bash
git init
git remote add origin https://gitea.jouwdomein.be/jouw-org/leerdoelen-tracker.git
git add .
git commit -m "Initial commit"
git push -u origin main
```
De pipeline start automatisch. Je kan de voortgang volgen via
**Gitea → jouw repo → Actions**.
### Handmatig deployen
Via de Gitea UI: **Actions → Build, Push & Deploy → Run workflow**
Of via de VPS zelf (zonder pipeline):
```bash
cd /opt/leerdoelen
docker compose pull backend
docker compose up -d --no-deps backend
```
### Rollback naar vorige versie
```bash
# Bekijk beschikbare tags in de registry
# Pas de image tag aan in .env:
BACKEND_IMAGE=gitea.jouwdomein.be/jouw-org/leerdoelen-tracker:sha-a1b2c3d4
docker compose pull backend
docker compose up -d --no-deps backend
```