Walle 瓦力 安装部署
http://www.walle-web.io/docs/ 瓦力官网
成都创新互联公司长期为上千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为麦积企业提供专业的成都网站制作、成都网站设计,麦积网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。
Walle 一个web部署系统工具,配置简单、功能完善、界面流畅、开箱即用!支持git、svn版本管理,支持各种web代码发布,PHP,Python,JAVA等代码的发布、回滚,可以通过web来一键完成。
功能列表
- 用户分身份注册、登录 
- 开发者发起上线任务申请、部署 
- 管理者审核上线任务 
- 支持多项目部署 
- 支持多项目多任务并行 
- 快速回滚 
- 项目的用户权限管理 
- 部署前准备任务pre-deploy(前置检查) 
- 代码检出后处理任务post-deploy(如vendor) 
- 同步后更新软链前置任务pre-release 
- 发布完毕后收尾任务post-release(如重启) 
- 执行sql构建(不要担心忘记测试环境sql同步) 
- 线上文件指纹确认 
- 支持git、svn版本管理 
原理分析    
宿主机、目标机群、操作用户关系如下图所示,宿主机(walle所在的机器),是一个中间机器,是代码托管与远程目标机群的纽带。
所以宿主机需要与代码托管(github/gitlab)和远程目标机群都建立ssh-key信任。

上线流程图

依赖      
- Bash(git、ssh) 
- 意味着不支持win、mac的zsh 
- LNMP/LAMP(php5.4+) 
- php需要开启pdo_MySQL,exec函数执行 
- Composer 
- 如果国内环境安装极慢,可以直接下载vendor解压到项目根目录 
- ansible 
安装
1、宿主机安装 ansible
| yum install ansible # RHEL/CentOS/Fedora | 
2、宿主机无需其他配置,兼容 ~/.ssh/config 名称、证书配置
3、目标机无需额外配置
walle
- 项目配置 中 开启Ansible 
- (可选) config/params.php 配置 ansible_hosts 文件存放路径 
- 按正常流程发布、上线代码,传输文件、远程执行命令均会通过ansible并发执行 
php5.6环境CentOS安装
删除老的安装包
remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-gd.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-pdo.x86_64```
- CentOs 6.x 
 rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
 CentOs 7.X
 rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm
 - 安装php 5.6相关组件
 ```yum install php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64
