千家信息网

Walle 瓦力 安装部署

发表于:2025-12-01 作者:千家信息网编辑
千家信息网最后更新 2025年12月01日,Walle 瓦力 安装部署http://www.walle-web.io/docs/ 瓦力官网Walle 一个web部署系统工具,配置简单、功能完善、界面流畅、开箱即用!支持git、svn版本管理,支
千家信息网最后更新 2025年12月01日Walle 瓦力 安装部署

Walle 瓦力 安装部署

http://www.walle-web.io/docs/ 瓦力官网


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

apt-get install ansible # Debian/Ubuntu

emerge -avt ansible # Gentoo/Funtoo

pip install ansible # will also install paramiko PyYAML jinja2

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

3、目标机无需额外配置

walle

  1. 项目配置 中 开启Ansible

  2. (可选) config/params.php 配置 ansible_hosts 文件存放路径

  3. 按正常流程发布、上线代码,传输文件、远程执行命令均会通过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
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

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  # 新建目录
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/installer | 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 yii\web\mb_parse_str()

缺少mbstring扩展,安装mbstring扩展重启php即可。mbstring扩展:http://php.net/manual/zh/mbstring.installation.php

Git项目配置

git 项目配置指南

git部署是最推荐的方式,它无论对于何种语言都是合适的。

一、基本要求:

  1. 宿主机php进程用户www_php(假如,可通过配置的检测查看或ps aux|grep php)的ssh-key要加入git/gitlab的deploy-keys。当然也可以http地址带用户名密码(不推荐):https://username:password@github.com/meolu/walle-web.git

  2. 宿主机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

目标机器部署出错,请确认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版本管理,请慎用。

一、基本要求:

  1. svn目录推荐以下规范,详细可以注册riouxsvn,作为svn测试地址。当然三无(无trunk、无branches、无tags)也是支持:)

    • branches

    • tags

    • trunk

  2. 宿主机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
mvn clean # 打扫
mv WEB-INF/config.Properties.test WEB-INF/config.Properties # 切换环境相应的配置
rm -rf src # 甚至删除无用代码

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}

提交上线单

上线单包括两种方式:gitsvn

一、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.phplog.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

致此瓦力已经部署成功!如有任何问题可联系博主或者登录官网查看详情。

用户 配置 权限 目标 项目 机器 代码 管理 问题 宿主 宿主机 管理员 进程 版本 任务 检测 机群 目录 错误 办法 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 大学生对网络安全意识的调研 可以单人生存的神奇宝贝服务器 软件开发公司给的工资高吗 中标麒麟服务器根目录空间扩容 新型城镇化杂志哪个数据库收录 浙江服务器标准机柜 本地如何管理svn服务器 安卓与服务器 网络技术基础课程考试 云服务器租用小牛云计算 新乡app软件开发一般要多少钱 常见的数据库高可用技术 网络安全考试一般多少分及格 网络技术开发伦理 网络安全个人思想剖析报告 电影订票软件开发 hadoop读取关系型数据库 自动生成服务器网络图 数据操作数据库 你对计算机网络技术了解多少 软件开发框架python 游戏服务器会被封不 上海单机版外贸软件开发公司 方舟服务器多长时间可以做出来 全栈网络安全专家百度云 金蝶kis服务器搭建 胶州游戏软件开发企业 泡芙服务器 计算机网络技术有视频剪辑吗 醴陵市公安局网络安全大队
0