Engineering

Diese Website wurde gelöscht

Wir haben es getan. Wir haben unsere Website von Azure 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

Hosted in Europe - Powered by hostingchecker

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"

Referenzen