97 lines
3.1 KiB
Markdown
97 lines
3.1 KiB
Markdown
# Draaien op de test-server (Docker)
|
|
|
|
De stack bestaat uit drie containers:
|
|
|
|
| Container | Rol |
|
|
|-----------|-----|
|
|
| `db` | PostgreSQL (data in een Docker-volume) |
|
|
| `backend` | Django via gunicorn |
|
|
| `nginx` | serveert de React-frontend en stuurt `/api` + `/admin` door naar de backend |
|
|
|
|
Je hoeft op de server **niets** te installeren behalve Docker zelf (met de
|
|
`docker compose`-plugin). Python, Node, Postgres enz. zitten in de images.
|
|
|
|
## Eenmalig: server klaarzetten
|
|
|
|
1. Zorg dat Docker + Compose op de test-server staan:
|
|
```bash
|
|
docker --version
|
|
docker compose version
|
|
```
|
|
2. Haal de code op:
|
|
```bash
|
|
git clone <jouw-forgejo-url>/Roostersoftware.git
|
|
cd Roostersoftware
|
|
```
|
|
3. Maak het `.env`-bestand aan vanuit het voorbeeld en vul echte waarden in:
|
|
```bash
|
|
cp .env.example .env
|
|
nano .env
|
|
```
|
|
Belangrijk om aan te passen:
|
|
- `DJANGO_SECRET_KEY` — genereer met
|
|
`python3 -c "import secrets; print(secrets.token_urlsafe(50))"`
|
|
- `DJANGO_ALLOWED_HOSTS` — de hostnaam/IP van de test-server
|
|
- `DJANGO_CSRF_TRUSTED_ORIGINS` — `http://<host>:8080` (of je echte URL)
|
|
- `POSTGRES_PASSWORD` — een sterk wachtwoord
|
|
|
|
`.env` staat in `.gitignore` en komt dus **niet** in git — dat hoort zo.
|
|
|
|
## Starten
|
|
|
|
```bash
|
|
docker compose up -d --build
|
|
```
|
|
|
|
Wat er dan gebeurt: Postgres start, de backend wacht tot de database er is,
|
|
voert automatisch de migraties en `collectstatic` uit, en gunicorn + nginx
|
|
komen op. De app is bereikbaar op:
|
|
|
|
```
|
|
http://<server-host>:8080
|
|
```
|
|
|
|
(Poort `8080` staat ingesteld in `docker-compose.yml` bij de `nginx`-service;
|
|
pas hem daar aan als die poort bezet is.)
|
|
|
|
### Eerste keer: beheerder aanmaken
|
|
|
|
```bash
|
|
docker compose exec backend python manage.py createsuperuser
|
|
```
|
|
|
|
Daarna kun je inloggen op `http://<server-host>:8080/admin/`.
|
|
|
|
## Updaten na nieuwe code
|
|
|
|
```bash
|
|
git pull
|
|
docker compose up -d --build
|
|
```
|
|
|
|
Migraties draaien automatisch mee bij het opstarten van de backend.
|
|
|
|
## Handige commando's
|
|
|
|
| Doel | Commando |
|
|
|------|----------|
|
|
| Logs volgen | `docker compose logs -f` |
|
|
| Alleen backend-logs | `docker compose logs -f backend` |
|
|
| Status containers | `docker compose ps` |
|
|
| Stoppen | `docker compose down` |
|
|
| Stoppen **incl. database wissen** | `docker compose down -v` (let op: gegevens weg!) |
|
|
| Migratie handmatig | `docker compose exec backend python manage.py migrate` |
|
|
| Django-shell | `docker compose exec backend python manage.py shell` |
|
|
|
|
## Aandachtspunten
|
|
|
|
- **HTTPS/domein:** deze opzet draait op poort 8080 zonder TLS. Voor productie
|
|
zet je er een reverse proxy (bv. Caddy of Traefik) vóór die HTTPS regelt, of
|
|
je breidt de nginx-config uit met certificaten. De nginx-container is daar al
|
|
het logische punt voor.
|
|
- **Backups:** de database leeft in het volume `pgdata`. Maak hiervan backups,
|
|
bijvoorbeeld met `docker compose exec db pg_dump -U rooster rooster > backup.sql`.
|
|
- **`DJANGO_DEBUG` blijft 0** op de server. Zet hem nooit op 1 in productie.
|
|
- **Test eerst hier, dan productie:** bouw het image één keer, test op deze
|
|
server, en draai exact dezelfde code/compose op de productieserver met een
|
|
eigen `.env`.
|