前言
opendevops是一款为用户提供企业多混合云、自动化运维、完全开源的云管理平台。 opendevops前端基于Vue iview开发、为用户提供友好的操作界面,增强用户体验。 opendevops后端基于Python Tornado开发,其优势为轻量、简洁清晰、异步非阻塞。 opendevops开源多云管理平台为用户提供多功能:ITSM、基于RBAC权限系统、Web Terminnal登陆日志审计、录像回放、强大的作业调度系统、CMDB、监控报警系统等
项目官网:https://docs.opendevops.cn/
部署
opendevops 官方有单机部署文档,和分布式部署文档。本篇文章采用一台vps来模拟分布式部署方式。
环境准备
单机版官方建议配置
- 系统:centos7
- cpu:4
- 内存:8G
- 磁盘:50G
实验环境可以采用阿里云的抢占试实例或者腾讯云的竞价实例,价格非常便宜。测试完成后,直接删除,下次测试重新创建即可。很方便。
一键部署脚本
获取一键安装脚本 脚本下载地址:
- 系统优化
- 关闭selinux
- 清空防火墙规则
- 安装python,docker,docker-compose
- 安装支持模块(mysql,redis,RabbitMQ,dnsmysql)
- 修改变量(密码,密钥,IP地址)
- 安装应用模块(codo,codo-admin,webterminallte,codo-cmdb,codo-cron,codo-task,codo-tools,codo-kerrigan,codo-dns,api-gateway)
编号 | 模块名称 | 说明 | 日志路径 |
---|---|---|---|
1 | codo | 前端 | /var/log/nginx/codo-access.log |
2 | codo-admin | 管理模块 | /var/log/supervisor/mg.log |
3 | webterminallte | webshell | |
4 | codo-cmdb | 资产管理 | /var/log/supervisor/(cmdb.log,cmdb_cron.log) |
5 | codo-cron | 定时任务 | /var/log/supervisor/cron.log |
6 | codo-task | 任务系统 | /var/log/supervisor/(task_scheduler.log,exec_task.log) |
7 | codo-tools | 运维工具 | /var/log/supervisor/(tools.log,cron_jobs.log) |
8 | codo-kerrigan | 配置中心 | /var/log/supervisor/kerrigan.log |
9 | codo-dns | 域名管理 | /var/log/supervisor/codo_dns.log |
10 | api-gateway | api网关 |
安装部署
获取脚本,解压
代码语言:javascript复制tar xvf opendevops.tgz -C /tmp && rm -f opendevops.tgz
设置密码密钥等变量(mysql密码,redis密码,cookie_secret,token_secret)
代码语言:javascript复制vim env.sh
代码语言:javascript复制#部署的IP地址,改成你自己的vpsIP地址
export LOCALHOST_IP="10.10.10.**" #内网地址
export PUBLIC_IP="119.45.122.**" #外网地址
#设置你的MYSQL密码
export MYSQL_PASSWORD="ntFjoq2E5***mHy8eM"
### RabbitMQ用户密码信息
export MQ_USER="rbm"
export MQ_PASSWORD="fdh963df7***odG"
### 设置你的redis密码
export REDIS_PASSWORD="dstJ6XP***S5zcifMT"
#codo-admin用到的cookie和token,(长度50位)
export cookie_secret="rOQD(SHn8wEb*7AdIfm*h*****gapMN5xcIGxBF64VoU?q0Jav"
# 这里codo-admin和gw网关都会用到,一定要修改。可生成随意字符,长度50位
export token_secret="D?wXH0N*ZGj8YTRIxcPun!5*y6qQM97xU1L*****SfvFAi*km"
##如果要进行读写分离,Master-slave主从请自行建立,一般情况下都是只用一个数据库就可以了
# 写数据库
export DEFAULT_DB_DBHOST=${LOCALHOST_IP}
export DEFAULT_DB_DBPORT='3306'
export DEFAULT_DB_DBUSER='root'
export DEFAULT_DB_DBPWD=${MYSQL_PASSWORD}
# 读数据库
#export READONLY_DB_DBHOST=${LOCALHOST_IP}
#export READONLY_DB_DBPORT='3306'
#export READONLY_DB_DBUSER='root'
#export READONLY_DB_DBPWD=${MYSQL_PASSWORD}
# 消息队列
export DEFAULT_MQ_ADDR=${LOCALHOST_IP}
export DEFAULT_MQ_USER=${MQ_USER}
export DEFAULT_MQ_PWD=${MQ_PASSWORD}
# 缓存
export DEFAULT_REDIS_HOST=${LOCALHOST_IP}
export DEFAULT_REDIS_PORT=6379
export DEFAULT_REDIS_PASSWORD=${REDIS_PASSWORD}
执行自动安装
代码语言:javascript复制sh tencent_autoinstall.sh
若没有报错,则安装完成
访问测试
本机绑定hosts
代码语言:javascript复制119.45.122.** demo-init.opendevops.cn #vps外网地址
浏览器访问 访问地址: http://demo-init.opendevops.cn
健康检查
若登录失败,则按照下面思路进行排查 检查dns
- 确保你的dnsmasql服务是启动的,服务没有报错
- 确保/etc/dnsmasqhosts文件有解析的IP
- 确保你网关的这台机器/etc/resolv.conf DNS执行你刚部署的dnsmasq服务IP
- 确保你网关所在的机器都能正常ping通所有的服务,比如:ping cmdb2.opendevops.cn
- 确保你的防火墙规则是清空的
iptables -F
- 确保你的SELINUX是关闭的
setenforce 0
微服务健康检查
代码语言:javascript复制# 进行所有服务进行检测,返回200则正常
curl -I -X GET -m 10 -o /dev/null -s -w %{http_code} http://mg.opendevops.cn:8010/are_you_ok/
curl -I -X GET -m 10 -o /dev/null -s -w %{http_code} http://task.opendevops.cn:8020/are_you_ok/
curl -I -X GET -m 10 -o /dev/null -s -w %{http_code} http://cmdb2.opendevops.cn:8050/are_you_ok/
curl -I -X GET -m 10 -o /dev/null -s -w %{http_code} http://kerrigan.opendevops.cn:8030/are_you_ok/
curl -I -X GET -m 10 -o /dev/null -s -w %{http_code} http://cron.opendevops.cn:9900/are_you_ok/
curl -I -X GET -m 10 -o /dev/null -s -w %{http_code} http://tools.opendevops.cn:8040/are_you_ok/
curl -I -X GET -m 10 -o /dev/null -s -w %{http_code} http://dns.opendevops.cn:8060/are_you_ok/
curl -I -X GET -m 10 -o /dev/null -s -w %{http_code} http://gw.opendevops.cn:8888/api/accounts/are_you_ok/
curl -I -X GET -m 10 -o /dev/null -s -w %{http_code} http://demo-init.opendevops.cn
FAQ
部署成功后,登录闪退
根据官方文档部署完成后,登录闪退。经过调试,发现是密钥格式问题。替换正确的密钥后,登录正常
随机密钥生成方法
代码语言:javascript复制import random
import uuid
s="abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVIXYZ!aN$x*6*()?"
s1="abcdefghijklmnopqrstuvwxyz01234567890ABCDEFGHIJKLMNOPQRSTUVIXYZ"
#不带特殊字符
print(''.join(random.sample(s1,18)))
#带特殊字符
print(''.join(random.sample(s,50)))
#uuid
print(uuid.uuid4())
vps重启后,模块启动失败
报错: not found in upstream "gw.opendevops.cn"
检查本机 /etc/resolv.conf,确保nameserver 指向 dnsmasq服务所在地址
验证 rabbitmq 消息队列模块
用户密码存在于env.sh
本机绑定host
通过浏览器访问
http://rabbitmq.opendevops.cn:15672/#/