目录php
walle官方文档html
walle有2个版本,walle 1.x版本使用PHP语言编写,walle 2.x版本使用python重写,两个版本不相兼容。walle 2.0支持各类web代码发布,如php、java、python、go等代码的发布、回滚,均可以经过web UI一键完成。首先看一张walle的原理图:前端
从上图能够看到左侧部分是代码托管的仓库,如:git、svn等经常使用的仓库类型。中间部分为宿主机,宿主机用于部署walle发布平台,是代码托管服务器和线上目标服务器的中间枢纽。因此这里的宿主机,也能够成为经常使用语中的代码发布服务器。java
宿主机既然做为发布服务器,则须要和代码托管(github/gitlab/svn)以及远程的目标服务器创建ssh-key信任。python
walle 2.x版本的权限角色分为SUPER(超管)、OWNER(全部者)、MASTER(负责人)、DEVELOPER(开发者)、REPORTER(访客)。其操做的资源包括:空间、项目、上线单(任务)、环境、用户等。mysql
Super:walle的管理人员,负责平台运维、开通空间并分配空间给ownernginx
Owner:空间全部者,业务线负责,如大数据,新建项目并分配项目master,增长各方向leader做为空间的masterc++
Master:git
具体子方向leader:空间master做为一个部门的具体子方向leader,管理该方向的服务器、项目等。为Owner分担具体事务。github
具体项目的leader:项目master做为一个具体项目的leader,辅助Master审核上线单等。
Developer:普通开发者,提交上线单、上线
Reporter:鸡肋角色,不知道用来干吗
权限码表以下:
权限模型的解释
- 用户的角色分为两种:space/role、project/role。空间的Master权限是空间级别,项目的Master权限是项目级别
- 一个空间space下只有一个用户组,由Owner管理,空间下的项目用户权限继承于空间用户组。但也能够单独设定项目的用户角色。
- 一个用户必须先分配一个空间,方可登陆系统。
- 用户全部操做均在登陆空间下,或有多个空间能够切换
须要注意的环境需求:
- Linux + Bash(git、ssh)
- 意味着不支持win,也不要装在mac,兼容性问题
- Python 3.5+ 和 Python 2.7+
- MySQL 5.6.5以上,不然会在安装时报错
- 在MySQL 5.6.5版本以前,Automatic Initialization and Updating只适用于TIMESTAMP,并且一张表中,最多容许一个TIMESTAMP字段采用该特性。从MySQL 5.6.5开始,Automatic Initialization and Updating同时适用于TIMESTAMP和DATETIME,且不限制数量。
- 将全部目标主机 加入 宿主机(walle安装所在机器)ssh免密登陆配置
cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo yum clean all yum makecache
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y mariadb-devel gcc gcc-c++ python-devel
从安全性考虑,建议部署在内网!!!或者作其余的访问控制类型,避免出现安全性隐患问题。
[root@localhost ~]# mkdir -pv /data/web/ && cd /data/web [root@localhost web]# git clone https://github.com/meolu/walle-web.git #克隆walle 2.x源码
[root@localhost web]# cd /usr/local/nginx/conf/vhost/ [root@localhost vhost]# cat walle.conf upstream webservers { server 192.168.56.11:5000 weight=1; #域名设置,须要配置python的访问端口 } server { listen 82; server_name 192.168.56.11; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.html; add_header access-control-allow-origin *; root /data/web/walle-web/fe; # 前端代码已集成到walle-web,即walle-web/fe的绝对路径 } location ^~ /api/ { add_header access-control-allow-origin *; proxy_pass http://webservers; proxy_set_header X-Forwarded-Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Origin $host:$server_port; proxy_set_header Referer $host:$server_port; } location ^~ /socket.io/ { add_header access-control-allow-origin *; proxy_pass http://webservers; proxy_set_header X-Forwarded-Host $host:$server_port; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Origin $host:$server_port; proxy_set_header Referer $host:$server_port; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; # WebScoket Support proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
[root@localhost vhost]# cd /data/web/walle-web/ [root@localhost walle-web]# sh admin.sh init # 注意:安装mysqlclient失败,须要先安装libmysqlclient-dev(ubuntu) # 注意:安装失败请指定python路径. mac 可能会有用anaconda的python,找到本身系统的python 2.7追加参数指定 -p /usr/bin/python2.7 便可 # vi admin.sh +20 # virtualenv --no-site-packages -p /usr/local/bin/python2.7 venv
[root@localhost walle-web]# vim walle/config/settings_prod.py # -*- coding: utf-8 -*- """ walle-web Application configuration. 注意: 带了 @TODO 的地方可能须要你的调整 :copyright: © 2015-2019 walle-web.io :created time: 2018-11-24 07:05:35 :author: wushuiyong@walle-web.io """ import os from walle.config.settings import Config class ProdConfig(Config): """Production configuration.""" ENV = 'prod' DEBUG = False SQLALCHEMY_ECHO = False # 服务启动 @TODO # HOST 修改成与 nginx server_name 一致. # 后续在web hooks与通知中用到此域名. HOST = '192.168.56.11' PORT = 5000 # https True, http False SSL = False # 数据库设置 @TODO SQLALCHEMY_DATABASE_URI = 'mysql://walle:walle@localhost:3306/walle?charset=utf8' # 本地代码检出路径(用户查询分支, 编译, 打包) #TODO CODE_BASE = '/tmp/walle/codebase/' # 日志存储路径 @TODO # 默认为walle-web项目下logs, 可自定义路径, 需以 / 结尾 # LOG_PATH = '/var/logs/walle/' LOG_PATH = os.path.join(Config.PROJECT_ROOT, 'logs') LOG_PATH_ERROR = os.path.join(LOG_PATH, 'error.log') LOG_PATH_INFO = os.path.join(LOG_PATH, 'info.log') LOG_FILE_MAX_BYTES = 100 * 1024 * 1024 # 邮箱配置 @TODO MAIL_SERVER = 'smtp.exmail.qq.com' MAIL_PORT = 465 MAIL_USE_SSL = True MAIL_USE_TLS = False MAIL_DEFAULT_SENDER = 'service@walle-web.io' MAIL_USERNAME = 'service@walle-web.io' MAIL_PASSWORD = 'Ki9y&3U82'
MySQL 5.6.5以上,不然会在安装时报错。在MySQL 5.6.5版本以前,Automatic Initialization and Updating只适用于TIMESTAMP,并且一张表中,最多容许一个TIMESTAMP字段采用该特性。从MySQL 5.6.5开始,Automatic Initialization and Updating同时适用于TIMESTAMP和DATETIME,且不限制数量。
[root@localhost walle-web]# mysql -uroot -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 1007 Server version: 10.1.20-MariaDB MariaDB Server Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> create database walle default charset utf8; MariaDB [(none)]> grant all privileges walle.* to walle@"localhost" identified by "123456"; MariaDB [(none)]> flush privileges; MariaDB [(none)]> quit; [root@localhost walle-web]# sh admin.sh migration #数据迁移 [root@localhost walle-web]# sh admin.sh start #启动 sh admin.sh restart # 重启 sh admin.sh upgrade # 升级walle,升级完须要重启walle服务。升级前最好 git stash 暂存本地修改,升级后git stash pop弹出暂存,而后重启服务。 sh admin.sh migration # Migration [root@localhost walle-web]# nginx -t nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful [root@localhost walle-web]# systemctl reload nginx
超管:super@walle-web.io \ Walle123 全部者:owner@walle-web.io \ Walle123 负责人:master@walle-web.io \ Walle123 开发者:developer@walle-web.io \ Walle123 访客:reporter@walle-web.io \ Walle123
PS:walle运行过程,以及部署过程出错了,具体日志能够查看logs/runtime.log
Super视角 - 空间owner分配
Super是个平台管理员,主要负责walle运维,空间分配。更多的操做交由空间自行管理,分配完空间,添加全部用户,使命就完成了。
Owner视角 - 用户组配置
Owner是空间下最高的权限,空间下的一切资源都可管理,包括把本身的空间出卖。
空间的用户组在空间内全局有效,项目均继承此权限。
Owner视角 - 项目级用户权限管理
默认全部项目的权限继承用户组,但你可能须要不一样的leader负责不一样的项目,这个时候你就须要在项目上作更精细化的用户权限配置。
废话很少,先来建立一个用户:用户管理 --> 新建
建立一个空间,并分配给用户:空间管理 --> 添加
使用刚刚建立的用户从新登陆,须要注意的是,新建立的用户角色,是属于Ownner。从新登陆以后,对项目中心进行配置,分配进行环境管理、服务器管理、项目管理
这里要注意的是,我用的是单台服务器进行部署,也就是walle平台和目标服务器都在一台机子上的,若是宿主机和目标机不在同一台机子上,是须要先进行配置ssh-key信任的。固然在同一台机子上也须要先配置ssh-key信任。
这里须要配置git的项目地址,因此是须要提早作好发布机器和git仓库的ssh-key信任。而且在目标集群机器中须要建立仓库存储每次发布的版本,用于回滚。命令以下:
[root@localhost ~]# mkdir /opt/shop/version -p
图2还能够进行一系列的任务配置
按个人原意是想在Ownner角色下进行新增开发者帐户,由于dev空间已经属于我这个帐号,我只须要在个人帐号下添加一个子帐号进行开发项目便可。估计是系统权限管理不太完善,事与愿违,在个人帐号下进行新增用户,会提示如下错误:
回顾最初的说法,是一个用户必须先分配一个空间,方可登陆系统。那么只能在Super帐号下进行建立用户,再进行添加项目的成员。在添加用户的时候也会没事就跳出提示网络错误的bug,可是却已经添加成功了,估计是代码逻辑判断的问题。将新建用户添加到项目为开发者:
登陆张宇用户,进行提交上线单,能够看到做为开发者,只有查看项目和提交上线单的权限:
提交完成后,状态会显示:新建提交,然后须要Owner帐户进行审核。登陆帐号查看,如图:
审核经过之后,能够直接点击上线,也能够经过开发者的帐号点击上线,以下图:
这里须要注意的是,目标主机的nginx配置之类要事先配置好。然后在目标主机上查看变化:
[root@localhost ~]# ll /data/web/ lrwxrwxrwx 1 root root 38 Feb 22 11:50 shop -> /opt/shop/version/2_10_20190222_115008 #使用软链接的方式连接到版本 drwxr-xr-x 13 root root 4096 Feb 16 09:42 walle-web root@localhost ~]# ll /opt/shop/version/ #查看代码版本仓库 total 0 drwxr-xr-x 3 root root 61 Feb 22 11:54 2_10_20190222_115008
这里须要注意的是,若是不须要开发者参与,能够在项目配置中,取消审核,运维人员自行选择最新版本进行发布。有审核的机制,是为了更好地规范管理项目版本发布的流程。
在进行屡次发布以后,也有错漏,须要回滚。只须要进行点击回滚,便可回滚到任意版本。