Exemplarische Vorgehensweise für die kontinuierliche Integration von Laravel 6 in Google Cloud Run

Hallo allerseits! In Erwartung des Beginns der Kurse „Framework Laravel“ und „Backend-Entwickler in PHP“ werden wir weiterhin interessante Materialien zu diesem Thema austauschen. Lass uns gehen.




In den letzten Jahren hat die Popularität von Laravel dramatisch zugenommen . Die Laravel-Community ist sogar der Meinung, dass Laravel die Arbeit in PHP angenehmer gemacht hat als zuvor. Laravel 6 hat einige coole neue Funktionen . Das Abrufen einer super skalierbaren Arbeits-URL für Ihre Anwendung dauert Stunden, wenn nicht Tage. Und so etwas wie Kubernetes zu schaffen, ist eine entmutigende Aufgabe. In solchen Fällen steht Google Cloud Run im besten Licht, da Sie damit innerhalb weniger Minuten eine funktionierende HTTPs-URL für jede Ihrer Containeranwendungen erhalten.

Google Cloud Run ist serverlos und wird vollständig von Google verwaltet. Sie erhalten eine superskalierte, sekundengenaue Zahlung, HTTPs-URLs und Ihre eigene Domainzuordnung.

Wenn Sie zustandslose Container ausführen möchten, ist Cloud Run die einfachste Möglichkeit, dies zu tun. In diesem Artikel werde ich ausführlich erläutern, wie Sie Ihre Laravel 6-Anwendung in der Google Cloud mit Continuous Integration (CI) ausführen können.

Erforderliche Anforderungen


  • Sie sind mit PHP / Composer vertraut und kennen sich mit Laravel aus (ich glaube, sonst wären Sie nicht hier).
  • Sie können Git von der Konsole aus verwenden.
  • Ihr CI / CD-Code wird auf GitHub gehostet und Sie wissen, wie Sie ihn verwenden.
  • Sie sind mit Docker vertraut, vielleicht sogar mit der mehrstufigen Montage.
  • Sie haben ein funktionierendes Google Cloud-Konto (Sie erhalten ein zinsloses Darlehen in Höhe von 300 USD für ein Jahr. Es gibt keinen Grund, es nicht zu starten.)

Warum Cloud Run ideal für Anfänger ist


Aus zwei Gründen, die ich im Folgenden beschreiben werde:

  • Sie lernen Best Practices und Software wie Docker und CI / CD kennen.
  • Der Hauptrahmen funktioniert, nachdem Sie auf eine Schaltfläche geklickt und zwei Dinge und fünf Minuten gewartet haben. Anschließend können Sie eine funktionierende HTTPs-URL abrufen. Wie viel einfacher?

Bereitstellungsschritte


Im Folgenden finden Sie eine Anleitung zum Einrichten und Bereitstellen von Laravel 6 in Cloud Run:

1. Klonen Sie Laravel oder ein neues Laravel-Projekt

Beginnen Sie mit dem Klonen von Laravel oder verwenden Sie den Komponisten oder die Laravel-CLI, wie in der offiziellen Installationsanleitung angegeben .

Ich benutze Composer, um die neueste Version von Laravel zu erhalten, wie unten gezeigt:

composer global require laravel/installer 

Ich habe den folgenden Befehl ausgeführt, um die neueste Version von Laravel zu erhalten:

 composer create-project --prefer-dist laravel/laravel laravel6-on-google-cloud-run 



2. Zuerst vor Ort testen

Führen Sie dann cd laravel6-on-google-cloud-run und dann php artisan serve . Um zu sehen, dass alles funktioniert, habe ich im Browser die Adresse http: // localhost: 8000 aufgerufen und es hat bei mir funktioniert. Ich hatte PHP 7.2 lokal installiert.



3. Erstellen Sie ein neues Repository auf GitHub

Erstellen Sie ein neues Repository auf GitHub wie folgt:



4. Repository und README hinzufügen

Nachdem Sie das Repository erstellt haben, fügen Sie es der lokalen Kopie von Laravel hinzu und fügen Sie die README-Datei hinzu.
Führen Sie dazu die folgenden Befehle in der Konsole aus:

 git init code . # I used VS code to change the readme git add readme.md git commit -m "Initial commit -- App Readme" git remote add origin git@github.com:geshan/laravel6-on-google-cloud-run.git git push -u origin master 

Nach dem Ausführen des Befehls in meinem Repository auf GitHub wurde Folgendes angezeigt:



5. Fügen Sie Laravel hinzu, und öffnen Sie Pull Request

Senden wir nun die gesamte Anwendung als Pull-Anforderung an das GitHub-Repository, indem wir die folgenden Befehle ausführen:

Öffnen Sie anschließend wie folgt die Pull-Anforderung im Repository. Vielleicht überlegen Sie, warum ich eine Pull-Anfrage benötige, wenn ich alleine an einem Projekt arbeite?

Nun, ich denke, Sie sollten immer einen systematischen Ansatz verfolgen, auch wenn Sie alleine arbeiten.
Danach verlangsamen Sie Ihre Pull-Anfrage.

6. Testen Sie das Setup mit GitHub-Aktionen

Nicht der lustige Teil. Nachdem Sie Ihre Pull-Anfrage gesendet haben, wird GitHub wissen, dass dies ein Laravel-Projekt ist. Klicken Sie auf der Repository-Seite auf die Registerkarte " Aktionen", und es wird etwa die folgende angezeigt:



Klicken Sie unter Laravel auf Diesen Workflow einrichten , und klicken Sie auf der nächsten Seite oben rechts auf die Schaltfläche Commit starten . Fügen Sie anschließend die Commit-Nachricht wie unten gezeigt hinzu und klicken Sie auf Neue Datei festschreiben .



So haben Sie Ihre CI-Installation erhalten. Laravel-Tests werden nun standardmäßig bei jedem Git-Push ausgeführt. Ist es schwierig
Vielen Dank an Great Mind GitHub!
Keine .myCIname.yml Dateien mehr erstellen!

7. Fügen Sie docker hinzu und führen Sie docker-compose aus, um die Anwendung lokal auszuführen

Lassen Sie uns nun Docker hinzufügen und Docker komponieren, um die Anwendung lokal ohne PHP oder handwerkliches Serving auszuführen.

Dieser Teil des Tutorials ist von Nicolas Laravel im Google Cloud Run- Artikel inspiriert.

Wenn Sie mehr über Docker und Laravel erfahren möchten, lesen Sie diesen Artikel .

Führen Sie zunächst die folgenden Befehle aus, um den Master-Zweig zu aktualisieren, da wir über die GitHub-Oberfläche eine neue Workflow-Datei hinzugefügt haben:

 git checkout master git fetch git pull --rebase origin master # as we added the workflow file from github interface git checkout -b docker 

Fügen Sie den Schlüssel der .env.example Datei hinzu, und kopieren Sie ihn aus der .env Datei, wie unten gezeigt:

 APP_NAME=Laravel APP_ENV=local APP_KEY=base64:DJkdj8L5Di3rUkUOwmBFCrr5dsIYU/s7s+W52ClI4AA= APP_DEBUG=true APP_URL=http://localhost 

Da dies nur eine Demo ist, können Sie dies tun, aber in realen Anwendungen gehen Sie vorsichtig mit Geheimnissen um. Deaktivieren Sie für produktionsbereite Anwendungen das Debuggen und andere Dinge, die mit der Entwicklung zusammenhängen.

Fügen Sie eine solche Docker-Datei zum Stammverzeichnis des Projekts hinzu:

 FROM composer:1.9.0 as build WORKDIR /app COPY . /app RUN composer global require hirak/prestissimo && composer install FROM php:7.3-apache-stretch RUN docker-php-ext-install pdo pdo_mysql EXPOSE 8080 COPY --from=build /app /var/www/ COPY docker/000-default.conf /etc/apache2/sites-available/000-default.conf COPY .env.example /var/www/.env RUN chmod 777 -R /var/www/storage/ && \ echo "Listen 8080" >> /etc/apache2/ports.conf && \ chown -R www-data:www-data /var/www/ && \ a2enmod rewrite 

