目錄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
這裏須要注意的是,若是不須要開發者參與,能夠在項目配置中,取消審覈,運維人員自行選擇最新版本進行發佈。有審覈的機制,是爲了更好地規範管理項目版本發佈的流程。
在進行屢次發佈以後,也有錯漏,須要回滾。只須要進行點擊回滾,便可回滾到任意版本。