Laravel in Google Cloud Run bereitstellen oder migrieren

Profile picture for user Lenard Kratky
Laravel in Google Cloud

In diesem Artikel erklären wir, wie die Migration einer Laravel Webanwendung oder Website in die Cloud abläuft und was dabei zu beachten ist. Als Beispiel verwenden wir Google Cloud, aber die grundlegenden Konzepte und Überlegungen sind auch auf andere Cloud-Plattformen wie Amazon Web Services oder Microsoft Azure anwendbar.

Gerne unterstützen wir Sie bei Ihrer Cloud Migration – auch mit anderen Frameworks oder zu anderen Anbietern wie AWS oder Microsoft Azure. Kontaktieren Sie uns gerne.

Beispiel einer Laravel Migration in die Cloud

Bei unserem letzten Laravel Projekt hatten wir die Anforderung einer hohen Skalierbarkeit, ständiger Verfügbarkeit und automatisiertes Einspielen von Softwareänderungen. Wir entschieden uns gemeinsam mit dem Kunden dazu, die Laravel Webapplikation zur Google Cloud zu migrieren, um von den Vorteilen und Möglichkeiten der Cloud-basierten Infrastruktur zu profitieren.

Ausgangslage

Die bestehende Laravel Website basierte auf folgender Infrastruktur:

  • Laravel 10 und PHP 8.1
  • Linux vServer bei einem klassischen Webhoster
  • MariaDB Datenbank
  • Apache Webserver
  • externer Mailversand über Drittanbietertool
  • API REST-Backend für eigene native App

Anforderungen

Folgende Anforderungen des Kunden an die migrierte Laravel Website galt es zu beachten

  • Minimale Downtime während der Migration
  • Datenintegrität und erfolgreiche Migration bestehender Daten
  • Nahtlose Integration und Funktionsweise von Datenbankverbindungen, E-Mail-Versand und externen Diensten
  • Hohe Verfügbarkeit und Skalierbarkeit der Laravel-Website
  • Sicherheit der Daten in der Google Cloud Run-Umgebung
  • Kosteneffizienz im Cloud Hosting

 

Cloud Run Dashboard

Cloud Run Dashboard

 

Aufbau der Cloud Architektur

Voraussetzungen für die Migration zur Google Cloud

Neben einem Google Cloud Konto werden konkret folgende kostenpflichtige Google Cloud Produkte benötigt.

  • Cloud Run – „Kern“ der Laravel Website
  • Cloud SQL – Datenbank
  • Secret Manager – „Passwortmanager“
  • Cloud Storage – Dateispeicher (Bilder, Dokumente, …)
  • Cloud Build – Entwicklung & Bereitstellung

Cloud Run

Die Bereitstellung einer Laravel Website in Google Cloud Run erfordert mehrere Schritte. Zunächst benötigt es einen Dockerfile, um die Laravel Webapplikation in einen Container zu verpacken und für die Ausführung in Cloud Run bereitzustellen (mehr dazu unter Cloud Build). Innerhalb des Containers kann dann entweder Apache oder Nginx als Webserver gewählt werden, um die Laravel Website zu betreiben.

Stellen Sie sicher, dass PHP 8 installiert ist und gegebenenfalls zusätzliche Erweiterungen wie gd, bcmath und mysqli hinzugefügt sind, um die spezifischen Anforderungen der Laravel Anwendung zu erfüllen. Für die Verwaltung von Abhängigkeiten sollte Composer installiert sein und ausgeführt werden.

Um eine sichere und korrekte Ausführung der Laravel Webapp in Cloud Run zu gewährleisten, sollten Sie außerdem die entsprechenden Benutzer festlegen, das Docroot (Startverzeichnis) konfigurieren und die Berechtigungen entsprechend setzen. Dadurch wird gewährleistet, dass die Website ordnungsgemäß auf die erforderlichen Dateien und Verzeichnisse zugreifen kann. Mit diesen Schritten sind Sie gut gerüstet, um Ihre Laravel Anwendung erfolgreich in Google Cloud Run bereitzustellen und auszuführen.

Cloud SQL

Cloud SQL ist als Datenbanklösung für die Verwendung mit Laravel in Google Cloud Run empfehlenswert. Es bietet Skalierbarkeit, um mit wachsenden Anforderungen umgehen zu können. Google Cloud SQL nutzt dabei MySQL anstelle von MariaDB, was jedoch kein Problem für die Laravel Website darstellt.

Um auf die Cloud SQL-Datenbank zugreifen zu können, ist es wichtig, die Datenbank korrekt einzurichten und die entsprechenden Zugangsdaten sicher im Secret Manager zu speichern.

