龙空技术网

DevOps实例之使用GitLab CI进行Laravel应用程序的测试和部署

虫虫安全 842

前言:

此刻大家对“nginxphpmysql部署”大致比较讲究,兄弟们都需要了解一些“nginxphpmysql部署”的相关知识。那么小编也在网摘上收集了一些有关“nginxphpmysql部署””的相关文章,希望朋友们能喜欢,同学们快快来学习一下吧!

概述

随着GitLab在DevOps方面持续开发,基于GitLab CI持续集成实现全自动化的开发部署栈成了现实。但是由于Gitlab版本迭代太快,时下网上的文档都早已经过期,本文虫虫结合Gitlab官方最新的文档来给大家实例展示基于Gitlab CI/CD 的Laravel项目自动化开发、测试、部署教程。本文中我们将实例展示Laravel应用程序创建,配置生产服务器,再到利用Envoy实现生产环境,并通过GitLab CI/CD持续交测试和部署。

创建Laravel应用程序创建应用

假设已经安装了laravel,我们新建一个laravel项目Cctest,并以此创建Git仓库。laravel命令创建项目:

laravel new --dev CCtest

laravel就会给我们搭好项目架构,目录如下图:

单元测试

我们此处建立一个单元测试实例,。

Laravel的应用都支持有两种类型的测试,功能测试和单元测试,位于tests目录。

单元测试tests/Unit/ExampleTest.php中的代码如下:

Laravel默认使用PHPUnit进行测试,PHPUnit可以通过下面命令安装:

composer require --dev phpunit/phpunit

安装好后执行vendor/bin/phpunit tests/Unit/ExampleTest.php

建立Git仓库

我们在Gitlab服务器上建立一个新项目"CCtest",并添加到上一部我们创建的Laravel中。

cd CCtest

git init

git remote add origin git@XX/Chongchong/cctest.git

git add。

git commit -m '初始化CCtest'

git push -u origin master

生产环境准备

Laravel是个典型的PHP应用,其运行需要LNMP环境,即Linux,Nginx,MySQL和PHP。

创建部署用户

创建一个部署用户和应用部署目录,并给用户赋予权限。

useradd deployer

创建web目录/var/www的,给部署用户deployer赋予读写执行权限

setfacl -R -m u:deployer:rwx /var/www

添加SSH证书

为了能将GitLab上的私有存储库的应用程序部署到生产服务器。首先,我们要生成一个SSH证书的密钥对。将公钥部署到部署用户下的authorized_keys文件

sshd-keygen

cd ~/.ssh/

cp id_rsa.pub >> authorized_keys

复制私钥id_rsa内容出来,我们后面供部署使用

添加Gitlab SSH变量

为在.gitlab-ci.ym配置文件中使用私钥,并保证私钥安全防止其泄露,我们在Gitlab项目管理也将其配置为变量(注意对配置文件中其他敏感信息,比如密码、认证token等也使用类似的方法)。

打开项目的 "设置">"CI/CD"下Variables配置下设置:

在KEY字段中,添加名称SSH_PRIVATE_KEY,并在VALUE字段中粘贴上面我们准备到证书私钥id_rsa的内容:

同时将该SSH证书的公钥id_rsa.pub添加到项目> 设置> Repository的部署证书下,这样可以SSH方式clone该项目库。添加成功后就可以用

git clone git@XXX:<用户名>/cctest.git

来clone项目了。

配置Nginx

现在,让我们确保我们的Web服务器配置根目录current/public,典型的配置方法是通过/usr/local/nginx/conf/nginx.conf

站点server的配置如下:

server {

root /var/www/app/current/public;

server_name XXX.example;

}

GitLab持续集成

通过GitLab CI/CD我们可以很方便的使用Docker容器来进行应用程序的测试和部署。

为了能够使用GitLab CI/CD构建,测试和部署,我们先准备我们的工作环境。我们使用Docker镜像来生成容器化的环境,镜像安装运行Laravel应用程序需要运行的最低要求组件。

创建镜像

我们在应用程序中创建Dockerfile,用来生成镜像,Gitlab也提供了方便文件模版我们可以用模版创建Dockerfile。

然后我们配置Dockerfile,内容如下:

构建容器镜像库

GitLab也提供了Container Registry服务可以用来管理和存储docker镜像。可以用它来方便的建立私有地镜像仓库。

在GitLab管理也,点击 "Registry"选项卡。

要开始使用Container Registry,需要使用我们的GitLab用户名和密码登录GitLab Registry:

docker login registry.XXX

然后通过下面的命令构建并推送镜像:

docker build -t registry.XXX/<用户名>/cctest

docker push r registry.XXX/<用户名>/cctest

配置GitLab CI/CD

为了使用GitLab CI/CD构建和测试我们的应用,我们要创建配置和.gitlab-ci.yml的文件,同理创建.gitlab-ci.yml也支持使用gitlab内置的模版并在此基础上修改。

我们的.gitlab-ci.yml文件如下所示:

镜像配置

image关键字指示Runners要使用的镜像。

services关键字定义链接到镜像的其他镜像。此处我们使用上一步创建的镜像为基本镜像,并增加使用MySQL 5.7作为service。

注意:如果您希望使用不同的PHP版本和数据库管理系统测试您的应用程序,则可以为每个测试作业定义不同的图像和服务关键字。

变量Variables

GitLab CI/CD配置文件.gitlab-ci.yml中我们可以使用环境变量,比上我们上文中添加的SSH证书变量SSH_PRIVATE_KEY。此处我们定义MySQL为数据库,通过将MYSQL_DATABASE变量定义为数据库名称并将MYSQL_ROOT_PASSWORD变量定义为root的密码来动态调整MySQL实例的配置。

更多变量是mysql配置变量DB_HOST设置为127.0.0.1,

DB_USERNAME设置为root,这些都是Laravel特定变量,用户其连接数据库。

单元测试

我们使用shell脚本来运行unit_test作业时要执行参数等。脚本中包括,建立Laravel的Artisan命令,最后通过PHPUnit进行测试。

部署到生产

作业deploy_production将应用程序部署到生产服务器。脚本中使用了Envoy部署应用程序,用到$SSH_PRIVATE_KEY的SSH私钥。

在GitLab持续交付方法中通过environment关键字告诉GitLab该作业部署到生产环境。 url关键字会在GitLab Environments添加一个应用程序的链接。

only关键字指定只有在管道构建主分支时才应执行作业。

when:manual表示通过手动确认进行部署。

运行DevOps

上面我们配置好了GitLab CI/CD测试和部署应用程序所需的一切。我们只需提交.gitlab-ci.yml到master分支,就会自动触发一个管道,可以在项目的管道下实时查看。

在这里,我们看到我们的测试和部署阶段。 Test阶段正在构建unit_test。。

作业Jobs页面

如果有问题,我们回滚到应用程序的最新工作版本。

通过单击右侧指定的外部链接图标,GitLab将打开生产网站。

总结

本文我们使用GitLab CI/CD进行了一个Laravel项目的自动化测试和部署到生产环境,完成了一个完整DevOps全栈实例。关于GitLab CI/CD更多的文档请参考GitLab官方文档。

标签: #nginxphpmysql部署