在Google Cloud Run上进行Laravel 6的持续集成演练

大家好! 预期将开始“ Framework Laravel”“ PHP后端开发人员 课程,我们将继续分享有关该主题的有趣材料。 走吧




在过去的几年中,Laravel的受欢迎程度急剧上升 。 Laravel社区甚至认为,与以前的痛苦相比,Laravel使使用PHP的工作过程更加有趣。 Laravel 6具有一些很酷的功能 。 为您的应用程序获取超可扩展的工作URL需要花费数小时甚至数天。 创建像Kubernetes这样的东西是一项艰巨的任务。 在这种情况下,Google Cloud Run处于最佳状态,因为有了它,您可以在数分钟内获得任何容器应用程序的有效HTTPs URL。

Google Cloud Run是无服务器的,完全由Google管理。 您将获得超扩展,每秒支付,HTTP URL和您自己的域映射。

如果要运行无状态容器,则运行云是最简单的方法。 在本文中,我将详细说明如何使您的Laravel 6应用程序在具有持续集成(CI)的Google云上运行。

必要条件


  • 您熟悉PHP / Composer,并且了解Laravel(否则我不会在这里)。
  • 您知道如何从控制台使用Git。
  • 您的CI / CD代码托管在GitHub上,并且您知道如何使用它。
  • 您熟悉Docker,甚至可能熟悉多阶段组装。
  • 您有一个有效的Google Cloud帐户(他们为您提供了利息-一年300美元的免费贷款,没有理由不启动它)。

为什么Cloud Run非常适合初学者


出于两个原因,我将在下面进行描述:

  • 您将学习最佳实践和软件,例如Docker和CI / CD。
  • 单击一个按钮,选择两件事并等待五分钟后,主机将正常工作,您可以获得有效的HTTPs URL。 有多少容易?

部署步骤


以下是在Cloud Run上设置和部署Laravel 6的指南:

1.克隆Laravel或一个新的Laravel项目

按照官方安装指南中的指示,从克隆Laravel或使用作曲家或Laravel CLI开始。

我使用作曲家来获取最新版本的Laravel,如下所示:

composer global require laravel/installer 

我运行以下命令以获取最新版本的Laravel:

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



2.本地首次测试

然后运行cd laravel6-on-google-cloud-run ,然后cd laravel6-on-google-cloud-run php artisan serve 。 要查看一切正常,我在浏览器中访问了地址http://本地主机:8000 ,它对我有用。 我在本地安装了PHP 7.2。



3.在GitHub上创建一个新的存储库

在GitHub上创建一个新的存储库,如下所示:



4. 添加存储库和自述文件

现在,在创建存储库之后,将其添加到Laravel的本地副本中并添加README文件。
为此,请在控制台中运行以下命令:

 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 

在GitHub上的存储库中运行命令后,出现以下内容:



5.添加完整的Laravel,打开请求请求

现在,通过运行以下命令,将整个应用程序作为请求请求发送到GitHub存储库:

之后,像这样 ,在存储库中打开“拉取请求”。 也许您认为如果我一个人在做一个项目,为什么我需要一个请求请求?

好吧,好吧,我认为即使您一个人工作,也应该始终遵循系统的方法。
之后,放慢您的拉取请求。

6.使用GitHub操作测试设置

不是有趣的部分。 在发出拉取请求之后,GitHub将知道这是一个Laravel项目。 单击存储库页面上的“ 操作”选项卡,您将看到类似如下所示的内容:



单击Laravel下的设置此工作流程 ,然后在下一页上单击右上角的开始提交按钮。 之后,添加如下所示的提交消息,然后单击提交新文件



这就是您如何安装CI的方法。 现在默认情况下,Laravel测试将在每次git push上运行。 有困难吗?
感谢Great Mind GitHub!
不再创建.myCIname.yml文件!

7.添加docker并运行docker-compose以在本地运行应用程序

现在,让我们添加docker并使docker-compose无需PHP或artisan serve即可在本地运行应用程序。

本部分教程的灵感来自Nicolas的Laravel在Google Cloud Run上

如果您想进一步了解Docker和Laravel,请参阅本文

首先,请运行以下命令来更新master分支,因为我们使用GitHub界面添加了新的工作流程文件:

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

将密钥添加到.env.example文件,从.env文件复制它,如下所示:

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

由于这只是一个演示,因此可以执行此操作,但是在实际应用程序中,请务必谨慎使用秘密。 对于可用于生产环境的应用程序,请禁用调试以及与开发相关的其他操作。

