发布于 2026-01-06 0 阅读
0

逐步在 Google Cloud Run 上配置 Laravel 6 并实现持续集成 (CI)

逐步在 Google Cloud Run 上配置 Laravel 6 并实现持续集成 (CI)

Laravel在过去几年里人气飙升。Laravel 社区甚至表示,Laravel 让编写 PHP 代码从痛苦变成了乐趣。Laravel 6 带来了一些有趣的新特性。为应用程序获取一个高度可扩展的可用 URL 可能需要数小时甚至数天。搭建像 Kubernetes 这样的环境是一项艰巨的任务。而 Google Cloud Run 正好弥补了这一不足,只需几分钟即可为任何容器化应用程序获得可用的 HTTPS URL。

Google Cloud Run是无服务器且完全由 Google 管理的云服务,它提供超大规模扩展、按秒计费、HTTPS URL 和自定义域名映射。如果您想运行无状态容器,Cloud Run 无疑是最简便的方法。本文将详细介绍如何让您的 Laravel 6 应用在 Google Cloud Run 上运行,并支持持续集成 (CI)。

先决条件

  • 您熟悉 PHP/Composer 并且了解 Laravel(如果您来到这里,我想您应该已经了解了)。

  • 您知道如何通过命令行界面使用 Git。

  • 您的代码托管在 GitHub 上用于持续集成/持续交付 (CI/CD),并且您熟悉 GitHub。

  • 对 Docker 有一定了解,甚至可能了解多阶段构建。

  • 拥有一个可用的谷歌云账户(他们会免费赠送300 美元额度,有效期一年,所以没有理由不注册一个账户)。

为什么 Cloud Run 是初学者的绝佳选择?

原因如下:

  1. 了解最佳实践和软件,例如 Docker 和 CI/CD。

  2. 最基本的操作就是点击一个按钮,选择两项内容,等待5分钟,就能获得一个可用的HTTPS网址。还有比这更简单的吗?:)

部署步骤

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

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

首先,按照官方安装指南中的说明,克隆 Laravel 项目,或者使用 Composer 或 Laravel CLI 。我使用 Composer 获取最新版本的 Laravel,如下所示:

命令

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

composer create-project --prefer-dist laravel/laravel laravel6-on-google-cloud-run
Enter fullscreen mode Exit fullscreen mode

安装 Laravel 输出安装 Laravel 输出

2. 先在本地测试一下。

然后运行 ​​`cd laravel6-on-google-cloud-run`,再运行 `php artisan serve` 来查看是否正常工作。对我来说,在浏览器中访问`http://localhost:8000`时一切正常。我本地安装的是 PHP 7.2。

Laravel 6 在本地运行,使用 artisan serve 命令。Laravel 6 在本地运行,使用 artisan serve 命令。

3. 创建一个新的 GitHub 仓库

在Github上创建一个新的仓库,如下所示:

创建一个 GitHub 仓库创建一个 GitHub 仓库

您可以使用任何 Git 托管提供商,在本示例中,我将使用Github Actions来运行测试,Github 也是最流行的 Git 托管服务。

4. 添加仓库,推送 README 文件

现在仓库已经创建完成,请将其添加到本地 Laravel 副本并推送 Readme 文件。为此,请在命令行界面 (CLI) 中运行以下命令:

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
Enter fullscreen mode Exit fullscreen mode

运行上述命令后,我的 GitHub 仓库中出现了以下内容。

最初的推动之后最初的推动之后

5. 添加完整的 Laravel 功能,提交 PR

现在,让我们通过执行以下命令,将整个应用程序作为 PR 添加到 Github 仓库中:

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
Enter fullscreen mode Exit fullscreen mode

之后,像这样在仓库里提交一个拉取请求(PR)。你可能会想,只有我一个人在做这个项目,为什么还需要提交 PR 呢?嗯,即使只有一个人在做项目,按部就班地做事也总是更好的。

之后合并你的拉取请求。

6. 使用GitHub Actions设置测试

