前言:
此刻大家对“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部署