Procédure d'intégration continue pour Laravel 6 sur Google Cloud Run

Bonjour à tous! En prévision du début des cours «Framework Laravel» et «Backend-developer in PHP» , nous continuons à partager du matériel intéressant sur le sujet. Allons-y.




Au cours des dernières années, la popularité de Laravel a considérablement augmenté . La communauté Laravel est même d'avis que Laravel a rendu le processus de travail en PHP plus agréable par rapport à la douleur d'avant. Laravel 6 a de nouvelles fonctionnalités intéressantes . Obtenir une URL de travail super évolutive pour votre application prend des heures, voire des jours. Et créer quelque chose comme Kubernetes est une tâche intimidante. C'est dans de tels cas que Google Cloud Run est sous le meilleur jour, car avec lui, vous pouvez obtenir une URL HTTP fonctionnelle pour n'importe laquelle de vos applications de conteneur en quelques minutes.

Google Cloud Run est sans serveur et est entièrement géré par Google. Vous obtenez une super évolutivité, un paiement par seconde, des URL HTTP et votre propre mappage de domaine.

Si vous souhaitez exécuter des conteneurs sans état, Cloud Run est le moyen le plus simple de le faire. Dans cet article, je vais vous expliquer en détail comment faire fonctionner votre application Laravel 6 sur le cloud Google avec l'intégration continue (CI).

