De installatiestappen in de README waren niet uitvoerbaar en het deploy-script kon stilzwijgend werk vernietigen. README: - `python manage.py migrate` liep vast op `RuntimeError: DJANGO_SECRET_KEY ontbreekt`. DEBUG staat standaard uit en dan is die sleutel verplicht; de instructies noemden `DJANGO_DEBUG` nergens. Nu toegevoegd, met uitleg. - `createsuperuser` stond als "optioneel, voor /admin/". Dat klopt niet: de hele API staat op `IsAuthenticated`, dus zonder account kom je de app helemaal niet in. Nu gemarkeerd als verplichte stap. - Stap voor een virtual environment toegevoegd (pip installeerde anders in de systeem-Python, wat op recente distributies afketst op PEP 668). - Node-eis vermeld: Vite 8 vereist 20.19+ of 22.12+. - Verouderde beschrijvingen bijgewerkt: de tabs van het roosterscherm (Week/Genereren/Instellingen in plaats van Weekrooster/Conflicten/ Schooljaar/Instellingen), Groepsindeling is een eigen scherm en geen tab, en er zijn twaalf modules in plaats van "twee voorbeeldmodules". DEPLOY.md: - `git clone .../Roostersoftware.git` + `cd Roostersoftware` gebruikte de verkeerde repo-naam; dat is `roosterwijs`. - CSRF-origin en FRONTEND_BASE_URL stonden als http-voorbeeld; achter TLS moet dat https zijn. - Rechtgezet: `DJANGO_CSRF_TRUSTED_ORIGINS` blokkeert het inloggen in de app niet (DRF-views zijn `csrf_exempt`), maar wel de Django-admin. - Vermeld dat er nergens automatisch een account wordt aangemaakt. scripts/deploy.sh: - Stopt nu als `.env` ontbreekt; anders start de stack met lege variabelen en faalt de backend met een onduidelijke fout. - Stopt bij lokale wijzigingen in plaats van ze met `git reset --hard` weg te gooien; bewust overschrijven kan met `--force`. - Controleert vooraf of Docker en de compose-plugin er zijn. - Toont welke commits erbij komen (oud -> nieuw) in plaats van alleen de nieuwe HEAD. - Controleert na afloop of de backend antwoordt en of er een actief account bestaat, met het createsuperuser-commando als dat er niet is. frontend/Dockerfile: - Bouwt op node:22-alpine in plaats van node:20-alpine, gelijk aan de CI en ruim binnen de Node-eis van Vite 8. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FAQ4Np13v8fwbTtKHKnwDz
102 lines
3.5 KiB
Bash
Executable file
102 lines
3.5 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
# Op de test-server: haal de laatste code op en herbouw de containers.
|
|
#
|
|
# Gebruik: ./scripts/deploy.sh [--force]
|
|
# --force ook doorgaan als er lokale wijzigingen zijn
|
|
# (let op: die worden dan overschreven)
|
|
set -euo pipefail
|
|
cd "$(dirname "$0")/.."
|
|
|
|
force=0
|
|
for arg in "${@:-}"; do
|
|
case "$arg" in
|
|
"") ;;
|
|
--force) force=1 ;;
|
|
*) echo "Onbekende optie: $arg" >&2; exit 2 ;;
|
|
esac
|
|
done
|
|
|
|
# --- Vooraf controleren ---------------------------------------------------
|
|
if ! command -v docker >/dev/null 2>&1; then
|
|
echo "FOUT: docker is niet geïnstalleerd op deze server." >&2
|
|
exit 1
|
|
fi
|
|
if ! docker compose version >/dev/null 2>&1; then
|
|
echo "FOUT: 'docker compose' werkt niet (compose-plugin ontbreekt)." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Zonder .env start de stack met lege variabelen: compose vult dan overal
|
|
# lege strings in, de backend ziet geen POSTGRES_DB (valt terug op SQlite in
|
|
# de container) en weigert te starten omdat DJANGO_SECRET_KEY ontbreekt.
|
|
if [ ! -f .env ]; then
|
|
echo "FOUT: .env ontbreekt in $(pwd)." >&2
|
|
echo " Maak hem aan met: cp .env.example .env && nano .env" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# 'git reset --hard' hieronder gooit lokale aanpassingen weg — bijvoorbeeld een
|
|
# met de hand aangepaste nginx.conf. Daarom eerst waarschuwen.
|
|
if [ -n "$(git status --porcelain)" ]; then
|
|
echo "LET OP: er staan lokale wijzigingen in deze map:"
|
|
git --no-pager status --short | sed 's/^/ /'
|
|
if [ "$force" -ne 1 ]; then
|
|
echo
|
|
echo "Die gaan verloren bij het bijwerken. Zet ze eerst veilig, of draai:" >&2
|
|
echo " ./scripts/deploy.sh --force" >&2
|
|
exit 1
|
|
fi
|
|
echo "--force opgegeven: deze wijzigingen worden overschreven."
|
|
fi
|
|
|
|
# --- Code bijwerken -------------------------------------------------------
|
|
branch="$(git rev-parse --abbrev-ref HEAD)"
|
|
oud="$(git rev-parse --short HEAD)"
|
|
echo "Branch: $branch (nu op $oud)"
|
|
|
|
git fetch origin
|
|
git reset --hard "origin/$branch"
|
|
nieuw="$(git rev-parse --short HEAD)"
|
|
|
|
if [ "$oud" = "$nieuw" ]; then
|
|
echo "Geen nieuwe commits; containers worden wel opnieuw gebouwd."
|
|
else
|
|
echo "Bijgewerkt: $oud -> $nieuw"
|
|
git --no-pager log --oneline "$oud..$nieuw" | sed 's/^/ /'
|
|
fi
|
|
|
|
# --- Bouwen en starten ----------------------------------------------------
|
|
docker compose up -d --build
|
|
|
|
# --- Controleren ----------------------------------------------------------
|
|
echo
|
|
echo "Controle: frontend-bundel aanwezig?"
|
|
if docker compose exec -T nginx sh -c 'ls /usr/share/nginx/html/assets/*.js >/dev/null 2>&1'; then
|
|
echo " frontend OK"
|
|
else
|
|
echo " GEEN frontend-bundel gevonden"
|
|
fi
|
|
|
|
echo "Controle: reageert de backend?"
|
|
docker compose exec -T backend python -c "
|
|
import urllib.request, urllib.error
|
|
try:
|
|
r = urllib.request.urlopen('http://127.0.0.1:8000/api/info/', timeout=5)
|
|
print(' backend OK (HTTP', r.status, ')')
|
|
except urllib.error.HTTPError as e:
|
|
print(' backend OK (HTTP', e.code, '- reageert)')
|
|
except Exception as e:
|
|
print(' GEEN antwoord van de backend:', e)
|
|
" || echo " Kon de backend niet bereiken — zie 'docker compose logs backend'."
|
|
|
|
echo "Controle: is er een gebruiker om mee in te loggen?"
|
|
docker compose exec -T backend python manage.py shell -c "
|
|
from django.contrib.auth import get_user_model
|
|
n = get_user_model().objects.filter(is_active=True).count()
|
|
print(' actieve gebruikers:', n)
|
|
if n == 0:
|
|
print(' LET OP: geen actief account. Maak er een met:')
|
|
print(' docker compose exec backend python manage.py createsuperuser')
|
|
" || echo " Kon de gebruikers niet tellen — zie 'docker compose logs backend'."
|
|
|
|
echo "Klaar."
|