项目: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;
}
}