Walle 2.0(瓦力)的安裝


一、簡介

  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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM