Article original : How to run Laravel on Google Cloud Run with Continuous Integration - a step by step guide
Par Geshan Manandhar
Laravel a connu une popularité fulgurante ces dernières années. La communauté Laravel affirme même que Laravel a rendu l'écriture en PHP plus agréable plutôt qu'une corvée. Laravel 6 propose certaines nouvelles fonctionnalités intéressantes. Obtenir une URL super scalable pour votre application prend des heures, voire des jours. Configurer quelque chose comme Kubernetes est une tâche énorme. C'est là que Google Cloud Run brille : vous pouvez obtenir une URL HTTPS fonctionnelle pour n'importe laquelle de vos applications conteneurisées en quelques minutes.
Google Cloud Run est serverless et entièrement géré par Google. Vous bénéficiez d'une super scalabilité, d'une facturation à la seconde, d'URLs HTTPS et de la cartographie de votre propre domaine. Si vous souhaitez exécuter des conteneurs sans état, Cloud Run est sans conteste la manière la plus simple de le faire. Dans cet article, je vais détailler comment faire fonctionner votre application Laravel 6 sur Google Cloud Run avec Intégration Continue (CI).
Prérequis
- Vous êtes familier avec PHP/Composer et connaissez Laravel (si vous êtes arrivé ici, je suppose que c'est le cas)
- Vous savez utiliser Git depuis la CLI
- Votre code est hébergé sur GitHub pour le CI/CD et vous êtes familier avec GitHub
- Vous connaissez bien Docker, peut-être même les builds multi-étapes
- Vous avez un compte Google Cloud fonctionnel (ils vous offrent 300 $ de crédit gratuitement pour 1 an, aucune raison de ne pas avoir de compte)
Pourquoi Cloud Run est une excellente option pour les débutants ?
Pour deux raisons principales :
- Apprendre les meilleures pratiques et les logiciels comme Docker et CI/CD
- Mettre en place les bases ne nécessite que de cliquer sur un bouton, de sélectionner 2 éléments, d'attendre 5 minutes, et vous obtenez une URL HTTPS fonctionnelle. Peut-on faire plus simple ? :)
Étapes de déploiement
Voici les étapes pour configurer et déployer Laravel 6 sur Cloud Run :
1. Cloner Laravel ou créer un nouveau projet Laravel
Commencez par cloner Laravel ou utiliser Composer ou la CLI Laravel comme indiqué dans le guide officiel d'installation. J'utilise Composer pour obtenir la dernière version de Laravel comme suit :
Commande
J'ai exécuté la commande suivante pour obtenir la dernière version de Laravel :
composer create-project --prefer-dist laravel/laravel laravel6-on-google-cloud-run
Création d'un nouveau projet Laravel avec Composer
2. Testez-le localement d'abord
Ensuite, exécutez cd laravel6-on-google-cloud-run puis php artisan serve pour voir si cela fonctionne. Pour moi, tout était correct lorsque je suis allé sur http://localhost:8000 dans un navigateur web. J'avais PHP 7.2 installé localement.
Laravel s'exécutant localement sans Docker
3. Créez un nouveau dépôt GitHub
Créez un nouveau dépôt sur GitHub comme suit :
Créer un nouveau dépôt public sur GitHub
Vous pouvez utiliser n'importe quel fournisseur d'hébergement Git, mais pour cet exemple, j'utiliserai GitHub Actions pour exécuter les tests (et GitHub est l'outil d'hébergement git le plus populaire).
4. Ajoutez le dépôt, poussez le readme
Maintenant que vous avez créé le dépôt, ajoutez-le à votre copie locale de Laravel et poussez le fichier Readme. Pour cela, exécutez les commandes suivantes sur votre CLI :
git init
code . # J'ai utilisé VS code pour modifier le 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
Après avoir exécuté les commandes ci-dessus, j'avais ceci sur mon dépôt GitHub
Dépôt après avoir poussé le readme sur la branche master
5. Ajoutez Laravel complet, ouvrez une PR
Maintenant, ajoutons toute l'application en tant que PR au dépôt GitHub en exécutant les commandes suivantes :
git checkout -b laravel6-full-app
git add .gitignore
git add .
git commit -m "Add the whole Laravel 6 app"
git push origin laravel6-full-app
Après cela, allez ouvrir une Pull Request (PR), sur le dépôt comme celle-ci. Vous pourriez penser que je suis le seul à travailler dessus, pourquoi ai-je besoin d'une PR ? Eh bien, il est toujours préférable de faire les choses méthodiquement même si une seule personne travaille sur le projet :).
Après cela, fusionnez votre pull request.
6. Configurez les tests avec GitHub Actions
Maintenant, la partie amusante : après avoir fusionné votre PR, GitHub sait que c'est un projet Laravel. Cliquez sur l'onglet Actions sur la page de votre dépôt et vous devriez voir quelque chose comme ci-dessous :
Configurer le workflow CI pour Laravel avec GitHub Actions
Cliquez sur Set up this workflow sous Laravel, puis sur la page suivante, cliquez sur le bouton Start commit en haut à droite. Après cela, ajoutez un message de commit comme ci-dessous et cliquez sur Commit new file.
Étapes pour configurer le workflow CI avec GitHub Actions
Et voilà, vous avez configuré votre CI. Les tests par défaut de Laravel s'exécuteront à chaque push git maintenant. N'était-ce pas facile ? Merci GitHub pour cette grande intelligence. Plus besoin de créer des fichiers .myCIname.yml :).
7. Ajoutez Docker et docker-compose pour exécuter l'application localement
Maintenant, ajoutons Docker et docker-compose pour exécuter l'application localement sans PHP ou artisan serve.
Nous aurons besoin du conteneur pour exécuter Laravel sur Google Cloud Run également. Cette partie est inspirée de l'article Laravel on Google Cloud Run de Nicolas. Si vous souhaitez en savoir plus sur Docker et Laravel, veuillez vous référer à cet article.
Exécutez d'abord les commandes suivantes pour mettre à jour votre branche master car nous avons ajouté le fichier workflow depuis l'interface GitHub :
git checkout master
git fetch
git pull --rebase origin master # car nous avons ajouté le fichier workflow depuis l'interface github
git checkout -b docker
Ajoutez une clé au fichier .env.example. Copiez-la depuis le fichier .env comme suit :
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:DJkdj8L5Di3rUkUOwmBFCrr5dsIYU/s7s+W52ClI4AA=
APP_DEBUG=true
APP_URL=http://localhost
Comme il s'agit simplement d'une démonstration, cela est acceptable. Pour une application réelle, soyez toujours prudent avec les secrets. Pour les applications prêtes pour la production, désactivez le débogage et autres éléments liés au développement.
Ajoutez le Dockerfile suivant à la racine du projet :
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
Ensuite, ajoutez le fichier suivant à docker/000-default.conf
<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>
Après cela, ajoutez le docker-compose.yml suivant
version: '3'
services:
app:
build:
context: ./
volumes:
- .:/var/www
ports:
- "8080:8080"
environment:
- APP_ENV=local
Résumons les points principaux
Si vous essayez de comprendre tout ici, cela peut être accablant, alors laissez-moi résumer les parties principales :
- Nous utilisons l'image Docker officielle PHP Apache pour exécuter Laravel, qui a la version PHP 7.3.
- Nous utilisons une construction multi-étapes pour obtenir les dépendances avec Composer, puis nous les copions dans l'image Docker principale qui a PHP 7.3 et Apache.
- Comme Google Cloud Run nécessite que le serveur web écoute sur le port
8080et que nous utilisons000-default.confpour configurer cela - Pour faciliter l'exécution avec la commande unique
docker-compose up, nous utilisons docker-compose. - Maintenant que vous avez lu jusqu'ici, exécutez
docker-compose upà la racine, puis après que tout soit exécuté, allez surhttp://localhost:8080pour voir que Laravel 6 s'exécute localement sur Docker. Voici la sortie de mondocker-compose upvers la fin :
Docker compose s'exécutant avec succès sur la machine locale
Comme Laravel s'exécute bien avec Docker, ouvrons une PR comme celle-ci pour ajouter Docker à notre projet. J'ai exécuté les commandes suivantes à la racine du projet avant d'ouvrir la Pull Request (PR) :
git status
Cela devrait vous donner quelque chose comme ci-dessous :
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)
Maintenant, exécutez les commandes suivantes :
git add .
git commit -m "Add docker and docker compose"
git push origin docker
En bonus, cela exécutera le test par défaut de Laravel lors du push, comme vous pouvez le voir ci-dessous :
Tests par défaut de Laravel s'exécutant avec GitHub Actions
Seul le propriétaire du dépôt a accès à l'onglet Actions, donc les autres personnes n'ont pas nécessairement besoin de connaître les résultats de vos builds de test :).
8. Ajoutez le déploiement vers le bouton Google Cloud
Maintenant, déployons cette configuration Laravel sur Google Cloud Run de manière facile. Étant donné que vous avez fusionné votre PR depuis la branche docker, exécutons les commandes suivantes :
git checkout master
git fetch
git pull --rebase origin master
git checkout -b cloud-run-button
Ensuite, ajoutez ce qui suit à votre fichier readme.md :
### Exécuter sur Google Cloud Run
[](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)
Soyez prudent et remplacez la dernière partie par l'URL HTTPS de votre dépôt. Par exemple, si votre dépôt est à https://github.com/ghaleroshan/laravel6-on-google-cloud-run, ce sera https://github.com/ghaleroshan/laravel6-on-google-cloud-run.git, puis validez et poussez. Votre PR devrait ressembler à celle-ci.
9. Déployez sur Google Cloud Run
Après avoir fusionné votre Pull Request (PR), allez sur la page de votre dépôt et cliquez sur le bouton Run on Google Cloud.
GitHub readme après avoir ajouté le bouton Run on Google Cloud
Après cela, si vous êtes connecté à votre compte Google et avez configuré Google Cloud avec 1 projet, cliquez sur « Proceed ». Vous devrez peut-être attendre un peu, puis
- Choisissez le projet – « Choose a project to deploy this application »
- Choisissez la région – « Choose a region to deploy this application », je choisis généralement « us-central-1 »
- Attendez ensuite que le conteneur soit construit et déployé. Vous pouvez voir mon processus ci-dessous :
Si tout se passe bien sur votre « Google Cloud Shell », vous verrez l'URL HTTPS que vous pouvez utiliser pour voir votre application Laravel en cours d'exécution comme ci-dessous :
Écran de déploiement de Google Cloud Shell pour Laravel 6 sur Cloud Run
Ce qui vient de se passer ci-dessus est :
- Après avoir choisi la région, le script a construit une image de conteneur Docker à partir du
Dockerfiledans le dépôt - Ensuite, il a poussé l'image construite vers Google Container Registry
- Après cela, en utilisant la CLI gcloud, il a déployé l'image construite sur Cloud Run, qui a renvoyé l'URL.
10. Hourra, votre application fonctionne
Après avoir obtenu l'URL, vous devriez voir votre application fonctionner sur Google Cloud Run comme ci-dessous :
Laravel s'exécutant sur Google Cloud Run avec une URL HTTPS Serverless :)
Si vous souhaitez déployer une autre version, vous pouvez fusionner votre PR vers master et cliquer à nouveau sur le bouton pour déployer.
Plus d'informations sur Google Cloud Run
Le tarif pour Google Cloud Run est très généreux. Vous pouvez exécuter n'importe quelle application conteneurisée ou application web sur Google Cloud Run. J'ai exécuté un projet personnel qui a reçu ~ 1 requête par minute et je n'ai rien eu à payer.
En coulisses, il utilise Knative et Kubernetes. Il peut également être exécuté sur votre cluster Kubernetes, mais qui choisirait de gérer un cluster K8s si vous pouvez simplement pousser et obtenir une application serverless scalable entièrement gérée :).
TLDR
Pour exécuter Laravel 6 sur Google Cloud Run rapidement, suivez les étapes ci-dessous :
- Assurez-vous d'être connecté à votre compte Google Cloud
- Allez sur https://github.com/geshan/laravel6-on-google-cloud-run
- Cliquez sur le bouton bleu « Run On Google Cloud »
- Sélectionnez votre projet
- Sélectionnez votre région
- Attendez et obtenez l'URL de votre application Laravel comme ci-dessous, profitez-en !
Journal de déploiement du bouton Cloud Run pour déployer Laravel sur Google Cloud Run
Laravel s'exécutant avec succès sur Google Cloud Run
Conclusion
Et voilà – exécuter une application Laravel sur Google Cloud Run était assez facile. Vous avez même des tests qui s'exécutent sur GitHub avec GitHub Actions. J'espère que cela aide. Pour une approche CI/CD, vous pouvez consulter cet article. Il montre le déploiement en utilisant Cloud Build. Comme le même conteneur s'exécute pour les environnements local et de production (Google Cloud Run), vous n'avez pas besoin d'apprendre un nouveau framework pour passer au Serverless.
Toute application web conteneurisée peut être exécutée sur Google Cloud Run, c'est un excellent service. Vous pouvez en lire plus sur https://geshan.com.np