Walle 2.0 发布系统

目录

  • walle 2.0

    • 1、walle原理

      • 1.1、walle原理图
      • 1.2、权限设计模型
    • 2、部署walle
      • 2.1、依赖检查安装
      • 2.2、walle部署
    • 3、Walle使用
      • 3.1、用户配置
      • 3.2、项目配置
      • 3.3、做一次上线流程
      • 3.4、版本的回滚

walle 2.0

walle官方文档

1、walle原理

1.1、walle原理图

walle有2个版本,walle 1.x版本使用PHP语言编写,walle 2.x版本使用python重写,两个版本不相兼容。walle 2.0支持各种web代码发布,如php、java、python、go等代码的发布、回滚,都可以通过web UI一键完成。首先看一张walle的原理图:

从上图可以看到左侧部分是代码托管的仓库,如:git、svn等常用的仓库类型。中间部分为宿主机,宿主机用于部署walle发布平台,是代码托管服务器和线上目标服务器的中间枢纽。所以这里的宿主机,也可以成为常用语中的代码发布服务器。

宿主机既然作为发布服务器,则需要和代码托管(github/gitlab/svn)以及远程的目标服务器建立ssh-key信任。

1.2、权限设计模型

walle 2.x版本的权限角色分为SUPER(超管)、OWNER(所有者)、MASTER(负责人)、DEVELOPER(开发者)、REPORTER(访客)。其操作的资源包括:空间、项目、上线单(任务)、环境、用户等。

  • Super:walle的管理人员,负责平台运维、开通空间并分配空间给owner
  • Owner:空间所有者,业务线负责,如大数据,新建项目并分配项目master,增加各方向leader作为空间的master
  • Master:

    具体子方向leader:空间master作为一个部门的具体子方向leader,管理该方向的服务器、项目等。为Owner分担具体事务。

    具体项目的leader:项目master作为一个具体项目的leader,辅助Master审核上线单等。

  • Developer:普通开发者,提交上线单、上线
  • Reporter:鸡肋角色,不知道用来干嘛

权限码表如下:

权限模型的解释

  • 用户的角色分为两种:space/role、project/role。空间的Master权限是空间级别,项目的Master权限是项目级别
  • 一个空间space下只有一个用户组,由Owner管理,空间下的项目用户权限继承于空间用户组。但也可以单独设定项目的用户角色。
  • 一个用户必须先分配一个空间,方可登录系统。
  • 用户所有操作均在登录空间下,或有多个空间可以切换

2、部署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.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源
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.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

3、Walle使用

3.1、用户配置

  • Super视角 - 空间owner分配

    Super是个平台管理员,主要负责walle运维,空间分配。更多的操作交由空间自行管理,分配完空间,添加所有用户,使命就完成了。

  • Owner视角 - 用户组配置

    Owner是空间下最高的权限,空间下的一切资源均可管理,包括把自己的空间出卖。

    空间的用户组在空间内全局有效,项目均继承此权限。

  • Owner视角 - 项目级用户权限管理

    默认所有项目的权限继承用户组,但你可能需要不同的leader负责不同的项目,这个时候你就需要在项目上做更精细化的用户权限配置。

废话不多,先来创建一个用户:用户管理 --> 新建

创建一个空间,并分配给用户:空间管理 --> 添加

3.2、项目配置

使用刚刚创建的用户重新登录,需要注意的是,新创建的用户角色,是属于Ownner。重新登录之后,对项目中心进行配置,分配进行环境管理、服务器管理、项目管理

  • 环境管理新增

  • 服务器新增

这里要注意的是,我用的是单台服务器进行部署,也就是walle平台和目标服务器都在一台机子上的,如果宿主机和目标机不在同一台机子上,是需要先进行配置ssh-key信任的。当然在同一台机子上也需要先配置ssh-key信任。

  • 项目新增

这里需要配置git的项目地址,所以是需要提前做好发布机器和git仓库的ssh-key信任。并且在目标集群机器中需要创建仓库存储每次发布的版本,用于回滚。命令如下:

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

图2还可以进行一系列的任务配置

3.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.4、版本的回滚

在进行多次发布之后,也有错漏,需要回滚。只需要进行点击回滚,即可回滚到任意版本。

原文地址:https://www.cnblogs.com/linuxk/p/10417915.html

时间: 2024-08-30 10:19:21

Walle 2.0 发布系统的相关文章

文章发布系统

文章发布系统 (第十一节) 本节主要解决在详情页根据文章ID查找文章内容的问题. 1.根据ID查询文章数据 在上一节中,我们已经成功在detail.jsp页面获取到了来自index.jsp的文章ID. 那么,最容易想到的办法,就是直接在detail.jsp页面通过Java代码,直接查询出对应的文章数据,然后放到页面作用域就OK了. 代码: <% String id = request.getParameter("id"); System.out.println(id); %>