合并 PR 后,GitHub 就知道这是一个 Laravel 项目了,这可不是什么轻松有趣的事情。点击仓库页面上的“操作”选项卡,你应该能看到类似下面的内容:

点击下方 Laravel 链接。点击下方 Laravel 链接。

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

好了,你的 CI 配置完成了。现在每次 git 推送都会运行 Laravel 的默认测试。是不是很简单?感谢 GitHub 提供的强大功能。以后再也不用创建 .myCIname.yml 文件了 :)。

7. 添加 Docker 和 Docker Compose 以在本地运行应用程序

现在,让我们添加 Docker 和 Docker Compose,以便在本地运行应用程序,而无需 PHP 或 Artisan serve。我们也需要容器在 Google Cloud Run 上运行 Laravel。这部分内容的灵感来自Nicolas 的文章《Google Cloud Run 上的 Laravel》。如果您想了解更多关于Docker和 Laravel 的信息,请参阅这篇文章

请先运行以下命令,将主分支更新到最新版本,因为我们已从 GitHub 界面添加了工作流文件:

git checkout master 
git fetch 
git pull --rebase origin master 
git checkout -b docker
Enter fullscreen mode Exit fullscreen mode

在 .env.example 文件中添加一个键,从 .env 文件复制如下内容:

APP_NAME=Laravel 
APP_ENV=local 
APP_KEY=base64:DJkdj8L5Di3rUkUOwmBFCrr5dsIYU/s7s+W52ClI4AA= ** 
APP_DEBUG=true 
APP_URL=http://localhost
Enter fullscreen mode Exit fullscreen mode

由于这只是一个演示程序,这样做没问题;但对于真正的应用程序,务必谨慎处理密钥。对于已投入生产环境的应用程序,请关闭调试和其他开发相关的功能。

在项目根目录下添加以下 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
Enter fullscreen mode Exit fullscreen mode

然后,在 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>
Enter fullscreen mode Exit fullscreen mode

之后添加以下 docker-compose.yml 文件

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

归根结底,就是最重要的事

如果你试图理解这里的所有内容,可能会感到不知所措,让我来概括一下主要部分:

  1. 我们使用官方的 PHP Apache Docker 镜像来运行 Laravel,其 PHP 版本为 7.3。

  2. 我们使用多阶段构建,通过 Composer 获取依赖项,然后将它们复制到包含 PHP 7.3 和 Apache 的主 docker 镜像中。

  3. 由于 Google Cloud Run 要求 Web 服务器监听 8080 端口,我们使用 000-default.conf 进行配置。

  4. 为了方便使用单个命令 docker-compose up 运行,我们使用了 docker-compose。

  5. 既然你已经读到这里,请在根目录下运行 `docker-compose up` 命令,然后在所有操作完成后访问http://localhost:8080,查看 Laravel 6 是否已在本地 Docker 容器中运行。以下是我最后运行 `docker-compose up` 命令的输出结果:

由于 Laravel 在 Docker 下运行良好,我们不妨像这样提交一个 PR ,将 Docker 添加到我们的项目中。在提交拉取请求 (PR) 之前,我在项目根目录下运行了以下命令:

git status
Enter fullscreen mode Exit fullscreen mode

它应该会显示类似下面的内容:

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**)**
Enter fullscreen mode Exit fullscreen mode

现在运行以下命令:

git add . 
git commit -m "Add docker and docker compose" 
git push origin docker
Enter fullscreen mode Exit fullscreen mode

此外,它还会在推送时运行 Laravel 默认测试,如下所示:

在 GitHub 上运行的测试,使用 GitHub Actions在 GitHub 上运行的测试,使用 GitHub Actions

只有仓库所有者才能访问“操作”选项卡,因此其他人不一定需要知道您的测试构建结果 :)。

8. 添加“部署到Google Cloud”按钮

现在让我们以最简单的方式将此 Laravel 配置部署到 Google Cloud Run。假设您已合并了来自 docker 分支的 PR,请运行以下命令:

