461 lines
15 KiB
Markdown
461 lines
15 KiB
Markdown
# 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* |