- 安装php-fpm 5.6 - yum install php56w-fpm
安装部署 Walle      
1.简洁安装指南
| git clone git@github.com:meolu/walle-web.git | 
2.最最最详细安装指南
以下安装,均在宿主机(一台配置了LAMP/LNMP的linux机器,并且安装git/svn)上操作,如有问题,详见Q&A。
如果还没有安装php 5.4+环境的,请先安装php5.4+,详情看php 5.6安装。
1.代码检出
| mkdir -p /data/www/walle-web && cd /data/www/walle-web # 新建目录 | 
2.设置mysql连接
| vi config/local.php +14 | 
3.安装composer,如果已安装跳过
| curl -sS https://getcomposer.org/installer | php | 
4.安装vendor
| cd walle-web | 
安装速度慢或失败,可直接下载vendor解压到项目根目录
5.初始化项目
| cd walle-web | 
6.配置nginx
凡是在第7步刷新页面看到50x均是前5步安装不完整,自行检查
凡是在第7步刷新页面看到404均是nginx配置不当,自行检查
nginx简单配置
| server { | 
7.恭喜:)
访问地址:localhost
当然,可能你配置nginx时的server_name是walle.company.com时,配置本地hosts之后,直接访问:walle.company.com亦可。
安装错误       
composer安装速度慢
好吧,我已经猜到会有人问有没有现成的,有! 下载百度网盘,解压vendor放到walle-web根目录即可。
第一次使用composer可能会出现的问题:1 没有添加git的token
Could not fetch https://api.github.com/repos/jquery/jquery, please create a GitHub OAuth token to go over the API rate limit
Head to https://github.com/settings/tokens/new?scopes=repo&description=Composer+on+localhost+2015-10-08+1123
to retrieve a token. It will be stored in “/root/.composer/auth.json” for future use by Composer.
Token (hidden):
解决办法:
- 复制提示里的地址到浏览器,点击生成git token,如上面的:https://github.com/settings/tokens/new?scopes=repo&description=Composer+on+localhost+2015-10-08+1123 
- 复制token到命令行,认证,继续 
第一次使用composer可能会出现的问题:2 composer install 可能会出现的错误
Loading composer repositories with package information
Installing dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.Problem 1
yiisoft/yii2 2.0.x-dev requires bower-asset/jquery 2.1.@stable | 1.11.@stable -> no matching package found.
….
解决办法:composer global require "fxp/composer-asset-plugin:*"
如何添加用户key到git的ssh-keys列表
| su - www # 假如www为你的php进程用户 | 
如何添加用户ssh-key到目标机群部署用户ssh-key信任
宿主机操作
| ps aux|grep php # 假如www_php为你的php进程用户 | 
初始化walle时失败:could not find driver
缺少pdo扩展,解决办法:添加pdo扩展
| ubuntu | 
7.nginx简单配置
| server { | 
切换用户(www)时:this account is currently not available
| cat /etc/passwd | grep www # 查看是否为 /sbin/nolgin | 
解决办法:
| vipw /etc/passwd 修改/sbin/nolgin为/bin/bash | 
The file or directory to be published does not exists: /data/www/walle-web/vendor/bower/jquery/dist
新建此目录即可:/data/www/walle-web/vendor/bower/jquery/dist
Call to undefined function yii\web\mb_parse_str()
缺少mbstring扩展,安装mbstring扩展重启php即可。mbstring扩展:http://php.net/manual/zh/mbstring.installation.php
Git项目配置      
git 项目配置指南
git部署是最推荐的方式,它无论对于何种语言都是合适的。
一、基本要求:
- 宿主机php进程用户www_php(假如,可通过配置的检测查看或ps aux|grep php)的ssh-key要加入git/gitlab的deploy-keys。当然也可以http地址带用户名密码(不推荐):https://username:password@github.com/meolu/walle-web.git 
- 宿主机php进程用户www_php(假如,可通过配置的检测查看或ps aux|grep php)要加入目标机群部署用户www_remote(配置中)ssh-key信任,具体怎么添加可找sa或者百度或者,这一般是用户最不理解的地方,建议先花半小时理解linux用户概念和php配置。 
二、配置项目


三、检测项目配置
配置完毕之后,先检测下,如无问题则可以发起上线单了:)
四、检测的错误和解决办法
- 宿主机代码检出检测出错,请确认php进程用户{user}有代码存储仓库{path}读写权限,且把ssh-key加入git的deploy-keys列表。详细错误:{error} 
- 问题:请确认php进程用户{user}有代码存储仓库{path}读写权限 - 没有权限,是因为用户{user}对目录{path}没有读写权限,给权限即可
 ll {path}
 chown {user} -R {path}
 chmod 755 -R {path}
- 问题:把ssh-key加入git的deploy-keys列表 - su {user} && cat ~/.ssh/id_rsa.pub
 打开 github/gitlab/bitbucket 网站, 添加 ssh-key 到ssh-keys列表
 可能的原因之一是clone git代码的时候,需要手工确认: git clone git@gitlab.xxx.com:yyy/zzz.git
可能的原因之一是clone git代码的时候,需要手工确认: git clone git@gitlab.xxx.com:yyy/zzz.git

目标机器部署出错,请确认php进程{local_user}用户ssh-key加入目标机器的{remote_user}用户ssh-key信任列表,且{remote_user}有目标机器发布版本库{path}写入权限。详细错误:{error}
- 问题:请确认php进程{local_user}用户ssh-key加入目标机器的{remote_user}用户ssh-key信任列表 - 添加机器信任,还是没理解请百度吧(因为太多的同学问这问题,实在没办法只能这么啰嗦) 
 su {local_user} && ssh-copy-id -i ~/.ssh/id_rsa.pub remote_user@remote_server
 # need remote_user's password
