一、簡介
walle 讓用戶代碼發布終於可以不只能選擇 jenkins!支持各種web代碼發布,php、java、python、go等代碼的發布、回滾可以通過web來一鍵完成。walle 一個可自由配置項目,更人性化,高顏值,支持git、多用戶、多語言、多項目、多環境同時部署的開源上線部署系統。開源官網:http://www.walle-web.io/。有興趣的同學可以到官網上查閱資料。
二、原理分析
宿主機、目標機群、操作用戶
宿主機、目標機群、操作用戶關系如下圖所示,宿主機(walle所在的機器),是一個中間機器,是代碼托管與遠程目標機群的紐帶。所以宿主機需要與代碼托管(github/gitlab)和遠程目標機群都建立ssh-key信任。
權限模型
權限的角色分為SUPER 超管、OWNER 所有者、MASTER 負責人、DEVELOPER 開發者、REPORTER 訪客,操作的資源包括空間、項目、上線單(任務)、環境、用戶等
更詳細的權限模型說明:權限模型
用戶關系與信任關系
- A 能密碼登錄所有服務器(把A的key加入其它機器信任列表)
- A 能拉git代碼(把A的key加入git信任列表)
- 免密碼登錄三個條件
- ~ 755
- ~/.ssh 700
- ~/.ssh/authorized_keys 644 或 600
- 時間寶貴。不要部署在mac os,請直接部署到Centos 6/7試用,減少不必要的麻煩
更詳細的信任關系配置手冊說明:權限模型
上線流程圖
權限模型
權限模型角色
SUPER 超管
walle的管理員:負責平台運維、開通空間並分配空間owner
OWNER 所有者
空間所有者:業務線負責,如大數據,新建項目並分配項目master,增加各方向leader作為空間master
MASTER 負責人
具體子方向leader:空間master作為一個部門的具體子方向leader,管理該方向的服務器、項目等,為Owner分擔具體事務
具體項目leader:項目master作為一個具體項目leader,輔助Master審核上線單等
DEVELOPER 開發者
普通開發者:提交上線單、上線
REPORTER 訪客
訪客:我也不知道為什么這么低級別的角色有什么用,可能是我一直都是級別很高的原因吧
權限碼表
action | reporter | developer | master | owner | super |
---|---|---|---|---|---|
Dashboard-xxx-查看 | ✓ | ✓ | ✓ | ✓ | ✓ |
部署中心-上線單-查看 | ✓ | ✓ | ✓ | ✓ | ✓ |
配置中心-項目管理-查看 | ✓ | ✓ | ✓ | ✓ | |
部署中心-上線單-新建、更新、刪除 | ✓ | ✓ | ✓ | ✓ | |
用戶中心-用戶管理-查看 | ✓ | ✓ | ✓ | ||
用戶中心-用戶組管理-查看 | ✓ | ✓ | ✓ | ||
部署中心-上線單-審核 | ✓ | ✓ | ✓ | ||
配置中心-服務器管理-查看 | ✓ | ✓ | ✓ | ||
配置中心-項目管理-更新、刪除 | ✓ | ✓ | ✓ | ||
配置中心-服務器管理-新建、更新、刪除 | ✓ | ✓ | ✓ | ||
配置中心-項目管理-新建 | ✓ | ✓ | ✓ | ||
用戶中心-用戶管理-更新、刪除 | ✓ | ✓ | |||
用戶中心-用戶組管理-更新、刪除 | ✓ | ✓ | |||
用戶中心-負責空間管理-查看、更新 | ✓ | ✓ | |||
空間管理-新建、查看、更新、刪除 | ✓ |
權限模型的解釋
- 用戶的角色分為兩種:space/role、project/role。空間的Master權限是空間級別,項目的Master權限是項目級別
- 一個空間space下只有一個用戶組,由Owner管理,空間下的項目用戶權限繼承於空間用戶組。但也可以單獨設定項目的用戶角色。
- 一個用戶必須先分配一個空間,方可登錄系統。
- 用戶所有操作均在登錄空間下,或有多個空間可以切換
三、安裝示例
主機環境:centos7.6
安裝前的配置需求:
- Linux + Bash(git、ssh)
- 意味着不支持win,也不要裝在mac,兼容性問題
- Python 3.5+ 和 Python 2.7+
- MySQL 5.6.5以上,否則會在安裝時報錯
1、安裝前置的基礎配置
- 更換阿里源
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
- 安裝EPEL源 RHEL/CentOS 7
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
- 安裝的MySQL
yum install -y mysql-devel gcc gcc-c++ python-devel MySQL-python
2、Colen Walle包
git clone https://github.com/meolu/walle-web.git
3、安裝Nginx代為HTTP代理
yum install nginx
配置nginx.conf文件/etc/nginx/nginx.conf
別忘了要重啟nginx,注意標出可能需要改的地方
egrep -v "^$|#" /etc/nginx/nginx.conf.default >/etc/nginx/nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include conf.d/*.conf;
}
配置nginx虛擬文件
vim /etc/nginx/conf.d/walle.conf upstream webservers { server 0.0.0.0:5000 weight=1; #這個是walle項目的啟動端口 } server { listen 80; server_name server.walle.com; # walle域名設置,這個域名設置比較重要,需要在walle的配置一致 access_log /var/log/nginx/walle.log combined; index index.html index.htm index.php; # 日志目錄 location / { try_files $uri $uri/ /index.html; add_header access-control-allow-origin *; root /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"; } }
測試nginx配置文件是否正確
nginx -t
然后得重啟Nginx
systemctl restart nginx
4、Hosts
vim /etc/hosts # 新增一行 127.0.0.1 server.walle.com # 與nginx配置一致
5、INSTALL Walle
安裝Python 2.7 + pip
cd walle-web
sh admin.sh init
出現錯誤 :
解決方法:
virtualenv --system-site-packages venv
然后接着運行admin.sh init
出現錯誤:
解決方法:
修改./requiremnets/prod.txt中的GitPython==2.1.11改為2.1.15
vim ./requirements/prod.txt # Auth Flask-Login==0.4.0 Flask-Bcrypt==0.7.1 anyjson==0.3.3 celery==3.1.18 pycrypto==2.6.1 pytz==2015.7 requests==2.20.0 GitPython==2.1.15 pymysql ==0.9.3
然后接着運行admin.sh init。
出現下圖提示,說明Walle安裝成功
6、配置walle的設置文件
注意: 帶了 @TODO 的地方可能需要你的調整
vi 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 SETTINGS = { "MYSQL_USER": "root", "MYSQL_PASSWORD": "walle", "MYSQL_DATABASE": "walle", "MYSQL_ROOT_PASSWORD": "walle", "MYSQL_HOST": "127.0.0.1", "MYSQL_PORT": 3306, } class ProdConfig(Config): """Production configuration.""" ENV = 'prod' DEBUG = False SQLALCHEMY_ECHO = False # 服務啟動 @TODO # HOST 修改為與 nginx server_name 一致. # 后續在web hooks與通知中用到此域名. HOST = 'server.walle.com' PORT = 5000 # https True, http False SSL = False # 數據庫設置 @TODO # SQLALCHEMY_DATABASE_URI = 'mysql://user:password@localhost:3306/walle?charset=utf8' SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format( SETTINGS["MYSQL_USER"], SETTINGS["MYSQL_PASSWORD"], SETTINGS["MYSQL_HOST"], SETTINGS["MYSQL_PORT"], SETTINGS["MYSQL_DATABASE"]) # 阿里雲RDS強制釋放空閑連接導致經常報錯 mysql server has gone way # 適當修改該參數即可 單位為秒 # N秒不用的連接自動釋放 # SQLALCHEMY_POOL_RECYCLE = 30 # 本地代碼檢出路徑(用戶查詢分支, 編譯, 打包) #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' # 登錄cookie 防止退出瀏覽器重新登錄 COOKIE_ENABLE = False
7、安裝和配置數據庫
安裝數據庫,版本選擇mysql5.7的。具體安裝方法網上有很多,這里就不在述說了。
創建一個數據庫walle
mysql> create database walle;
創建相對應的用戶
mysql> grant all on walle.* to root@'127.0.0.1' identified by 'walle';
8、Data Migration
執行如下命令:
sh admin.sh migration
9、Satrt
sh admin.sh start
10、打開瀏覽器http//:IP或http://server.walle.com
輸入帳號和密碼
超管: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