Walle(瓦力):一套软件开发的部署系统。提供了清晰的日志记录,支持数据的回滚。用于解决大型团队在软件开发中的测试、预测试和上线的统一部署管理。
系统环境:CentOS6.8-A CentOS-6.8-B
软件支持:walle ssh php-5.6 gitlab-8.6.0 composer nginx-1.10 git2.3 Mysql5.6
安装过程:
-
- 基础环境
- yum install openssh-clients 支持ssh(CentOS6.8-A)
- 安装nginx(请自行百度,CentOS6.8-A)
- 安装php-5.6(请自行百度),把php配置到环境变量。(CentOS6.8-A)
- 安装composer(请自行百度),php composer-setup.php --install-dir=/usr/bin --filename=composer(CentOS6.8-A)
- 安装gitlab(请参考官网安装教程, CentOS6.8-B)
- 安装git(请自行百度)。并添加到环境变量(CentOS6.8-A)
- 安装Mysql5.6(请自行百度)
- 测试基础环境搭建
- 在CentOS6.8-A中通过nginx访问php文件是否成功
- 在CentOS6.8-B中访问gitlab是否成功
- 用户配置
- 添加新用户(www_php),并且是可登录的正常用户
- 设置php-fpm的用户以及用户组为新创建的用户(www_php),并设置重启
- 为新的用户通过ssh生成密钥(公钥和私钥)
- 把新用户的公钥添加到gitlab,并进行测试无密码git操作(拉取|推送等等),首次拉取会进行服务端身份指纹的验证,再次拉取则可以进行无密码拉取
- 设置新用户自己通过ssh无密码连接自己(centos可以通过ssh连接自己)
- 文件权限设置
- mkdir /storage/deploy/form
- mkdir /storage/deploy/release
- mkdir /storage/www
- 设置上述创建的文件可以为新用户(www_php)读写的权限
- 安装walle(http://www.walle-web.io/docs/installation.html)
- git clone https://github.com/meolu/walle-web.git
- 在walle-web->config->local.php文件中配置连接Mysql的参数
- composer install --prefer-dist --no-dev --optimize-autoloader -vvvv 通过composer安装walle-web的第三方拓展
- walle-wab->yii walle/setup 初始化项目
- 配置nginx虚拟域名
- 基础环境
server { listen 80; server_name walle.compony.com; # 改你的host root /the/dir/of/walle-web/web; # 根目录为web index index.php; # 建议放内网 # allow 192.168.0.0/24; # deny all; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { try_files $uri = 404; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
6. 访问域名。内容的管理员帐号为admin|admin
问题解答
1:请确认php进程用户{user}有代码存储仓库{path}读写权限。
chown -R {user}:{user} {path}
chmod 755 {path}
2:请确认php进程用户{user}把ssh-key加入git的deploy-keys列表
1):没有把{user}生成的公钥添加到gitlab的ssh-key管理列表中。请添加,并且测试是否可以通过{user}进行无密码的git的操作
2):确定把{user}加入到了指定的git管理仓库中,那么请使用git随便拉取一个repository,因为首次拉取会让客户端进行远程服务端的身份指纹验证的操作
请确保{user}可以进行无密码的正常拉取操作
3):当以上两种情况都没有问题,命令行可以正常拉取,但是通过walle还是报错。请将git创建一个软连接到/usr/bin。(本人遇到的就是这个问题)
3:gitlab在添加ssh的时候报500错误
cat /var/log/gitlab/gitlab-rails/production.log
1):/usr/bin/env: ssh
yum install openssh-clients -y
4:请确认php进程{local_user}用户ssh-key加入目标机器的{remote_user}用户ssh-key信任列表
请确保{local_user} 通过ssh可以无密码登录{remote_user}
5:{remote_user}有目标机器发布版本库{path}写入权限
解决方法请参考->1
6:walle上线出现无法已非目录覆盖目录
这里的webroot填写的存放路径的最后一个文件名称,不能存在。walle会部署项目的时候以最后一个名称为项目文件名。如:/www/webroot/test 则test不需要创建,并且test需要有针对上图中的[用户]拥有读写权限。
walle的原理解析
通过PHP中的exec()函数基于SSH安全验证机制(免密码登录)进行一系列的命令操作,如git的拉取、文件夹的创建、文件的远程拷贝等等。