# 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 applicatie - `eveai_api`: Backend API services - `eveai_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:** 1. **Preparatie**: Email records van cPanel naar EuroDNS overbrengen 2. **Bunny.net setup**: Pull zones configureren 3. **DNS switch**: A records naar Bunny.net, MX records direct naar ProtonMail 4. **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: ```yaml 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) 1. Maak Pull Zones aan in Bunny.net 2. Test via Bunny.net hostnames (zonder DNS wijziging) 3. Configureer caching en security rules ### Fase 2: DNS Migratie (Minimale downtime) 1. Kopieer email records van cPanel naar EuroDNS 2. Verlaag TTL van huidige DNS records (1 uur van tevoren) 3. Wijzig A records naar Bunny.net (MX records blijven ProtonMail) 4. Monitor traffic en performance ### Fase 3: Origin Protection 1. Configureer Scaleway firewall om alleen Bunny.net IP's toe te laten 2. Test alle functionaliteit 3. 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:** 1. **Lift & Shift**: VM op Scaleway met traditionele LAMP stack 2. **Modernisering**: WordPress in Kubernetes container 3. **Hybrid**: Behoud hosting.com tot je tevreden bent met K8s setup ### Fase 5: Hosting.com Opzegging 1. Bevestig WordPress werkt 100% op Scaleway 2. Final backup van hosting.com 3. Annuleer hosting.com contract 4. 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:** ```yaml # 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:** 1. **Nu**: Bunny.net implementeren voor alle domeinen 2. **Q1 2026**: WordPress evalueren voor Scaleway migratie 3. **Q2 2026**: hosting.com contract beëindigen 4. **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*