项目: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. 认证系统部署

注意: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·