使用宝塔面板在centos7服务器上一键部署运行环境并实现代码自动化配置

宝塔真是一个好工具,它帮助我们快捷的搭配服务器运行所需要的环境,省去手动编译安装各种繁琐又容易出错的环节,最关键的是它还是免费的,自从有了宝塔面板,搭建环境再也不是一件辛苦的事了。好了,闲话少说,下面我来介绍一下在自己的腾讯云主机(操作系统是centos7)上安装宝塔面板并实现代码自动化部署的全流程,并做一下记录。

一、安装宝塔并配置gitlab代码仓库

1.安装宝塔

这里不再赘述,详见官网教程

https://www.bt.cn/bbs/thread-19376-1-1.html

2.登陆面板,选择环境安装,我选择的是LNMP,后台用的nginx系统

3.在面板中选择gitlab安装,之后登陆gitlab网页端,修改个人资料,在修改个人邮箱的时候遇到了问题,始终收不到gitlab发送的确认邮件,经过网上各种搜索配置,修改/etc/gitlab/gitlab.rb进行邮箱配置,我使用的是163邮箱,首先在163邮箱申请发送SMTP邮件,关于如何设置163SMTP服务器发送邮件,请看这篇文章

https://mp.csdn.net/postedit/84566514

然后在gitlab.rb进行各种配置,使用下面这行命令重置gitlab配置之后,宝塔nginx崩溃了,始终打不开

gitlab-ctl reconfigure

在宝塔社区找到解决办法

cp /opt/gitlab/embedded/sbin/gitlab-web /opt/gitlab/embedded/sbin/nginx

之后进入gitlab测试环境

gitlab-rails console

进行邮件发送测试

Notify.test_email('[email protected]', '111', '22222').deliver_now

一直报这个错误

网上说是要使用465端口,同时我在宝塔安全组的出站规则中添加开放465端口,最终的配置是这样

gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.163.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "我的邮箱@163.com"
gitlab_rails['smtp_password'] = "邮箱授权码"
gitlab_rails['smtp_domain'] = "163.com"
gitlab_rails['smtp_authentication'] = :login
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = '我的邮箱@163.com'
user["git_user_email"] = "我的邮箱@163.com"
gitlab_rails['gitlab_email_display_name'] = 'gitlab用户名'

再次重置配置并且重启gitlab,进行邮件测试,终于发送成功

4.在gitlab中创建项目,把宝塔面板中gitlab已经生成的ssh公钥放到gitlab添加公钥的的地方,在这里我又遇到一个问题,因为我想在安装gitlab的服务器上拉取gitlab中的代码,我使用git clone git@我的服务器ip/root/project.git克隆项目时一直报错,显示克隆超时,说我没有权限,或者这个项目不存在,搜索到一大堆原因,说什么22端口被防火墙禁止,或者ip不在同一个网段,但是我在本地机器上重新生成ssh秘钥并克隆项目却没有问题,后来我又猜想是不是识别不同机器的原因,最后灵机一动,改成git clone [email protected]/root/project.git,克隆成功,对啊,本来就是在同一个机器上克隆,早就应该想到用127.0.0.1了。

至此,项目仓库已经建好,通过git的ssh协议进行项目克隆,拉取,推送也没什么问题了,接下来就是项目推送时候的时候,线上代码的自动化更新与部署了

一、使用gitlab-runner实现自动化

使用gitlab-runner实现自动化的原理就是,gitlab-ci会自动监听的代码仓库的各种事件,要推送阿,拉取阿,一旦监听到发生了代码推送,就会告诉该项目所匹配的runner去执行项目中的.gitlab-ci.yml文件,.gitlab-ci.yml文件中就规定了代码从提交到测试到发布的一系列所需要执行的命令和文件,通过执行这个文件中的一系列步骤从而实现代码的自动化部署。

1.安装runners

添加gitlab官方库

curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh | sudo bash

安装runner

sudo yum install gitlab-runner

注册runner

sudo gitlab-runner register

按照gitlab的runner配置要求

配置完之后我出现这样一个错误

我这是用的我服务器的地址,后来我想到我这是在同一台机器上安装的runner,所以我把ip地址换成127.0.0.1,但是又报这个错

网上说是gitlab与gitlab-runner的版本不匹配,我升级了版本也不管用,至此,使用gitlab-ci实现的自动化的思路受挫,我也没有找到合适的解决方法,希望哪位大神指点一下怎么解决这个问题

二、使用webhook实现自动化

webhook的原理就是通过api请求的方式来实现自动配置代码环境,当gitlab-ci监听到推送事件的时候,就是向你增加好的webhook钩子对应的链接地址发送一个api请求,你可以在这个api请求中处理你的代码自动化,如下图所示

1、实现钩子api

在服务器上新建gouzi.php文件,配置好nginx使它可以访问

在文件中验证我们将要设定的私密授权码,为了安全考虑还可以验证访问api的服务器ip地址,验证通过后就可以执行我们的shell代码了,这是我的钩子文件

$valid_token = '私密授权码';
$valid_ip = array('访问的服务器ip');
$client_token = $_SERVER['HTTP_X_GITLAB_TOKEN'];
$client_ip = $_SERVER['REMOTE_ADDR'];
if ($client_token !== $valid_token) die('Token mismatch!');
if (!in_array($client_ip, $valid_ip)) die('Ip mismatch!');
$result=array();
exec("shell脚本文件",$result);
print_r($result);

这是我的shell脚本文件,如果项目已经存在则拉取,如果项目不存在则新建

if [ -d "项目目录" ]
then
  cd 项目根目录
  git pull
  composer install
else
  cd 项目父目录
  git clone git地址
  composer install
fi

测试api的时候发现exec函数没有执行权限,需要去php.ini文件搜索disable_functions,删除里面的exec函数,取消对它的禁用,重启nginx服务,再次访问api,可以运行了

2.增加webhook钩子

来到上图所示页面,填入我们测试好的api请求地址,和设置的私密授权码,点击新增,钩子就增加好了,下次只要我们在本地推送项目的时候,服务器上就会自动构建好代码了

发布了27 篇原创文章 · 获赞 6 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/github_37673306/article/details/84645596