将这样的Dockerfile添加到项目的根目录:

 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 

将以下文件添加到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> 

之后添加docker-compose.yml

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

让我们将所有内容简化为主要内容。

如果您想了解此处编写的所有内容,则可能会详尽无遗,所以让我告诉您主要内容:

  • 我们使用官方的PHP Apache docker镜像运行Laravel,它具有PHP版本7.3。
  • 我们使用多阶段构建来获取Composer的依赖关系,然后将其复制到具有PHP 7.3和Apache的主docker映像。
  • 由于Google Cloud Run要求Web服务器监听8080端口,因此我们使用000-default.conf进行配置。
  • 为了使docker-compose易于运行,请仅输入一个docker-compose up命令。
  • 到目前为止,您已经了解了这一点,从根目录运行docker-compose,所有内容都应在http://localhost:8080 ,在这种情况下,您将了解Laravel 6在Docker中本地运行。

在下面,您可以看到运行docker-compose up之后的输出:



如果您有Laravel使用Docker,请打开一个新的pull-request(例如, 一个 )并将Docker添加到您的项目中。

在打开请求请求之前,我在项目的根目录中运行了以下命令:

 git status 

您将获得如下内容:

 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) 

并运行以下命令:

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

作为奖励,他们将在推送后运行默认的Laravel测试,如下所示:



只有存储库的所有者有权访问“操作”选项卡,因此其他人无需知道测试构建的结果

8.将部署添加到Google Cloud按钮

现在,让我们以一种简单的方式将此Laravel安装部署到Google Cloud Run。 在此阶段,可以认为您已从docker分支上载了拉取请求。

让我们执行以下命令:

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

将以下内容添加到您的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)


仔细替换存储库HTTPs URL的最后一部分,例如,如果存储库位于它将更改地址 ,则提交并推送

您的请求请求应类似于以下内容

9.在Google Cloud Run上部署

合并拉取请求后,转到存储库页面,然后单击在Google Cloud上运行按钮。



之后,如果您已登录Google帐户,并且已通过一个项目设置了Google云,请单击“继续”按钮。 在此之后,您可能需要稍等片刻:

  1. 选择一个项目-选择一个项目以部署此应用程序
    选择一个区域-选择一个区域来部署此应用程序,我通常选择us-central-1
    然后等待容器收集和扩展,在我的情况下,该过程如下所示:

如果一切顺利,那么在Google Cloud Shell上您将看到HTTPs URL,您可以单击这些URL来查看Laravel应用程序正在运行,如下所示:



上面发生的事情是这样的:

  1. 选择一个区域后,该脚本通过存储库中的Dockerfile构建了Docker容器的映像;
  2. 然后,他将组装好的图像推送到Google Container Registry中;
  3. 之后,他使用gcloud CLI将已组装的映像部署到Cloud Run,后者返回URL。

10.哇! 您的应用程序正在运行!

获取网址后,您将看到您的应用程序在Google Cloud Run上运行,如下所示:



如果要部署其他版本,可以将拉取请求更改为master,然后再次单击按钮进行部署。

有关Google Cloud Run的更多信息


Google Cloud Run的价格非常优惠。 您可以在Google Cloud Run的容器或网络应用程序中运行任何应用程序。

我运行了一个家庭项目,该项目每分钟收到1个请求,而我不必支付任何费用。

在引擎盖下,他使用Knative和Kubernetes。 它也可以在您的Kubernetes集群中运行,但是谁愿意管理K8s集群,只要您可以推送并学习一个可扩展的无服务器完全托管应用程序

TLDR


要在Google Cloud Run上快速启动Laravel 6,请执行以下步骤:






结论


希望对您而言,在Google云上运行Laravel应用程序是一项简单的任务。 您甚至可以使用Github操作运行测试。 希望本文对您有所帮助。

要采用CI / CD方法,您可以阅读本文 ,该文章讨论了如何在云中使用构建。 由于相同的容器在本地和生产环境(Google Cloud Run)均可工作,因此您无需学习新框架即可切换到无服务器架构。

容器中的任何Web应用程序都可以在Google Cloud Run上运行,因此我认为这是一项很棒的服务!


就这样了,我们提醒您,1月21日至22日,每个人都可以访问免费的在线强化服务 ,在此框架内,我们将创建一个Telegram机器人来在企业点咖啡并在线付款。 您可以在这里注册第二天的强化课程

Source: https://habr.com/ru/post/zh-CN484738/


All Articles