牛腩新闻发布系统概要

开始了B/S项目学习,第一个学习内容就是开发新闻发布系统,跟着牛腩老师的视频学习有几天了,在这个过程 中也积累了点知识,在这里把新闻发布系统的一个轮廓叙述一下了. 系统说明 1.系统的整体功能 就是能够实现后台人员添加新闻,在前台可以浏览新闻并发表评论 2.功能图 3.数据库设计图 4.建表 --建立数据库 create database newssystem --建立类别表 create table category ( id int identity(1,1) primary key, [n

中科燕园GIS外包案例之三-----海洋预报信息掌上发布系统

该系统采用B/S架构与M/S构架相结合,客户端包括web客户端和android移动客户端.数据由access和文本文件存储管理.web客户端借助ArcGIS API for JavaScript和开源的Dojo 1.8.0 在Visual studio 2010平台上开发,android客户端借助ArcGIS API for android,ArcGIS Runtime SDK for Android在Eclipse平台上开发.         [Web客户端] 1.常用地图操作:放大.缩小.平

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(35)-文章发布系统②-构建项目

注:阅读本文,需要阅读本系列的之前文章 代码生成器下载地址(文章开头处) 接下来我们建立数据库的表和各层的代码 我们只需要两张表,文章列表(MIS_Article)和类别表(MIS_Article_Category) USE [AppDB] GO /****** Object: Table [dbo].[MIS_Article] Script Date: 05/15/2014 17:33:15 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER

牛腩新闻发布系统-验证码搞通了吗?详细注释-秒懂

牛腩新闻发布系统添加新闻和登录界面用到了验证码,生活中经常遇到形形色色的验证码,数字和字母的,12306图片形式的,百度贴吧文字形式的等等.当时见得时候感觉很神奇,现在刚好学到了,感觉很有意思,接触了BS之后,越来越多的网页神秘的内容,会慢慢的被了解,这种渴望的感觉特别棒.见到了自己喜欢的那就应该认真的分析,理解验证码的产生,这里说的是数字和字母类型的,从简单的入手. 什么是验证码,它是干什么的? 验证码:是一种区分用户是计算机还是人的公共全自动程序.可以防止:恶意破解密码.刷票.论坛灌水,有效

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(36)-文章发布系统③-kindeditor使用

我相信目前国内富文本编辑器中KindEditor 属于前列,详细的中文帮助文档,简单的加载方式,可以定制的轻量级.都是系统的首选 很多文章教程有kindeditor的使用,但本文比较特别可能带有,上传文件的缩略图和水印的源码!这块也是比较复杂和备受关注的功能 一.下载编辑器 KindEditor 4.1.10 (2013-11-23) [1143KB] 官方最新版 或者: http://www.kindsoft.net/down.php 二.添加到项目 解压 kindeditor-x.x.x.z

一步一步用jenkins,ansible,supervisor打造一个web构建发布系统

新blog地址:http://hengyunabc.github.io/deploy-system-build-with-jenkins-ansible-supervisor/ 一步一步用jenkins,ansible,supervisor打造一个web构建发布系统. 本来应该还有gitlab这一环节的,但是感觉加上,内容会增加很多.所以直接用github上的spring-mvc-showcase项目来做演示. https://github.com/spring-projects/spring-

点滴的积累---牛腩新闻发布系统总结

最近学习状态一直都不错,最近敲完牛腩新闻发布系统后又看了看<培养计划6.0>发现"牛腩新闻发布系统"的作用其实就是一个成语--抛砖引玉.在该新闻发布系统中基本上涉及到了B/S开发所需要具备的知识模块(HTML.Asp.net.XML.JavaScript.CSS.DIV.JQuery.AJAX).通过这个小的系统我的学习也将从C/S转移到B/S上,当然这个小的系统带给我的远远不止这些. 一.重新认识了软件开发的流程. 之前虽然学习过UML.软件工程等也算对系统开发有了初步的

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(37)-文章发布系统④-百万级数据和千万级数据简单测试

我想测试EF在一百万条数据下的显示时间!这分数据应该有很多同学想要,看看EF的性能! 服务器 现在来向SQL2008R2插入1000000条数据吧 declare @i int; set @i=0; while @i<1000000 begin INSERT INTO [AppDB].[dbo].[MIS_Article] ([Id] ,[ChannelId] ,[CategoryId] ,[Title] ,[ImgUrl] ,[BodyContent] ,[Sort] ,[Click] ,[C