- 问题:{remote_user}有目标机器发布版本库{path}写入权限 - su remote_user 
 ll {path}
 chown {remote_user} -R {path}
 chmod 755 -R {path}
Svn项目配置      
svn 项目配置
svn部署上线与git有点不太一样,svn是推荐增量发布(当然也可以全量更新),在开发者提交文件列表(可能带版本号),管理员审核上线单。发起部署时,为该上线单开辟一个独立空间,检出代码,选择上线单中的文件(可能带版本号)同步到目标机群。有不了解宿主机和目标机群关系、上线流程的同学先到项目主页了解。
因为svn没有git的版本快照,所以在部署需要全量代码编译操作时,只能选择全量更新,此时要求发布的分支/tag/trunk是可发布状态。建议java + git组合。同理其它需要全量代码在宿主机做编译相关的操作的语言,且为svn版本管理,请慎用。
一、基本要求:
- svn目录推荐以下规范,详细可以注册riouxsvn,作为svn测试地址。当然三无(无trunk、无branches、无tags)也是支持:) 
- branches 
- tags 
- trunk 
- 宿主机php进程用户www_php(假如,可通过配置的检测查看或ps aux|grep php)要加入目标机群部署用户www_remote(配置中)ssh-key信任,具体怎么添加可找sa或者百度或者,这一般是用户最不理解的地方,建议先花半小时理解linux用户概念和php配置。 
二、配置项目


三、检测项目配置
配置完毕之后,先检测下,如无问题则可以发起上线单了:)
四、检测的错误和解决办法
- 宿主机代码检出检测出错,请确认php进程用户{user}有代码存储仓库{path}读写权限。详细错误:{error} - 没有权限,是因为用户{user}对目录{path}没有读写权限,给权限即可
 ll {path}
 chown {user} -R {path}
 chmod 755 -R {path}
- 目标机器部署出错,请确认php进程{local_user}用户ssh-key加入目标机器的{remote_user}用户ssh-key信任列表,且{remote_user}有目标机器发布版本库{path}写入权限。详细错误:{error} 
- 问题:请确认php进程{local_user}用户ssh-key加入目标机器的{remote_user}用户ssh-key信任列表 - 添加机器信任,还是没理解请百度吧(因为太多的同学问这问题,实在没办法只能这么啰嗦) 
 su {local_user} && ssh-copy-id -i ~/.ssh/id_rsa.pub remote_user@remote_server
 # need remote_user's password
- 问题:{remote_user}有目标机器发布版本库{path}写入权限 - su remote_user 
 ll {path}
 chown {remote_user} -R {path}
 chmod 755 -R {path}
高级任务配置      
高级任务方便用户自定义一些操作,无论是在代码检出前后,还是切换版本前后。
一、java配置实例
pre_deploy任务
| echo pre_deploy >> /tmp/cmd # 初始化一些东西,自由发挥 | 
post_deploy任务
| mvn package -Dmaven.test.skip=true # 编译java | 
pre_release任务
| ./xx.sh stop # 暂停服务 | 
post_release任务
| ./xx.sh start # 启动服务 | 
二、如果我想执行sudo命令?
想执行sudo命令的前提是用户有root权限,要执行哪些命令?
- 添加用户到sudoers - visudo 
 www ALL=(ALL) ALL
- 添加免密码命令 - visudo 
 www ALL = (ALL) NOPASSWD: /usr/local/nginx/bin/nginx
- 设置用户的tty(宿主机执行sudo需要此步,目标机可以跳过此步) - Defaults:www !requiretty 
项目用户配置      
角色分为管理员(注册可选)、开发者(注册可选)、项目审核管理员(前面二者均可是)。
1.管理员
注册时,选择角色为管理员,注册后邮件验证,但此时也不是立刻拥有管理员权限,需要其它管理员审核通过才行。