Secret Manager

Sensible Informationen wie Datenbankname, Benutzername und Passwort können im Secret Manager gespeichert werden. Diese Daten werden typischerweise in der .env-Datei der Laravel-Anwendung abgelegt und dann im Secret Manager sicher verwahrt.

Laravel .env Datei mit Datenbankname, Datenbankpasswort und Einstellung zur Umgebung

Laravel Variablen werden in einer Secrets Datei definiert und Cloud Run zur Verfügung gestellt.

Das gespeicherte Secret kann anschließend von Cloud Run abgerufen werden, um die Datenbankverbindung bereitzustellen. Dadurch werden die sensiblen Informationen vor der versehentlichen Ablage in Versionskontrollsystemen (z. B. git) oder anderen unsicheren Umgebungen geschützt.

Cloud Storage

Cloud Storage ist eine ideale Lösung für die Speicherung von usergenerierten Dateien wie Bilder, Dokumente und Videos in der Google Cloud. Im Gegensatz zu Cloud Run, das einen flüchtigen Speicher hat, bietet Cloud Storage einen persistenten Speicher, der sicherstellt, dass die hochgeladenen Dateien dauerhaft gespeichert und jederzeit abgerufen werden können.

Cloud Build

Cloud Build ermöglicht das automatisierte Erstellen (Build) und Bereitstellen (Deployment) von Anwendungen in der Google Cloud. Es bietet damit vereinfacht gesagt die Möglichkeit, unsere Laravel Anwendungen für Cloud Run vorzubereiten und hochzuladen.

Kontinuierliche Bereitstellung

Was passiert bei Updates, neuen Features und Code-Änderungen? Ziel sollte eine möglichst effiziente und schnelle Integration sein, um eine kontinuierliche Bereitstellung ohne Downtime auf Cloud Run zu gewährleisten.

CI/CD – Deployment per GitHub

Üblicherweise wird der reine Quellcode einer Applikation mit Versionsverwaltungssoftware (z. B. GitHub), verwaltet und gespeichert. Anschließend muss der Code dann für die Auslieferung auf dem Production-Server vorbereitet und angepasst werden.

Mit CI/CD (Continuous Integration/Continuous Deployment) und der Integration von GitHub können Entwickler diesen Prozess automatisieren. Die Anwendung wird direkt aus dem GitHub-Repository (Speicherort des Quellcodes) „gebaut“ (Google Build) und automatisch in Cloud Run deployed (bereitgestellt). Dieses Vorgehen spart viel Aufwand beim Einspielen von Änderungen an der Software.

Infrastruktur im Code definieren

Bei der klassischen Webhosting Lösung wird ein Serveradministrator benötigt, der sich um die Lauffähigkeit des Webservers kümmert: Datenbanken, Berechtigungen, E-Mail-Versand, PHP Version und Erweiterungen, Laravel Abhängigkeiten installieren usw.

Nie mehr „Auf meiner Maschine funktioniert’s aber“. Der Ansatz mit Google Cloud Run ermöglicht es die Infrastruktur als Code zu definieren. Dadurch können alle genannten Aspekte über Konfigurationsdateien oder Skripte automatisiert verwaltet werden. Auf jedem Server und bei den Entwicklern ist damit auch immer der gleiche Serverzustand garantiert.

Technische Anleitungen und Tipps

Für einen noch technischeren Einblick empfehlen wir konkrete Tutorials sowie die offizielle Dokumentation.

Nginx und Buildpacks

Die Anleitung Laravel on Cloud Run stammt von Google und erklärt das Deployment anhand einer vorgegebenen Beispiel Laravel-Anwendung. Hier werden ebenfalls die von uns vorgestellten Google Cloud Komponenten genutzt

  • Als Webserver wird nginx genutzt
  • Build bzw. Container werden automatisch aus dem Quellcode (z. B. composer.json) per Google Buildpacks erkannt.
  • Das Tutorial beinhaltet kein automatisches Deployment per CI/CD über GitHub

Apache, PHP und Dockerfile

Als Beispiel für einen eigenen Dockerfile für eine Apache PHP Anwendung in Google Cloud Run empfehlen wir die PHP Kurzanleitung von Google.

Es handelt sich um ein „Mini-Beispiel“, das noch an die eigenen Anforderungen angepasst werden muss. Wir haben den beispielhaften Dockerfile entsprechend erweitert:

  • PHP Erweiterungen installieren, z. B. mit Docker PHP Extension Installer
  • Docroot (Startverzeichnis) setzen
  • Composer installieren und ausführen
  • Apache URL Override erlauben

