walle 瓦力--部署系统(从原理到安装)

瓦力介绍

Walle 一个web部署系统工具,配置简单、功能完善、界面流畅、开箱即用!支持git、svn版本管理,支持各类web代码发布,PHP,Python,JAVA等代码的发布、回滚,能够经过web来一键完成。php

功能列表

用户分身份注册、登陆
开发者发起上线任务申请、部署
管理者审核上线任务
支持多项目部署
支持多项目多任务并行
快速回滚
项目的用户权限管理
部署前准备任务pre-deploy(前置检查)
代码检出后处理任务post-deploy(如vendor)
同步后更新软链前置任务pre-release
发布完毕后收尾任务post-release(如重启)
执行sql构建(不要担忧忘记测试环境sql同步)
线上文件指纹确认
支持git、svn版本管理

原理分析

clipboard.png
上线流程图mysql

clipboard.png

依赖

Bash(git、ssh)jquery

意味着不支持win、mac的zsh

LNMP/LAMP(php5.4+)linux

php须要开启pdo_mysql,exec函数执行

Composernginx

若是国内环境安装极慢,能够直接下载vendor解压到项目根目录

ansible
安装git

一、宿主机安装 ansiblegithub

yum install ansible # RHEL/CentOS/Fedoraweb

apt-get install ansible # Debian/Ubuntusql

emerge -avt ansible # Gentoo/Funtoo数据库

pip install ansible # will also install paramiko PyYAML jinja2

二、宿主机无需其余配置,兼容 ~/.ssh/config 名称、证书配置

三、目标机无需额外配置
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/yu...
CentOs 7.X
rpm -Uvh https://mirror.webtatic.com/y...

  • 安装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

安装

git clone git@github.com:meolu/walle-web.git
cd walle-web
vi config/web.php # 设置mysql链接
composer install # 若是缺乏bower-asset的话, 先安装:composer global require "fxp/composer-asset-plugin:*"
./yii walle/setup # 初始化项目

配置nginx/apache的webroot指向walle-web/web

最最最详细安装指南

如下安装,均在宿主机(一台配置了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 # 新建目录
git clone git@github.com:meolu/walle-web.git . # 代码检出

2.设置mysql链接

vi config/local.php +14
'db' => [

'dsn'       => 'mysql:host=127.0.0.1;dbname=walle', # 新建数据库walle
'username'  => 'username',                          # 链接的用户名
'password'  => 'password',                          # 链接的密码

],

3.安装composer,若是已安装跳过

curl -sS https://getcomposer.org/insta... | php
mv composer.phar /usr/local/bin/composer # PATH目录

4.安装vendor

cd walle-web
composer install --prefer-dist --no-dev --optimize-autoloader -vvvv

安装速度慢或失败,可直接下载vendor解压到项目根目录
5.初始化项目

cd walle-web
./yii walle/setup # 须要你的yes

6.配置nginx

凡是在第7步刷新页面看到50x均是前5步安装不完整,自行检查

凡是在第7步刷新页面看到404均是nginx配置不当,自行检查

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;
}

}

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-keygen -t rsa # 若是你都没有生成过rsa_key的话
cat ~/.ssh/id_rsa.pub # 复制
打开github/gitlab添加到你的ssh-keys或者deploy-keys里

如何添加用户ssh-key到目标机群部署用户ssh-key信任

宿主机操做

ps aux|grep php # 假如www_php为你的php进程用户
su - www_php # 切换用户
ssh-keygen -t rsa # 若是你都没有生成过rsa_key的话,若是有则跳过
ssh-copy-id -i ~/.ssh/id_rsa.pub www_remote@remote_host # 加入目标机群信任,须要输入www_remote密码

初始化walle时失败:could not find driver

缺乏pdo扩展,解决办法:添加pdo扩展

ubuntu
apt-get install php5 php5-fpm php5-mysql

或者在源码包里编译
cd php-src/ext/pdo_mysql
phpize
./configure --with-php-config=/php/install/dir/bin/php-config
make && make install
vi php.ini # 添加pdo_mysql.so
restart php-fpm

7.nginx简单配置

server {

listen       80;
server_name  walle.company.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;
}

}

切换用户(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 yiiwebmb_parse_str()

缺乏mbstring扩展,安装mbstring扩展重启php便可。mbstring扩展:http://php.net/manual/zh/mbst...