开源自动化部署项目瓦力(Walle)试用-Linux篇

最近项目接近尾声,已经开始进入测试阶段。由于开发环境和测试环境完全是分离的,每次的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的类似,只是代码仓库不同而已。

新建项目后参照以下内容填写:
welle_task

项目建立完后,返回项目列表里有一个配置监测的功能。

一般常见的错误如下。

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任务

另外有系统的原理图, 希望进一步了解的话,可以参考下。

walle-flow-relation

walle-flow-deploy

总体来说还是不错的。而且在github开源。有需要的可以尝试一下。

除特别注明外,本站所有文章均为[果博]原创 » 转载请注明出处来自https://aiguor.com/notes/146.html

评论 抢沙发

表情 格式
  • 昵称 (必填)
  • 邮箱 (必填)

关注移动互联网,与科技共成长

联系我们