Walle 2.0 發佈系統

walle 2.0

walle官方文檔html

一、walle原理

1.一、walle原理圖

walle有2個版本,walle 1.x版本使用PHP語言編寫,walle 2.x版本使用python重寫,兩個版本不相兼容。walle 2.0支持各類web代碼發佈,如php、java、python、go等代碼的發佈、回滾,均可以經過web UI一鍵完成。首先看一張walle的原理圖:前端

img

從上圖能夠看到左側部分是代碼託管的倉庫,如:git、svn等經常使用的倉庫類型。中間部分爲宿主機,宿主機用於部署walle發佈平臺,是代碼託管服務器和線上目標服務器的中間樞紐。因此這裏的宿主機,也能夠成爲經常使用語中的代碼發佈服務器。java

宿主機既然做爲發佈服務器,則須要和代碼託管(github/gitlab/svn)以及遠程的目標服務器創建ssh-key信任。python

1.二、權限設計模型

walle 2.x版本的權限角色分爲SUPER(超管)、OWNER(全部者)、MASTER(負責人)、DEVELOPER(開發者)、REPORTER(訪客)。其操做的資源包括:空間、項目、上線單(任務)、環境、用戶等。mysql

permission

  • 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管理,空間下的項目用戶權限繼承於空間用戶組。但也能夠單獨設定項目的用戶角色。
  • 一個用戶必須先分配一個空間,方可登陸系統。
  • 用戶全部操做均在登陸空間下,或有多個空間能夠切換

二、部署walle

須要注意的環境需求:

  • 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免密登陸配置

2.一、依賴檢查安裝

  • 更換阿里源
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源
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  • 安裝mariaDB
yum install -y mariadb-devel gcc gcc-c++ python-devel

2.二、walle部署

從安全性考慮,建議部署在內網!!!或者作其餘的訪問控制類型,避免出現安全性隱患問題。

  • 源碼下載
[root@localhost ~]# mkdir -pv /data/web/ && cd /data/web
[root@localhost web]# git clone https://github.com/meolu/walle-web.git  #克隆walle 2.x源碼
  • 配置Nginx
[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
  • 修改代碼中的配置,帶@TODO就是可能須要修改的地方
[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
  • 訪問:192.168.56.11:82。初始登陸帳號以下 :
超管: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

三、Walle使用

3.一、用戶配置

  • Super視角 - 空間owner分配

    Super是個平臺管理員,主要負責walle運維,空間分配。更多的操做交由空間自行管理,分配完空間,添加全部用戶,使命就完成了。

  • Owner視角 - 用戶組配置

    Owner是空間下最高的權限,空間下的一切資源都可管理,包括把本身的空間出賣。

    空間的用戶組在空間內全局有效,項目均繼承此權限。

  • Owner視角 - 項目級用戶權限管理

    默認全部項目的權限繼承用戶組,但你可能須要不一樣的leader負責不一樣的項目,這個時候你就須要在項目上作更精細化的用戶權限配置。

廢話很少,先來建立一個用戶:用戶管理 --> 新建

建立一個空間,並分配給用戶:空間管理 --> 添加

3.二、項目配置

使用剛剛建立的用戶從新登陸,須要注意的是,新建立的用戶角色,是屬於Ownner。從新登陸以後,對項目中心進行配置,分配進行環境管理、服務器管理、項目管理

  • 環境管理新增

  • 服務器新增

這裏要注意的是,我用的是單臺服務器進行部署,也就是walle平臺和目標服務器都在一臺機子上的,若是宿主機和目標機不在同一臺機子上,是須要先進行配置ssh-key信任的。固然在同一臺機子上也須要先配置ssh-key信任。

  • 項目新增

這裏須要配置git的項目地址,因此是須要提早作好發佈機器和git倉庫的ssh-key信任。而且在目標集羣機器中須要建立倉庫存儲每次發佈的版本,用於回滾。命令以下:

[root@localhost ~]# mkdir /opt/shop/version -p

圖2還能夠進行一系列的任務配置

3.三、作一次上線流程

  • 新增開發者帳戶

按個人原意是想在Ownner角色下進行新增開發者帳戶,由於dev空間已經屬於我這個帳號,我只須要在個人帳號下添加一個子帳號進行開發項目便可。估計是系統權限管理不太完善,事與願違,在個人帳號下進行新增用戶,會提示如下錯誤:

回顧最初的說法,是一個用戶必須先分配一個空間,方可登陸系統。那麼只能在Super帳號下進行建立用戶,再進行添加項目的成員。在添加用戶的時候也會沒事就跳出提示網絡錯誤的bug,可是卻已經添加成功了,估計是代碼邏輯判斷的問題。將新建用戶添加到項目爲開發者:

  • 提交上線單

登陸張宇用戶,進行提交上線單,能夠看到做爲開發者,只有查看項目和提交上線單的權限:

  • Owner帳戶審覈

提交完成後,狀態會顯示:新建提交,然後須要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

這裏須要注意的是,若是不須要開發者參與,能夠在項目配置中,取消審覈,運維人員自行選擇最新版本進行發佈。有審覈的機制,是爲了更好地規範管理項目版本發佈的流程。

3.四、版本的回滾

在進行屢次發佈以後,也有錯漏,須要回滾。只須要進行點擊回滾,便可回滾到任意版本。

相關文章
相關標籤/搜索