Exigences requises


  • Vous connaissez PHP / Composer et connaissez Laravel (je pense que sinon vous ne seriez pas ici);
  • Vous savez utiliser Git depuis la console;
  • Votre code CI / CD est hĂ©bergĂ© sur GitHub et vous savez comment l'utiliser;
  • Vous connaissez Docker, peut-ĂŞtre mĂŞme avec l'assemblage en plusieurs Ă©tapes;
  • Vous avez un compte Google Cloud fonctionnel (ils vous accordent un prĂŞt sans intĂ©rĂŞt de 300 $ pour 1 an, il n'y a aucune raison de ne pas le dĂ©marrer).

Pourquoi Cloud Run est idéal pour les débutants


Pour deux raisons, que je décrirai ci-dessous:

  • Vous dĂ©couvrirez les meilleures pratiques et les logiciels tels que Docker et CI / CD.
  • Le cadre principal fonctionnera après avoir cliquĂ© sur un bouton, choisi deux choses et cinq minutes d'attente, et vous pouvez obtenir une URL HTTP fonctionnelle. C'est beaucoup plus facile?

Étapes de déploiement


Ce qui suit est un guide de configuration et de déploiement de Laravel 6 sur Cloud Run:

1. Clone Laravel ou un nouveau projet Laravel

Commencez par cloner Laravel ou utilisez le compositeur ou Laravel CLI, comme indiqué dans le guide d' installation officiel.

J'utilise Composer pour obtenir la dernière version de Laravel, comme indiqué ci-dessous:

composer global require laravel/installer 

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 



2. Premier test localement

Ensuite, exécutez cd laravel6-on-google-cloud-run , puis php artisan serve . Pour voir que tout fonctionne, je suis allé à l'adresse http: // localhost: 8000 dans le navigateur et cela a fonctionné pour moi. J'ai fait installer PHP 7.2 localement.



3. Créez un nouveau référentiel sur GitHub

Créez un nouveau référentiel sur GitHub comme indiqué ci-dessous:



4. Ajouter un référentiel et un fichier README

Maintenant, après avoir créé le référentiel, ajoutez-le à la copie locale de Laravel et ajoutez le fichier README.
Pour ce faire, exécutez les commandes suivantes dans la console:

 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 

Après avoir exécuté la commande dans mon référentiel sur GitHub, ce qui suit est apparu:



5. Ajoutez Laravel complet, ouvrez la demande de tirage

Envoyons maintenant l'application entière sous forme de demande d'extraction au référentiel GitHub en exécutant les commandes suivantes:

Après cela, ouvrez la Pull Request dans le référentiel, comme ceci . Peut-être pensez-vous pourquoi j'ai besoin d'une pull request si je travaille seul sur un projet?

Eh bien, je pense que vous devriez toujours suivre une approche systématique, même si vous travaillez seul.
Après cela, ralentissez votre demande de tirage.

6. Tester la configuration avec les actions GitHub

Pas la partie amusante. Après avoir piqué votre demande de pull, GitHub saura qu'il s'agit d'un projet Laravel. Cliquez sur l'onglet Actions sur votre page de référentiel et vous verrez quelque chose comme celui illustré ci-dessous:



Cliquez sur Configurer ce flux de travail sous Laravel , et sur la page suivante, cliquez sur le bouton Démarrer la validation dans le coin supérieur droit. Après cela, ajoutez le message de validation comme indiqué ci-dessous et cliquez sur Valider un nouveau fichier .



C'est ainsi que vous avez obtenu votre installation CI. Les tests Laravel par défaut s'exécuteront désormais à chaque push git. Est-ce difficile?
Merci Ă  Great Mind GitHub!
Plus .myCIname.yml créer des fichiers .myCIname.yml !

7. Ajoutez docker et exécutez docker-compose pour exécuter l'application localement

Ajoutons maintenant docker et faisons docker-compose pour exécuter l'application localement sans PHP ni service artisan .

Cette partie du didacticiel est inspirée de l'article de Laravel sur Google Cloud Run de Nicolas.

Si vous voulez en savoir plus sur Docker et Laravel, consultez cet article .

Pour commencer, exécutez les commandes suivantes pour mettre à jour la branche principale, car nous avons ajouté un nouveau fichier de flux de travail à l'aide de l'interface GitHub:

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

Ajoutez la clé au fichier .env.example , copiez-la à partir du fichier .env , comme illustré ci-dessous:

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

Comme il ne s'agit que d'une démo, vous pouvez le faire, mais dans les applications réelles, faites attention aux secrets. Pour les applications prêtes pour la production, désactivez le débogage et d'autres éléments liés au développement.

Ajoutez un tel Dockerfile Ă  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 

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 docker-compose.yml :

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

RĂ©duisons tout Ă  l'essentiel.

Si vous essayez de comprendre tout ce qui est Ă©crit ici, cela peut ĂŞtre exhaustif, alors laissez-moi vous parler des principales parties:

  • Nous utilisons l'image docker officielle PHP Apache pour exĂ©cuter Laravel, il a PHP version 7.3.
  • Nous utilisons une construction en plusieurs Ă©tapes pour obtenir les dĂ©pendances avec Composer, puis les copions sur l'image principale du docker, qui a PHP 7.3 et Apache.
  • Étant donnĂ© que Google Cloud Run nĂ©cessite que le serveur Web Ă©coute sur le port 8080, nous utilisons 000-default.conf pour le configurer.
  • Pour rendre la composition de docker plus facile Ă  exĂ©cuter, entrez une seule commande de composition de docker.
  • Maintenant que vous avez lu jusqu'Ă  prĂ©sent, exĂ©cutez docker-compose Ă  partir de la racine et tout devrait fonctionner Ă  http://localhost:8080 , dans ce cas, vous comprendrez que Laravel 6 s'exĂ©cute localement dans Docker.

Ci-dessous, vous voyez la sortie après avoir exécuté docker-compose up la fin:



Si Laravel travaille avec Docker, ouvrez une nouvelle pull-request (par exemple, une ) et ajoutez Docker Ă  votre projet.

J'ai exécuté les commandes suivantes à la racine du projet avant d'ouvrir la Pull Request:

 git status 

Vous obtiendrez quelque chose comme ceci:

 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) 

Et exécutez les commandes suivantes:

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

En bonus, ils exécuteront le test Laravel par défaut après push, comme indiqué ci-dessous:



Seul le propriétaire du référentiel a accès à l'onglet Actions, les autres personnes n'ont donc pas besoin de connaître les résultats de vos builds de test

8. Ajoutez un déploiement au bouton Google Cloud .

Déployons maintenant cette installation Laravel sur Google Cloud Run de manière simple. À ce stade, on pense que vous avez organisé votre pull-request de la branche docker.

Exécutons les commandes suivantes:

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

