This repository has been archived on 2026-02-06. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
serengo/docs/sections/deployment.typ
2025-12-26 16:05:00 +01:00

87 lines
4.2 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#heading[Deployment stappen]
Serengo ondersteunt meerdere deployment-scenario's, waaronder Vercel en een self-hosted Docker-omgeving [@docker-docs]. In dit hoofdstuk worden de belangrijkste concepten, vereiste configuratie en een concreet stappenplan beschreven.
== Vereiste environment-variabelen
Voor een werkende productieomgeving zijn minimaal de volgende variabelen nodig (zie ook `logs/logboek.md`):
```bash
DATABASE_URL= # PostgreSQL-verbinding
GOOGLE_CLIENT_ID= # Google OAuth client ID
GOOGLE_CLIENT_SECRET= # Google OAuth secret
R2_ACCOUNT_ID= # Cloudflare R2 account ID
R2_ACCESS_KEY_ID= # Cloudflare R2 access key
R2_SECRET_ACCESS_KEY= # Cloudflare R2 secret key
R2_BUCKET_NAME= # Cloudflare R2 bucket-naam
VAPID_PUBLIC_KEY= # Web Push public key
VAPID_PRIVATE_KEY= # Web Push private key
GOOGLE_MAPS_API_KEY= # Google Places API key
```
Deze worden tijdens build en runtime ingelezen door de SvelteKit-app en de server-side services (`auth`, `r2`, `push`, `places`).
== Vercel-deployment (cloud)
In een Vercel-scenario wordt de app gedeployed met behulp van `@sveltejs/adapter-vercel` (aanwezig als dependency). Belangrijke aandachtspunten:
- De SvelteKit-app wordt als serverless of edge-functies uitgerold, afhankelijk van de Vercel-configuratie.
- `DATABASE_URL` moet verwijzen naar een publiek bereikbare PostgreSQL-instantie (bijv. een managed database).
- Cloudflare R2 en Web Push blijven extern; de nodige secrets worden als Vercel environment-variabelen ingesteld.
== Self-hosted Docker-deployment
Voor een zelfgehoste omgeving is een uitgebreide Docker-setup voorzien (Phase 7 in het logboek):
- Multi-stage Docker build om een compacte productie-image te maken.
- Health checks om de beschikbaarheid van de container te monitoren.
- Een entrypoint-script dat bij het starten van de container automatisch Drizzle-migraties uitvoert.
- Drizzle als production dependency, zodat migraties ook in de container kunnen draaien.
Typische stappen voor een self-hosted deployment zijn:
1. Zorg voor een draaiende PostgreSQL-instantie (lokaal, via `docker-compose` of extern) en vul de `DATABASE_URL` correct in.
2. Stel alle vereiste environment-variabelen in voor de app (zie boven).
3. Bouw de Docker-image, bijvoorbeeld met:
```bash
docker build -t serengo:latest .
```
4. Start de container met de juiste environment-variabelen en netwerkconfiguratie, bijvoorbeeld via
`docker-compose`:
```bash
docker-compose up -d
```
5. Het entrypoint-script in `docker-entrypoint.sh` zorgt ervoor dat `pnpm run db:migrate` (of een equivalent via `drizzle-kit`) uitgevoerd wordt bij het opstarten, zodat de database-schema's up-to-date zijn.
6. Controleer de logs en health checks om na te gaan of de app correct draait.
== Van ontwikkeling naar productie
Samengevat ziet de route van lokale ontwikkeling naar productie er als volgt uit:
1. Lokaal ontwikkelen met `pnpm run dev`, frequent linten en typen checken (`pnpm run lint`, `pnpm run check`).
2. Database- en schemawijzigingen doorvoeren met Drizzle (`db:generate`, `db:migrate`, `db:generate-erd`).
3. De productiebuild genereren met `pnpm run build` en lokaal testen via `pnpm run preview`.
4. Deployen naar Vercel of bouwen en uitrollen van de Docker-image in een self-hosted omgeving.
Door de geautomatiseerde migraties en consistente configuratie is het deploymentproces herhaalbaar en betrouwbaar.
== Aanvullende documentatie en hosting
Naast deze paper is er een aparte API-referentie beschikbaar, opgebouwd met Mintlify en gehost op mijn eigen domein:
- *API-documentatie*: `https://docs.zias.be` Mintlify-documentatie [@mintlify-docs] voor de Serengo-API.
De volledige broncode van Serengo wordt self-hosted op mijn eigen Git-server:
- *Broncode-repository*: `https://git.zias.be/zias/serengo` privé Git-instantie met de volledige Serengo broncode.
De productieversie van de Serengo-applicatie draait op mijn eigen Hetzner VPS [@hetzner-cloud], uitgerold met Docker [@docker-docs]:
- *Live-applicatie*: `https://serengo.zias.be` SvelteKit-app in Docker-container op een Hetzner VPS.
Deze deployment zorgt ervoor dat zowel de code als de infrastructuur volledig in eigen beheer zijn, zonder afhankelijkheid van publieke Git-hosting of PaaS-platformen.