15 KiB
EveAI Cloud Architectuur
Overzicht
De EveAI applicatie draait op een moderne cloud-native architectuur met Kubernetes op Scaleway, beschermd door Bunny.net CDN en ondersteund door diverse managed services.
Architectuurdiagram (Aanbevolen Setup)
Internet
↓
DNS (askeveai.com - alle subdomains)
↓
Bunny.net CDN (Multi-domain setup)
├─ askeveai.com → WordPress Hosting -> Scaleway hosting (voorlopig enkel via plugin)
├─ evie-staging.askeveai.com → Scaleway LB → Staging Cluster
└─ evie.askeveai.com → Scaleway LB → Production Cluster
↓
Scaleway Load Balancer (Statisch IP)
↓
Kubernetes Cluster (Scaleway)
↓
Ingress Controller
↓
┌─────────────────────────────────────┐
│ Applicaties │
├─────────────────────────────────────┤
│ • eveai_app (staging/production) │
│ • eveai_api (staging/production) │
│ • eveai_workers (staging/production)│
│ • [andere pods] │
└─────────────────────────────────────┘
↓
┌─────────────────────────────────────┐
│ Managed Services │
├─────────────────────────────────────┤
│ • Redis (per environment) │
│ • PostgreSQL (per environment) │
│ • Object Storage (S3/Minio) │
└─────────────────────────────────────┘
Componenten
1. CDN & Security Layer
Bunny.net CDN
- Functie: Content Delivery Network en security gateway
- Voordelen:
- DDoS bescherming en attack mitigation
- Caching van statische bestanden
- Ontlasting van de backend cluster
- Verbeterde loading times voor eindgebruikers
- Web Application Firewall functionaliteit
2. DNS & Multi-Domain Routing
DNS Provider: EuroDNS
- Hosting: hosting.com (alleen WordPress hosting)
- Email: ProtonMail (via domein records)
- Application: Scaleway cluster
Bunny.net Pull Zone Setup
- Zone 1:
askeveai.com→ Origin: hosting.com WordPress - Zone 2:
evie-staging.askeveai.com→ Origin: Scaleway LB IP - Zone 3:
evie.askeveai.com→ Origin: Scaleway LB IP
DNS Records (EuroDNS) - Uitgebreid
; Web traffic via Bunny.net
A askeveai.com → Scaleway hosting IP
A evie-staging.askeveai.com → Bunny.net IP
A evie.askeveai.com → Bunny.net IP
A static.askeveai.com → Bunny.net IP (voor static assets)
; Email records (ProtonMail) - blijven direct
MX askeveai.com → mail.protonmail.ch (priority 10)
MX askeveai.com → mailsec.protonmail.ch (priority 20)
TXT askeveai.com → "v=spf1 include:_spf.protonmail.ch ~all"
TXT protonmail._domainkey.askeveai.com → [DKIM key van ProtonMail]
TXT _dmarc.askeveai.com → "v=DMARC1; p=quarantine; rua=..."
; Subdomains for email (if needed)
CNAME autodiscover.askeveai.com → autodiscover.protonmail.ch
CNAME autoconfig.askeveai.com → autoconfig.protonmail.ch
3. Infrastructure Layer
Scaleway Load Balancer
- Type: Statisch extern IP adres
- Functie: Entry point naar Kubernetes cluster
- Locatie: Voor de cluster, distribueert verkeer naar Ingress
Kubernetes Cluster (Scaleway)
- Ingress Controller: Routeert aanvragen naar juiste services
- Workloads:
eveai_app: Frontend applicatieeveai_api: Backend API serviceseveai_workers: Background processing- Aanvullende applicatieve pods
4. Monitoring & Observability
Prometheus Stack (In-cluster)
- Functie: Business events monitoring
- Scope: Applicatie-specifieke metrics en events
Scaleway Cockpit
- Functie: Infrastructure monitoring
- Scope: Performance en infrastructuur componenten
5. Managed Services
Redis (Scaleway Managed)
- Functie: Caching layer
- Voordeel: Reduced latency, session storage
PostgreSQL (Scaleway Managed)
- Functie: Primaire database
- Voordeel: Managed backups, high availability
Object Storage (Scaleway)
- Interface: S3-compatible via Minio client
- Functie: File storage, static assets, backups
Architectuuroverwegingen
Huidige Setup Evaluatie
Sterke Punten:
- ✅ Goede separation of concerns
- ✅ Gebruik van managed services vermindert operationele overhead
- ✅ CDN voor performance en security
- ✅ Container-native met Kubernetes
- ✅ Comprehensive monitoring setup
Potentiële Verbeteringen:
- ✅ Multi-domain setup via Bunny.net: Alle traffic via CDN
- ✅ Environment isolation: Aparte origins voor staging/production
- 🤔 Origin Protection: Firewall rules om direct access te voorkomen
- 🤔 Kubernetes Ingress: Host-based routing configureren voor multi-environment
Email & DNS Overwegingen
Email via ProtonMail (Blijft Direct)
Belangrijke opmerking: Email records gaan NIET via Bunny.net. CDN's zijn alleen voor web traffic (HTTP/HTTPS). Email gebruikt andere protocollen (SMTP, IMAP, POP3) die niet via een CDN kunnen.
Wat blijft hetzelfde:
- MX records blijven wijzen naar ProtonMail servers
- SPF, DKIM, DMARC records blijven ongewijzigd
- Email functionaliteit wordt niet beïnvloed door Bunny.net
Voordeel van je setup:
- DNS bij EuroDNS: Flexibel om records te beheren
- Hosting bij hosting.com: Makkelijk te migreren later
- Email bij ProtonMail: Blijft stabiel tijdens migraties
DNS Migratie Strategie (Vereenvoudigd)
Huidige situatie:
EuroDNS → hosting.com (WordPress + email config via cPanel)
Nieuwe situatie:
EuroDNS → Bunny.net (web) + ProtonMail (email direct)
Migratiestappen:
- Preparatie: Email records van cPanel naar EuroDNS overbrengen
- Bunny.net setup: Pull zones configureren
- DNS switch: A records naar Bunny.net, MX records direct naar ProtonMail
- Later: hosting.com opzeggen
Bunny.net Setup Guide
Stap 1: Pull Zones Aanmaken
Pull Zone 1: WordPress Site
Name: askeveai-wordpress
Hostname: askeveai.com
Origin URL: [hosting.com server IP/URL]
Pull Zone 2: Staging Environment
Name: evie-staging
Hostname: evie-staging.askeveai.com
Origin URL: http://[scaleway-lb-ip]
Host Header: evie-staging.askeveai.com
Pull Zone 3: Production Environment
Name: evie-production
Hostname: evie.askeveai.com
Origin URL: http://[scaleway-lb-ip]
Host Header: evie.askeveai.com
Pull Zone 4: Static Assets - Bunny Storage (Aanbevolen)
Name: static-assets
Type: Push Zone (Bunny Storage)
Hostname: static.askeveai.com
Storage: Direct upload to Bunny Storage
API: FTP/SFTP/REST API upload
Alternatief: Pull Zone van Scaleway S3
Name: static-assets-s3
Type: Pull Zone
Hostname: static.askeveai.com
Origin URL: https://[scaleway-s3-bucket].s3.fr-par.scw.cloud
Stap 2: SSL/TLS Configuratie
- Force SSL: Aan voor alle zones
- SSL Certificate: Let's Encrypt (gratis) of Bunny.net certificates
- Origin Shield: Europa (voor betere performance naar Scaleway)
Stap 3: Security Settings
- Origin Shield Protection: Alleen Bunny.net IP's kunnen origin bereiken
- WAF Rules: Basis DDoS en attack protection
- Rate Limiting: Per domain/endpoint configureren
Static Assets Optimalisatie
Huidige Aanpak (Sub-optimaal)
Browser → Bunny.net → Scaleway LB → Ingress → App Pod → Static file
Aanbevolen Aanpak: Direct Static Delivery
Browser → Bunny.net Edge → Static file (gecached op edge)
Implementatie Strategieën
Optie 1: Bunny Storage (Aanbevolen)
Build Process → Bunny Storage → Bunny CDN Edge → Browser
- Upload: Direct naar Bunny Storage via API/FTP
- Serve: Native performance, geen extra hops
- Cost: Meestal goedkoper dan S3 + CDN
- Speed: Optimaal, storage en CDN geïntegreerd
Optie 2: Scaleway Object Storage + Pull Zone
Build Process → Scaleway S3 → Bunny Pull Zone → Browser
- Upload: App → Scaleway S3 bucket
- Serve: Bunny.net cache van S3 bucket
- Voordeel: Backup in je eigen cloud, data sovereignty
- Nadeel: Extra latency voor eerste request
Optie 3: Hybrid Approach
- Critical assets: Bunny Storage (logo, CSS, JS)
- User uploads: Scaleway S3 → Bunny Pull Zone
- Development: Local static serving
Bunny Storage vs Scaleway S3
| Aspect | Bunny Storage | Scaleway S3 + Pull Zone |
|---|---|---|
| Performance | ⭐⭐⭐⭐⭐ Native CDN | ⭐⭐⭐⭐ Extra hop |
| Cost | ⭐⭐⭐⭐⭐ Integrated pricing | ⭐⭐⭐ S3 + CDN costs |
| Simplicity | ⭐⭐⭐⭐⭐ One provider | ⭐⭐⭐ Two systems |
| Data Control | ⭐⭐⭐ At Bunny | ⭐⭐⭐⭐⭐ In your cloud |
| Backup/Sync | ⭐⭐⭐ Bunny dependent | ⭐⭐⭐⭐⭐ Full control |
File Types voor Static Delivery
Ideaal voor CDN:
- ✅ Images (JPG, PNG, WebP, SVG)
- ✅ CSS files
- ✅ JavaScript bundles
- ✅ Fonts (WOFF2, etc.)
- ✅ Videos/audio files
- ✅ PDF documents
- ✅ Icons en favicons
Blijven via app:
- ❌ Dynamic API responses
- ❌ User-generated content (tenzij via upload flow)
- ❌ Authentication-required files
Kubernetes Ingress Configuratie
Met de multi-domain setup via Bunny.net moet je Ingress ook aangepast worden:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: eveai-ingress
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false" # SSL handled by Bunny.net
spec:
rules:
- host: evie-staging.askeveai.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: eveai-staging-service
port:
number: 80
- host: evie.askeveai.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: eveai-production-service
port:
number: 80
Migratiestrategie (Uitgebreid)
Fase 1: Bunny.net Setup (Geen downtime)
- Maak Pull Zones aan in Bunny.net
- Test via Bunny.net hostnames (zonder DNS wijziging)
- Configureer caching en security rules
Fase 2: DNS Migratie (Minimale downtime)
- Kopieer email records van cPanel naar EuroDNS
- Verlaag TTL van huidige DNS records (1 uur van tevoren)
- Wijzig A records naar Bunny.net (MX records blijven ProtonMail)
- Monitor traffic en performance
Fase 3: Origin Protection
- Configureer Scaleway firewall om alleen Bunny.net IP's toe te laten
- Test alle functionaliteit
- Monitor security logs
Fase 4: WordPress Migratie naar Scaleway (Optioneel)
Planning overwegingen:
- Database: WordPress DB naar Scaleway PostgreSQL of aparte MySQL
- Files: wp-content naar Scaleway Object Storage
- SSL: Blijft via Bunny.net (geen wijzigingen)
- Performance: Mogelijk sneller door proximity met EveAI
Migratie opties:
- Lift & Shift: VM op Scaleway met traditionele LAMP stack
- Modernisering: WordPress in Kubernetes container
- Hybrid: Behoud hosting.com tot je tevreden bent met K8s setup
Fase 5: Hosting.com Opzegging
- Bevestig WordPress werkt 100% op Scaleway
- Final backup van hosting.com
- Annuleer hosting.com contract
- Email en EveAI blijven ongestoord werken
Toekomstige Evolutie: WordPress op Scaleway
Optie 1: WordPress als Managed Service
Scaleway WordPress Hosting (als beschikbaar)
- Managed WordPress environment
- Automatische updates en backups
- Geïntegreerd met andere Scaleway services
Optie 2: WordPress in Kubernetes Cluster
Voordelen:
- ✅ Alles op één platform (Scaleway)
- ✅ Gedeelde resources en monitoring
- ✅ Consistent deployment pipeline
- ✅ Cost optimization
- ✅ Uniform backup/disaster recovery
WordPress in K8s Setup:
# WordPress Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: wordpress-deployment
spec:
replicas: 2
selector:
matchLabels:
app: wordpress
template:
spec:
containers:
- name: wordpress
image: wordpress:6-apache
env:
- name: WORDPRESS_DB_HOST
value: [scaleway-postgresql-endpoint]
- name: WORDPRESS_DB_NAME
value: wordpress_db
volumeMounts:
- name: wordpress-storage
mountPath: /var/www/html/wp-content
volumes:
- name: wordpress-storage
persistentVolumeClaim:
claimName: wordpress-pvc
Optie 3: WordPress op Scaleway Instances
Instance-based hosting:
- Dedicated VM voor WordPress
- Meer controle over environment
- Traditionele hosting aanpak op moderne cloud
Aanbevolen Aanpak: Kubernetes
Architectuur zou worden:
Bunny.net CDN
├─ askeveai.com → Scaleway LB → WordPress Pod
├─ evie-staging.askeveai.com → Scaleway LB → EveAI Staging
└─ evie.askeveai.com → Scaleway LB → EveAI Production
Gedeelde Resources:
- PostgreSQL: Aparte database voor WordPress + EveAI
- Object Storage: WordPress media + EveAI assets
- Redis: WordPress caching + EveAI caching
- Monitoring: Unified observability voor alles
Disaster Recovery & Backup
- Database: Managed PostgreSQL automated backups
- Object Storage: Cross-region replication overwegen
- Application State: Stateless design waar mogelijk
- Configuration: GitOps approach voor cluster configuration
Conclusie
De voorgestelde architectuur biedt een uitstekende balans tussen performance, security en operationele eenvoud. Door alles via Bunny.net te routeren krijg je:
Directe voordelen:
- Uniforme security en performance voor alle domeinen
- Eenvoudige SSL management
- Cost-effective CDN voor alle content
- Flexibiliteit voor toekomstige migraties
Strategische voordelen:
- Scaleway consolidatie: Mogelijk om WordPress ook naar Scaleway te migreren
- Operational simplicity: Eén cloud provider voor applicatie infrastructure
- Cost optimization: Gedeelde resources en bundelvoordelen
- Technical consistency: Uniform tooling en monitoring
Aanbevolen roadmap:
- Nu: Bunny.net implementeren voor alle domeinen
- Q1 2026: WordPress evalueren voor Scaleway migratie
- Q2 2026: hosting.com contract beëindigen
- Resultaat: Volledig cloud-native platform op Scaleway + Bunny.net
Deze aanpak maximaliseert flexibiliteit terwijl risico's worden geminimaliseerd door gefaseerde implementatie.
Architectuurdocument gegenereerd op: Augustus 2025