Ajoutez ce qui suit Ă  votre fichier 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)


Remplacez soigneusement la dernière partie de l'URL HTTPs de votre référentiel, par exemple, si votre référentiel se trouve à l' adresse vers laquelle il va changer, puis validez et poussez .

Votre demande de tirage devrait ressembler Ă  ceci .

9. DĂ©ployer sur Google Cloud Run

Après la fusion de votre demande d'extraction, accédez à la page du référentiel et cliquez sur le bouton Exécuter sur Google Cloud .



Après cela, si vous êtes connecté à votre compte Google et que vous avez configuré Google Cloud avec un projet, cliquez sur le bouton "Continuer". Vous devrez peut-être attendre un peu, après cela:

  1. Choisissez un projet - Choisissez un projet pour déployer cette application
    Choisissez une région - Choisissez une région pour déployer cette application, je choisis généralement us-central-1
    Attendez ensuite que le conteneur se rassemble et se développe, le processus dans mon cas ressemble à ceci:

Si tout se passe bien, sur Google Cloud Shell, vous verrez des URL HTTPs sur lesquelles vous pouvez cliquer pour voir que votre application Laravel est en cours d'exécution, comme indiqué ci-dessous:



Ce qui s'est passé ci-dessus est le suivant:

  1. Après avoir choisi une région, le script a construit une image du conteneur Docker à partir du Dockerfile dans le référentiel;
  2. Il a ensuite poussé l'image assemblée dans le Google Container Registry;
  3. Après cela, à l'aide de la CLI gcloud, il déploie l'image assemblée dans Cloud Run, qui renvoie l'URL.

10. Hourra! Votre application fonctionne!

Après avoir obtenu l'URL, vous verrez votre application s'exécuter sur Google Cloud Run, comme indiqué ci-dessous:



Si vous souhaitez déployer une version différente, vous pouvez modifier votre demande de tirage en maître et cliquer à nouveau sur le bouton pour le déploiement.

En savoir plus sur Google Cloud Run


Les prix de Google Cloud Run sont très généreux. Vous pouvez exécuter n'importe quelle application dans un conteneur ou une application Web dans Google Cloud Run.

J'ai dirigé un projet à domicile qui a reçu 1 demande par minute et je n'ai rien dû payer.

Sous le capot, il utilise Knative et Kubernetes. Il peut également être exécuté dans votre cluster Kubernetes, mais qui souhaite gérer le cluster K8s si vous pouvez simplement pousser et apprendre une application évolutive sans serveur entièrement gérée

TLDR


Pour lancer rapidement Laravel 6 sur Google Cloud Run, procédez comme suit:

  • Assurez-vous que vous ĂŞtes connectĂ© Ă  votre compte Google Cloud ;
  • Suivez le lien: https://github.com/geshan/laravel6-on-google-cloud-run ;
  • Cliquez sur le bouton bleu «ExĂ©cuter sur Google Cloud» ;
  • Choisissez votre projet;
  • Choisissez votre rĂ©gion;
  • Attendez un instant et obtenez l'URL de votre application Laravel comme indiquĂ© ci-dessous. RĂ©jouis-toi!





Conclusion


J'espère que l'exécution de l'application Laravel sur Google Cloud Run s'est avérée être une tâche simple pour vous. Vous avez même pu exécuter des tests avec des actions Github. J'espère que cet article vous a été utile.

Pour adopter l'approche CI / CD, vous pouvez lire cet article , qui parle de l'utilisation de builds dans le cloud. Étant donné que le même conteneur fonctionne localement et en production (Google Cloud Run), vous n'avez pas besoin d'apprendre un nouveau cadre pour passer à une architecture sans serveur.

Toute application Web dans le conteneur peut fonctionner sur Google Cloud Run, donc je considère que c'est un excellent service!


C’est tout, et nous vous rappelons que les 21 et 22 janvier, tout le monde peut visiter l’ intensif en ligne gratuit , dans le cadre duquel nous allons créer un bot Telegram pour commander du café à l’établissement et payer en ligne. Vous pouvez vous inscrire pour le deuxième jour d'intensif ici .

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


All Articles