项目:SwarmOps

说明:Docker Swarm Mode (v1.12.0+) 功能封装的 API 和 UI (Flask+Bootstrap)

GitHub:https://github.com/staugur/SwarmOps

依赖:Passport 认证系统 (生产必须),Redis (非必须)

注意:关键信息!

当前文档版本:Release 0.0.1, 0.0.2

声明:

当前项目暂无更新计划,针对的 swarm 版本大概是 1.12.x,最新版本无跟进,无法保证正确性!

一:部署

###SwarmOps 部署需要先部署依赖程序

### 如果你是正式环境使用,请安装 Passport 认证系统和 Redis (高可用);

### 如果你是快速体验,可以不安装 Passport 和 Redis (设置 g.signin=True,使用 local 存储);

### 下面是具体过程,如果有疑问可以在评论区提出,或者发邮件,staugur@saintic.com

1. 认证系统部署

  • 1.1 SwarmOps 为了安全性首先要求登录状态,登录系统采用 passport (简单 SSO) 认证,绑定全局变量 g.signin (Bool),判断是否已经登录,所以此处也可以采用你自己的登录认证系统。

    部署 passport,其 GitHub 地址是 https://github.com/staugur/passport,亦可参考本站文档:https://blog.saintic.com/blog/134.html

注意:swarmop 于 2018-11-07 已经更新代码,适配最新版 passport,所以使用此最新版需要部署 passport!

以下内容是 release 中代码,不适用最新版!

演示地址: http://swarmops.demo.saintic.com

1.2 自定义认证

    认证关键在与before\_request时的g.auth\(若不了解请参考flask文档\),此值即\`isLogged\_in\`函数返回值,所以增加自定义认证需要以下步骤:

    1.2.1 config.py

        新增GLOBAL段Authentication值,例如auth\_example

    1.2.2 utils/public.py

        在大概45行isLogged\_in函数中,修改代码if判断,新增一个AuthType=="auth\_example"段,执行根据cookie信息做认证。

2. redis 部署

########

存储多个 swarm 的 name、ip、token 等信息,可以用 redis、local,如果你将数据放到 redis,便可以多节点,当然步骤也麻烦一点,需要安装 redis。如果单点,就用 local,本地文件存储即可,省去下面 redis 部署过程。

########

SwarmOps 多点分布部署,可以使用 redis、etcd、consul 等类型的 kv 存储服务,目前仅支持 redis。

安装 redis 非常简单,不需要集群,单实例,默认写入 0 库。

第一种比较简单的方法,yum -y install redis (如果没有 redis 包,可以先执行 yum -y install epel-release),安装完成之后用 service 或 systemctl 启动,这样默认监听 127.0.0.1:6379,无密码。

第二种方法到 <redis.cn> 中文版网站文档中查询资料采用源码部署,此处,我早前有个一键部署 NoSQL 的脚本,GitHub 地址是 https://github.com/staugur/CoreWeb

3. SwarmOps 部署

3.1 开发版本体验 (不推荐)

[root@e50e93de4b75 ~]# yum install -y gcc gcc-c++ python-devel libffi-devel openssl-devel python-pip git
[root@e50e93de4b75 ~]# git clone https://github.com/staugur/swarmops
[root@e50e93de4b75 ~]# cd swarmops
[root@e50e93de4b75 swarmops]# pip install -r requirements.txt
### 使用redis
[root@e50e93de4b75 swarmops]# export swarmops_swarmstoragemode=redis
[root@e50e93de4b75 swarmops]# export swarmops_StorageConnection=redis://127.0.0.1:6379 (格式是"redis://redis_host:redis_port:redis_password", 其中密码可以省略, 则默认None)
### 使用local
[root@e50e93de4b75 swarmops]# export swarmops_swarmstoragemode=local
[root@e50e93de4b75 swarmops]# ./Control.sh     
SwarmOps start over.
[root@e50e93de4b75 swarmops]# ./Control.sh status
SwarmOps:
  pid: 9298
  state: running
  process start time: 2017-Jan-2 13:20:42
  process running time: 00:02
[root@e50e93de4b75 swarmops]# ps aux | grep -v grep | grep SwarmOps ; netstat -anptl | grep SwarmOps

root      9298  0.0  1.1 137000 20920 ?        S    13:20   0:00 SwarmOps                                        

tcp        0      0 0.0.0.0:10130                0.0.0.0:*                 LISTEN           9298/SwarmOps       

tcp        0      0 127.0.0.1:49804             127.0.0.1:6379             ESTABLISHED      9298/SwarmOps       

tcp        0      0 :::10130                     :::*                      LISTEN           9298/SwarmOps  

3.2 稳定版本 (墙裂推荐)

3.2.1 物理机、虚拟机等

wget -c -O SwarmOps-v0.0.2.tar.gz "https://codeload.github.com/staugur/SwarmOps/tar.gz/v0.0.2"
tar zxf SwarmOps-v0.0.2.tar.gz
cd SwarmOps-0.0.2/
pip install -r requirements.txt
### 使用redis
export swarmops_swarmstoragemode=redis
export swarmops_StorageConnection=redis://127.0.0.1:6379 (格式是"redis://redis_host:redis_port:redis_password", 其中密码可以省略, 则默认None)
### 使用local
export swarmops_swarmstoragemode=local
Control.sh start

3.2.2 docker

暂不提供正式版镜像,请自行构建!

附录 1, 关于 SwarmOps 的使用:

SwarmOps 默认监听 0.0.0.0:10130,打开浏览器访问你的 IP:10130 端口,passport 验证登录后,即进入 UI 界面中,UI 调用 Api 操作数据。

附录 2, 关于 SwarmOps Api 的使用 (尚未更新完毕):

https://github.com/staugur/SwarmOps/blob/master/docs/SwarmOpsApi_SwarmEngine.md

附录 3, 关于 Nginx (tengine) 的配置:

upstream SwarmOps {
    server 127.0.0.1:10130;
    check interval=3000 rise=2 fall=5 timeout=3000 type=http;
    check_http_send "GET / HTTP/1.1\r\n\r\n";
}

server {
    listen 80;
    server_name swarmops.saintic.com;
    charset utf8;
    access_log  logs/swarmops.access.log json;
    location / {
        #proxy_pass http://127.0.0.1:10130;
        proxy_pass http://SwarmOps;
        proxy_set_header X-Forwared-For $proxy_add_x_forwarded_for ;
        proxy_set_header Host $http_host ;
        proxy_set_header X-Real-IP  $remote_addr;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
    location /nstatus {
        check_status;
        access_log   off;
    }
}

·End·