Fügen Sie docker/000-default.conf die folgende Datei hinzu:

 <VirtualHost *:8080> ServerAdmin webmaster@localhost DocumentRoot /var/www/public/ <Directory /var/www/> AllowOverride All Require all granted </Directory> ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> 

Danach füge docker-compose.yml :

 version: '3' services: app: build: context: ./ volumes: - .:/var/www ports: - "8080:8080" environment: - APP_ENV=local 

Lassen Sie uns alles auf die Hauptsache reduzieren.

Wenn Sie versuchen, alles zu verstehen, was hier geschrieben steht, kann es erschöpfend sein, also lassen Sie mich Ihnen die Hauptteile erklären:

  • Wir verwenden das offizielle PHP Apache Docker Image, um Laravel auszuführen. Es hat PHP Version 7.3.
  • Wir verwenden einen mehrstufigen Build, um Abhängigkeiten mit Composer zu erhalten, und kopieren sie dann in das Haupt-Docker-Image, das PHP 7.3 und Apache enthält.
  • Da Google Cloud Run erfordert, dass der Webserver Port 8080 überwacht, verwenden wir 000-default.conf , um dies zu konfigurieren.
  • Geben Sie nur einen Docker-Compose-Befehl ein, um die Ausführung von Docker-Compose zu vereinfachen.
  • Nachdem Sie bis zu diesem Punkt gelesen haben, führen Sie docker-compose vom Stammverzeichnis aus aus und alles sollte unter http://localhost:8080 funktionieren. In diesem Fall werden Sie verstehen, dass Laravel 6 lokal in Docker ausgeführt wird.

Unten sehen Sie die Ausgabe nach dem Ausführen von docker-compose up zum Ende:



Wenn Laravel mit Docker arbeitet, öffnen Sie eine neue Pull-Anfrage (z. B. eine ) und fügen Sie Docker zu Ihrem Projekt hinzu.

Ich habe die folgenden Befehle im Stammverzeichnis des Projekts ausgeführt, bevor ich die Pull-Anforderung geöffnet habe:

 git status 

Sie erhalten so etwas:

 On branch docker Untracked files: (use "git add <file>..." to include in what will be committed) Dockerfile docker-compose.yml docker/ nothing added to commit but untracked files present (use "git add" to track) 

Führen Sie die folgenden Befehle aus:

 git add . git commit -m "Add docker and docker compose" git push origin docker 

Als Bonus führen sie nach dem Push den Standard-Laravel-Test aus, wie unten gezeigt:



Nur der Eigentümer des Repositorys hat Zugriff auf die Registerkarte "Aktionen", sodass andere Benutzer die Ergebnisse Ihrer Testbuilds nicht kennen müssen

8. Fügen Sie der Google Cloud-Schaltfläche eine Bereitstellung hinzu.

Stellen wir diese Laravel-Installation nun auf einfache Weise in Google Cloud Run bereit. In dieser Phase wird angenommen, dass Sie Ihre Pull-Anfrage von der Docker-Niederlassung bereitgestellt haben.

Führen wir die folgenden Befehle aus:

 git checkout master git fetch git pull --rebase origin master git checkout -b cloud-run-button 

Fügen Sie Ihrer readme.md Datei Folgendes readme.md :

### Run on Google cloud run

