最近项目接近尾声,已经开始进入测试阶段。由于开发环境和测试环境完全是分离的,每次的bug修改后,都需要上传到svn后在部署到测试服务器。之前尝试过在svn的batch处理[post-commit]中添加过脚本文件,实现了上传后自动部署的需求。但是终归不是很形象,不能做统计以及出错时候的回滚机制。
疲于手动部署的重复作业,以及svn脚本的功能缺失。决定尝试下之前遇到过的一个开源自动化部署项目-瓦力(Walle)。
关于瓦力(Walle)
Walle 一个web部署系统工具,配置简单、功能完善、界面流畅、开箱即用!支持git、svn版本管理,支持各种web代码发布,PHP,Python,JAVA等代码的发布、回滚,可以通过web来一键完成。
上面内容源自官网介绍,目前看来除了[功能完善、界面流畅]不好鉴定以外,其它内容还比较实在。
瓦力(Walle)安装
官网的安装指南还是比较详细的,基本上都可以安装成功,我测试安装的环境是 nginx+php5.6.
第一步: 下载瓦力(Walle)代码。
mkdir -p /data/www/walle-web && cd /data/www/walle-web # 新建目录 git clone git@github.com:meolu/walle-web.git . # 代码检出
第二步: 修改数据库连接,
vi config/local.php +14
'db' => [
'dsn' => 'mysql:host=127.0.0.1;dbname=walle', # 新建数据库walle
'username' => 'username', # 连接的用户名
'password' => 'password', # 连接的密码
],
第三步: 安装composer
curl -sS https://getcomposer.org/installer | php mv composer.phar /usr/local/bin/composer # PATH目录
第四步: 安装vendor
cd walle-web composer install --prefer-dist --no-dev --optimize-autoloader -vvvv
第五步: 初始化项目
cd walle-web ./yii walle/setup # 需要你的yes
第六步: 配置nginx
vi /etc/nginx/conf.d/walle.cong
//添加配置如下:
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;
}
}
#service nginx restart 重启服务后,应该就可以访问了。
默认的账户名密码是 admin/admin
Svn项目配置
目前项目用的是svn,所以只试了svn的配置方法。git的类似,只是代码仓库不同而已。
新建项目后参照以下内容填写:

项目建立完后,返回项目列表里有一个配置监测的功能。
一般常见的错误如下。
1.宿主机代码检出检测出错,请确认php进程用户{user}有代码存储仓库{path}读写权限。详细错误:{error}
该错误是php用户对指定的代码存储仓库没有写权限。可以通过以下方式解决。
ll {path}
chown {user} -R {path}
chmod 755 -R {path}
查看php进程用户的方法如下:
ps -ef |grep nginx
一般情况下nginx默认进程用户: nginx
1.目标机器部署出错,请确认php进程{local_user}用户ssh-key加入目标机器的{remote_user}用户ssh-key信任列表,且{remote_user}有目标机器发布版本库{path}写入权限。详细错误:{error}
该错误是因为PHP进程用户nginx没有办法登陆目标部署机器。
解决方法是将nginx用户的用RSA公钥复制到目标部署机器,添加信任机器列表。
具体如下。
su nginx
执行该命令的时候有可能会出现“This account is currently not available”错误。
解决方法是:
vipw
会发现nginx用户的配置如下:
nginx:x:497:497:Nginx web server:/var/lib/nginx:/sbin/nologin
改为如下就可以了。
nginx:x:497:497:Nginx web server:/var/lib/nginx:/bin/bash
注意:改修改使得服务器变的不安全,请在全部配置后改回原来状态。
生成RSA公钥
su nginx ssh-keygen -t rsa #回车后需要输入密钥。如果是公司内部测试环境,不输回车也可以。
RSA公钥生成在 /root/.ssh/id_rsa.pub 文件里。
添加到目标服务器信任列表。
ssh-copy-id -i ~/.ssh/id_rsa.pub remote_user@remote_server #回车输入密码
将目标服务器的 /root/.ssh/id_rsa.pub改名为/root/.ssh/authorized_keys
到这基本上就OK了,配置检测也应该可以通过。
部署使用就相当简单了,实际操作试一下就可以了。
除此以外还可以配置一些自定命令。例如设定不同环境切换配置文件等。高级用法还是可以扩展很多东西的。
pre_deploy任务
echo pre_deploy >> /tmp/cmd # 初始化一些东西,自由发挥
post_deploy任务mvn package -Dmaven.test.skip=true # 编译java
mvn clean # 打扫
mv WEB-INF/config.Properties.test WEB-INF/config.Properties # 切换环境相应的配置
rm -rf src # 甚至删除无用代码
pre_release任务./xx.sh stop # 暂停服务
post_release任务
另外有系统的原理图, 希望进一步了解的话,可以参考下。


总体来说还是不错的。而且在github开源。有需要的可以尝试一下。
除特别注明外,本站所有文章均为[果博]原创 » 转载请注明出处来自https://aiguor.com/notes/146.html
果博