git checkout master 
git fetch 
git pull --rebase origin master 
git checkout -b cloud-run-button
Enter fullscreen mode Exit fullscreen mode

然后将以下内容添加到您的 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)**
Enter fullscreen mode Exit fullscreen mode

请注意,将最后一部分替换为您的仓库的 HTTPS URL,例如,如果您的仓库位于https://github.com/ghaleroshan/laravel6-on-google-cloud-run,则应替换为https://github.com/ghaleroshan/laravel6-on-google-cloud-run.git,然后提交并推送。您的 PR 应该类似于这样

9. 在 Google Cloud Run 上部署

合并 Pull Request (PR) 后,转到您的仓库页面,然后点击“在 Google Cloud 上运行”按钮。

带有“在 Google 云端运行”按钮的存储库带有“在 Google 云端运行”按钮的存储库

之后,如果您已登录 Google 帐户并已设置包含 1 个项目的 Google 云,请点击“继续”。您可能需要稍等片刻。

  1. 选择项目 — 选择要部署此应用程序的项目

  2. 选择区域 — 选择要部署此应用程序的区域,我通常选择 us-central-1。

  3. 然后等待容器构建和部署完成,您可以在下面看到我的操作流程:

如果 Google Cloud Shell 一切正常,您将看到一个 HTTPS URL,点击该 URL 即可查看正在运行的 Laravel 应用,如下所示:

使用 Google Cloud Shell 部署应用使用 Google Cloud Shell 部署应用

刚才发生的事情是:

  1. 选择区域后,脚本会根据仓库中的 Dockerfile 构建 Docker 容器镜像。

  2. 然后它将构建好的镜像推送到Google Container Registry。

  3. 之后,使用gcloud CLI 将构建好的镜像部署到 Cloud Run,并返回了 URL。

10. 太棒了,你的应用运行正常

获取 URL 后,您应该可以在 Google Cloud Run 上看到您的应用运行情况,如下所示:

Laravel 6 运行在 Google Cloud Run 上Laravel 6 运行在 Google Cloud Run 上

如果你想部署另一个版本,你可以将你的 PR 合并到 master 分支,然后再次点击按钮进行部署。

更多关于 Google Cloud Run 的信息

Google Cloud Run 的定价非常优惠。你可以在 Google Cloud Run 上运行任何容器化应用或 Web 应用。我曾经运行过一个个人项目每分钟大约只有 1 个请求,但我完全免费。

它在底层使用了KnativeKubernetes。它也可以运行在你的 Kubernetes 集群上,但是如果只需推送就能获得可扩展的无服务器全托管应用程序,谁还会选择管理 K8s 集群呢?

TLDR

要在 Google Cloud Run 上快速运行 Laravel 6,请按照以下步骤操作:

  1. 请确保您已登录Google Cloud 帐户。

  2. 请访问https://github.com/geshan/laravel6-on-google-cloud-run

  3. 点击“在 Google Cloud 上运行”蓝色按钮

  4. 选择您的项目

  5. 选择您的地区

  6. 请稍等片刻,即可获取您的 Laravel 应用的 URL,如下所示,尽情享用吧!

使用 Google Cloud Shell 部署应用使用 Google Cloud Shell 部署应用

结论

瞧,在 Google Cloud Run 上运行 Laravel 应用非常简单。你甚至已经通过 GitHub Actions 在 GitHub 上运行了测试。希望对你有帮助。要实现 CI/CD,你可以查看这篇文章,它展示了如何使用 Cloud Build 进行部署。由于本地环境和生产环境(Google Cloud Run)运行的是同一个容器,因此你无需学习新的框架即可实现无服务器架构。所有代码都开源在这个GitHub 仓库中。

任何容器化的 Web 应用都可以在 Google Cloud Run 上运行,这是一项非常棒的服务。

原文发表于https://geshan.com.np,日期为 2019 年 10 月 21 日。

文章来源:https://dev.to/geshan/set-up-laravel-6-on-google-cloud-run-step-by-step-with-continuous-integration-ci-3ilo