[![Run on Google Cloud](https://storage.googleapis.com/cloudrun/button.svg)](https://console.cloud.google.com/cloudshell/editor?shellonly=true&cloudshell;_image=gcr.io/cloudrun/button&cloudshell;_git_repo=https://github.com/geshan/laravel6-on-google-cloud-run.git)


Ersetzen Sie sorgfältig den letzten Teil der HTTPs-URL Ihres Repositorys. Wenn sich Ihr Repository beispielsweise an der Adresse befindet, in die es geändert werden soll , führen Sie ein Commit und einen Push durch .

Ihre Pull-Anfrage sollte ungefähr so ​​aussehen.

9. Auf Google Cloud Run bereitstellen

Wechseln Sie nach dem Zusammenführen Ihrer Pull-Anfrage zur Repository-Seite und klicken Sie auf die Schaltfläche In Google Cloud ausführen.



Wenn Sie in Ihrem Google-Konto angemeldet sind und ein Projekt für die Google Cloud eingerichtet haben, klicken Sie auf die Schaltfläche "Weiter". Möglicherweise müssen Sie danach etwas warten:

  1. Projekt auswählen - Wählen Sie ein Projekt aus, um diese Anwendung bereitzustellen
    Region auswählen - Wählen Sie eine Region aus, in der diese Anwendung bereitgestellt werden soll. Normalerweise wähle ich "us-central-1"
    Warten Sie, bis der Container gesammelt und erweitert wurde. In meinem Fall sieht der Vorgang folgendermaßen aus:

Wenn alles gut geht, werden in der Google Cloud Shell HTTP-URLs angezeigt, auf die Sie klicken können, um zu überprüfen, ob Ihre Laravel-Anwendung ausgeführt wird.



Was oben passiert ist, ist das:

  1. Nach Auswahl einer Region erstellte das Skript ein Image des Docker-Containers aus der Docker-Datei im Repository.
  2. Dann schob er das zusammengestellte Bild in die Google Container Registry.
  3. Anschließend stellt er mithilfe der gcloud-CLI das zusammengestellte Image in Cloud Run bereit, das die URL zurückgibt.

10. Hurra! Ihre Bewerbung funktioniert!

Nachdem Sie die URL erhalten haben, wird Ihre Anwendung in Google Cloud Run ausgeführt (siehe unten):



Wenn Sie eine andere Version bereitstellen möchten, können Sie Ihre Pull-Anforderung in master ändern und erneut auf die Schaltfläche für die Bereitstellung klicken.

Weitere Informationen zu Google Cloud Run


Die Preise für Google Cloud Run sind sehr großzügig. Sie können jede Anwendung in einem Container oder einer Webanwendung in Google Cloud Run ausführen.

Ich habe ein Heimprojekt durchgeführt, bei dem 1 Anfrage pro Minute eingegangen ist, und ich musste nichts bezahlen.

Unter der Haube benutzt er Knative und Kubernetes. Es kann auch in Ihrem Kubernetes-Cluster ausgeführt werden, aber wer möchte das K8s-Cluster verwalten, wenn Sie nur eine skalierbare, serverlose, vollständig verwaltete Anwendung pushen und erlernen können

TLDR


Gehen Sie folgendermaßen vor, um Laravel 6 in Google Cloud Run schnell zu starten:

  • Stellen Sie sicher, dass Sie in Ihrem Google Cloud- Konto angemeldet sind.
  • Folgen Sie dem Link: https://github.com/geshan/laravel6-on-google-cloud-run ;
  • Klicken Sie auf die blaue Schaltfläche "In Google Cloud ausführen" .
  • Wählen Sie Ihr Projekt;
  • Wählen Sie Ihre Region aus.
  • Warten Sie einen Moment und rufen Sie die URL für Ihre Laravel-Anwendung ab (siehe unten). Freut euch!





Fazit


Hoffentlich ist es für Sie eine einfache Aufgabe, die Laravel-App in der Google Cloud auszuführen. Sie konnten sogar Tests mit Github-Aktionen ausführen. Ich hoffe, dieser Artikel hat Ihnen geholfen.

In diesem Artikel wird die Verwendung von Builds in der Cloud beschrieben. Da derselbe Container lokal und in der Produktion (Google Cloud Run) funktioniert, müssen Sie kein neues Framework erlernen, um zu einer serverlosen Architektur zu wechseln.

Jede Webanwendung im Container kann auf Google Cloud Run ausgeführt werden. Ich halte das für einen großartigen Service!


Das ist alles und wir möchten Sie daran erinnern, dass am 21. und 22. Januar jeder die kostenlose Online-Intensivversion besuchen kann, in deren Rahmen wir einen Telegramm-Bot erstellen, um Kaffee in der Einrichtung zu bestellen und online zu bezahlen. Hier können Sie sich für den zweiten Intensivtag anmelden.

Source: https://habr.com/ru/post/de484738/


All Articles