87 lines
4.2 KiB
XML
87 lines
4.2 KiB
XML
#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.
|