Engineering
Diese Website wurde gelöscht

Bis vor kurzem haben wir unsere Webseite als Static Web App auf Microsoft Azure betrieben. Jetzt haben wir den Umstieg auf eine europäische Lösung durchgezogen. Das hat diese Vorteile:
- Wir arbeiten mit lokaler Technologie
- Wir haben die letzten Azure Ressourcen aufgelöst
- Wir unterstützen auch direkt IPV6 Clients

Ausgangsbasis
Wir erzeugen unsere Website mit dem statischen Website-Generator Hugo. Die Daten dazu sind in einem GitHub-Repository abgelegt. Änderungen daran werden automatisch mit einer kleinen Pipeline gepublisht.
Ein Workflow, der für uns als tech-affine Leute ideal ist. Für die Besucher bedeutet es eine performante und zuverlässige Erfahrung, ohne dass wir viel in Wartung und Pflege investieren müssen.
Kandidaten für Webhosting in Europa
Diesen Workflow wollten wir beibehalten. Das wurde zur Basis für unsere Entscheidung, welches Webhosting wir wählen.
Unsere Kandidaten wurden:
- BunnyCDN
- Scaleway
- Statichost.eu
BunnyCDN
BunnyCDN ist ein Content Delivery Network (CDN) von Bunny.net, das sich auf die schnelle und zuverlässige Bereitstellung von Inhalten für Websites und Anwendungen spezialisiert. Es bietet eine Vielzahl von Funktionen wie Content Delivery, Content Acceleration, Content Caching, Content Delivery Network Management und DNS Management.
Mit ein wenig Tüfteln kann man DNS, File Storage und Content Caching dazu verwenden, eine statische Website zu hosten. Ein Plus war für uns auch die Möglichkeit, Terraform verwenden zu können, um die Konfiguration zu automatisieren.
Scaleway
Scaleway ist ein Cloud-Service-Anbieter, der eine Vielzahl von Diensten anbietet, darunter Compute-Instanzen, Speicher, Netzwerke und Container-Orchestrierung. Es bietet eine Vielzahl von Funktionen wie Virtual Private Clouds, Container-Orchestrierung, Serverless-Funktionen und Managed Databases.
Zusätzlich hat Scaleway im letzten Jahr ein CDN hinzugefügt. Leider bietet es noch nicht die Möglichkeit, auch Websiten in einer Root-Domain zu hosten.
Auch hier besteht die Möglichkeit, Terraform zu verwenden.
Statichost.eu
Statichost.eu ist ein kleiner Dienst aus Schweden. Spezialisiert auf Website-Hosting ist es super einfach zum Einrichten. Mit Github verbinden, DNS einrichten, und den Rest übernimmt der Dienst.
Leider hat uns in ihrem Preismodell eine Option gefehlt, bei dem wir als Team auf die Administration zugreifen können, dabei aber nur eine kleine Website hosten.
Aus unserer Sicht eine perfekte Lösung entweder für Ein-Personenunternehmen oder für Agenturen, die viele Webseiten betreiben.
Umsetzung
Die Umsetzung erfolgte in zwei Teilen. Die Definition der notwendigen Ressourcen bei BunnyCDN und die Deploymentpipeline für die Website.
Ressourcen bei Bunny CDN
Vier unterschiedliche Ressourcen sind auf BunnyCDN notwendig, um eine statische Website zu hosten.
Das CDN habe ich initial manuell erstellt. Es definiert, wie Inhalte ausgeliefert werden und über welche Domains das möglich ist. Diese Domains müssen im DNS als DNS-CNAME Records definiert werden.
Storage Zones bieten die Möglichkeit, den Content bei BunnyCDN zu speichern und zu verwalten.
Die Pullzone definiert, wie Content bezogen wird, wenn das CDN ihn noch nicht gecacht hat. In unserem Fall wird der Content aus der Storage Zone bezogen.
Die DNS-Zone definiert alle unsere DNS-Einträge. Ich habe hier als Beispiel nur die Einträge für die Website hinzugefügt.
resource "bunnynet_dns_zone" "zyrrio" {
domain = "zyrr.io"
}
resource "bunnynet_dns_record" "alias" {
type = "CNAME"
name = ""
value = "xxx-web.b-cdn.net"
zone = bunnynet_dns_zone.zyrrio.id
ttl = 3600
weight = 100
}
resource "bunnynet_dns_record" "alias" {
type = "CNAME"
name = "www"
value = "xxx-web.b-cdn.net"
zone = bunnynet_dns_zone.zyrrio.id
ttl = 3600
weight = 100
}
resource "bunnynet_storage_zone" "website" {
# Replace with your storage zone name
name = "xxx-web"
region = "DE"
zone_tier = "Standard"
custom_404_file_path = "/404/index.html"
replication_regions = ["SE"]
}
resource "bunnynet_pullzone" "website" {
name = "zyrrio-web"
origin {
type = "StorageZone"
storagezone = bunnynet_storage_zone.website.id
}
routing {
tier = "Standard"
}
}
resource "bunnynet_pullzone_hostname" "root" {
pullzone = bunnynet_pullzone.website.id
name = "zyrr.io"
tls_enabled = true
force_ssl = true
}
resource "bunnynet_pullzone_hostname" "www" {
pullzone = bunnynet_pullzone.website.id
name = "www.zyrr.io"
tls_enabled = true
force_ssl = true
}
Deploymentpipeline
Die Deploymentpipeline definiert, wie Änderungen an der Website automatisch in die Storage Zone übertragen werden und dann der Cache geleert wird.
Dazu verwenden wir einfach die Github Action bunnycdn-storage-deploy.
- name: Deploy to BunnyCDN
uses: ayeressian/bunnycdn-storage-deploy@v2.4.1
with:
source: "public" # Use this folder as source for deployment
destination: ""
storageZoneName: "xxx-web" # Replace with your storage zone name
storagePassword: "${{ secrets.BUNNY_STORAGE_PASSWORD }}"
accessKey: "${{ secrets.BUNNY_ACCESS_KEY }}"
pullZoneId: "xxxxx" # Replace with your pull zone ID
upload: "true" # Upload files to storage
remove: "true" # Remove all files from storage before uploading
purgePullZone: "true" # Purge pull zone after upload
purgePullZoneDelay: "5" # Delay in seconds before purging pull zone
maxRetries: "5"