管理员的权限列表
- 配置新的项目、修改自己的项目配置 
- 审核新管理员 
- 设置项目的成员、项目审核管理员 
- 审核上线单 
- 上线 
2.项目审核管理员
注册时无此用户角色,为管理员为减轻自己审核上线单压力、防止管理员不在线而影响上线而需要一两个代理审核管理员。但不能编辑项目配置,也不能添加项目成员,只比开发者多一个审核上线单的权限。
管理员的权限列表
- 审核上线单 
- 上线 


3.开发者
普通开发者可提交上线单,上线部署
管理员的权限列表
检测错误     
- 宿主机代码检出检测出错,请确认php进程用户{user}有代码存储仓库{path}读写权限,且把ssh-key加入git的deploy-keys列表。详细错误:{error} 
- 问题:请确认php进程用户{user}有代码存储仓库{path}读写权限 - 没有权限,是因为用户{user}对目录{path}没有读写权限,给权限即可
 ll {path}
 chown {user} -R {path}
 chmod 755 -R {path}
- 问题:把ssh-key加入git的deploy-keys列表 - su {user} && cat ~/.ssh/id_rsa.pub
 打开 github/gitlab/bitbucket 网站, 添加 ssh-key 到ssh-keys列表
- 目标机器部署出错,请确认php进程{local_user}用户ssh-key加入目标机器的{remote_user}用户ssh-key信任列表,且{remote_user}有目标机器发布版本库{path}写入权限。详细错误:{error} 
- 问题:请确认php进程{local_user}用户ssh-key加入目标机器的{remote_user}用户ssh-key信任列表 - 添加机器信任,还是没理解请百度吧(因为太多的同学问这问题,实在没办法只能这么啰嗦) 
 su {local_user} && ssh-copy-id -i ~/.ssh/id_rsa.pub remote_user@remote_server
 # need remote_user's password
 # 为什么我把{local_user}的ssh-key加到远程机器的{remote_user}下的~/.ssh/authorized_keys还是不能免密码登录
 # 免密码登录需要远程机器权限满足以下三个条件:
 /home/{remote_user} 755
 ~/.ssh 700
 ~/.ssh/authorized_keys 644 或 600
- 问题:{remote_user}有目标机器发布版本库{path}写入权限 - su remote_user 
 ll {path}
 chown {remote_user} -R {path}
 chmod 755 -R {path}
提交上线单          
上线单包括两种方式:git和svn
一、git 项目提交上线单

二、svn 项目提交上线单
svn上线单与git类似,但有些区别,会有全量上线和增量上线两种主要形式,增量上线支持指定文件的版本号。分别看下可以有哪些格式填写上线单:
- 上线全量文件 - * 
- 增量上线指定文件 - file_name1 
 file_name2
- 增量上线指定文件的指定版本 - file_name1 commit_id 
 file_name2 commit_id

部署出错          
1.上线至全量更新服务器时出错:mv -fT
原因分析:更新目标机群是以软链方式来更新webroot,如果提前在目标机群创建了webroot目录,软链覆盖将会失败。
解决办法:直接删除目标机群webroot目录,确定其父目录有读写的权限即可,由瓦力系统生成webroot软链接。
2.上线出错,想知道到底发生了什么事情
有些错误walle捕捉不到,默认操作日志在/tmp/walle/下,具体可在config/local.php里log.dir配置路径,tail着日志,部署看日志。
3./tmp/walle下无日志文件
原因centos 7 yum 安装的php-fpm默认/tmp目录不可写:/usr/lib/systemd/system/php-fpm.service 中的 PrivateTmp=true 禁止了向tmp目录写日志
解决:
vi /usr/lib/systemd/system/php-fpm.service
PrivateTmp=false
systemctl daemon-reload
systemctl reload php-fpm
致此瓦力已经部署成功!如有任何问题可联系博主或者登录官网查看详情。
本文标题:Walle瓦力安装部署
文章位置:http://www.scyingshan.cn/article/ghjsdj.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 