Cloud Storage als Filesystem

Damit Laravel nicht den temporären Installationsordner sondern Google Cloud Storage als neues Dateiverzeichnis nutzt, muss dieses in filesystems.php konfugiert werden. Der Google Cloud Storage filesystem driver for Laravel bietet dafür eine Lösung.

 

Fazit

Die Migration eines Laravel-Projekts in die Google Cloud bietet zahlreiche Vorteile wie verbesserte Skalierbarkeit, hohe Verfügbarkeit, integrierte Dienste und eine vereinfachte Verwaltung der Ressourcen. Durch die Nutzung von Diensten wie Cloud Run, Cloud SQL und Cloud Storage können Entwickler eine moderne und flexible Infrastruktur nutzen, um ihre Laravel-Anwendungen effizient und sicher in der Cloud bereitzustellen und zu betreiben.

Vorteile der Google Cloud

Folgende Vorteile bietet der Umzug von klassischem Webhosting zur Google Cloud:

  • Skalierbarkeit der Ressourcen nach Bedarf
  • Bezahlung nur nach tatsächlichem Verbrauch
  • Integrierte Dienste und Funktionen der Google Cloud Platform
  • Höhere Flexibilität und Anpassungsfähigkeit der Umgebung
  • Vereinfachte Bereitstellung von Updates und neuen Features durch CI/CD-Integration
  • Automatisierte Infrastrukturverwaltung durch Definition der Infrastruktur im Code

 

Nachteile der Google Cloud

Natürlich gibt es auch Nachteile beim Umstieg zur Cloud, weshalb eine Migration nicht überstürzt werden sollte. 

  • Potenziell höhere Kosten im Vergleich zu traditionellem Webhosting, insbesondere bei unzureichender Optimierung und Kontrolle der Ressourcennutzung
  • Steilere Lernkurve für Entwickler und Administratoren, die mit der Google Cloud-Plattform nicht vertraut sind
  • Abhängigkeit von der Zuverlässigkeit und Verfügbarkeit der Google Cloud-Dienste
  • Begrenzte Anpassungsmöglichkeiten und Einschränkungen der Google Cloud-Plattform.
  • Potenzielle Komplexität bei der Konfiguration und Verwaltung von Diensten wie Cloud Run, Cloud SQL und Cloud Storage im Vergleich zu einem klassischen Webhosting-Anbieter.

 

Google Cloud vs. AWS vs. Microsoft Azure

Die Migration von Laravel in die Cloud ist nicht begrenzt auf die Google Services. Ein Umzug zu einer der anderen großen Cloud Plattformen ist ebenso möglich und verläuft sehr ähnlich. Die beiden Anbieter Amazon Web Services (AWS) und Microsoft Azure haben ähnliche Dienste, jedoch unter unterschiedlichen Namen.

Google Cloud vs. Amazon Web Services vs. Microsoft Azure

Bei Amazon Web Services heißen äquivalente Dienste zu Google Cloud Run AWS Elastic Beanstalk für die Bereitstellung von Anwendungen und AWS Fargate für die serverlose Container-Ausführung. Statt Google Cloud SQL gibt es Amazon RDS (Relational Database Service) für relationale Datenbanken und als Alternative zu Google Cloud Storage bietet Amazon S3 (Simple Storage Service) für die Objektspeicherung an.

Microsoft Azure bietet Azure App Service, Azure Container Instance als Cloud Run Alternativen, Azure SQL-Datenbank und Azure Blob Storage für die Objektspeicherung.

Durch die Definition der Infrastruktur im Code ist ein nachträglicher Wechsel des Cloud Anbieters meist problemlos möglich. In unserem Beispiel hat sich unser Kunde mit Google Cloud für den Anbieter mit den voraussichtlich geringsten laufenden Kosten für seine Laravel Website entschieden.

 

Unterstützung für die Laravel Cloud Migration benötigt?

Wenn Sie Unterstützung bei der Migration Ihrer Laravel Anwendung in die Cloud benötigen, stehen wir Ihnen gerne zur Verfügung. Unsere Experten können Sie bei der Planung, Konfiguration und Durchführung der Migration unterstützen. Wir stellen sicher, dass Ihre Anwendung reibungslos und effizient in der Cloud betrieben werden kann. Zögern Sie nicht, uns per E-Mail an info@lakdev.de oder über unser Kontaktformular zu kontaktieren, um weitere Informationen zu erhalten und eine individuelle Beratung für Ihre spezifischen Anforderungen zu erhalten.

Tags