10分钟用python搭建一个超好用的CMDB系统

论坛 期权论坛 脚本     
niminba   2021-5-23 03:28   5135   0

CMDB 是什么,作为 IT 工程师的你想必已经听说过了,或者已经烂熟了,容我再介绍一下,以防有读者还不知道。CMDB 的全称是 Configuration Management Data Base,翻译下就是配置管理数据库,它存储与管理企业 IT 架构中设备的各种配置信息,它支撑服务流程的运转、发挥着配置信息的价值。在今天,无论是自动化运维、标准化运维、DevOps、甚至是时髦的智能运维,其实都离开不 CMDB,可以说 CMDB 是运维体系的基石,有了配置信息数据库,后面各种标准、流程都可以建立在 CMDB 基础之上,从而实现真正的标准化、自动化、智能化运维,节约运维成本的同时,也降低运维流程混乱带来的操作风险。

今天分享一个开源的 cmdb 系统的搭建过程,通过这一系列搭建的过程你不仅可以获得一个支持全文检索、自带 restful api 的 cmdb 系统,而且还可以学到不少时髦的技术。

后端技术:

  • Python3
  • Django
  • Django REST framework
  • Elasticsearch
  • uwsgi
  • Nginx
  • Docker

前端技术:

  • Vue
  • Element-ui
  • Vue-Router
  • Vuex
  • Axios

先看一下这个 CMDB 系统的容颜,设计上参考了饿了么内部的 cmdb 系统:

基本功能有:热添加删除表、自定义字段类型,方便增删改查的前端界面,强大的搜索查找能力(后端使用elasticsearch存储数据 ) 可以配合 kibana 使用,查看数据的删除修改记录、历史版本等,还带有表级权限管理,开放所有 API。

github 仓库
后端:https://github.com/open-cmdb/cmdb
前端:https://github.com/open-cmdb/cmdb-web

下面介绍两种方法搭建此开源 cmdb 系统 ,一个是使用 Docker,适用于 linux 操作系统 ,另一个是不使用 Docker,适用于 windows 和 linux 。最后介绍下 vue 环境的搭建。

1. 使用 Docker

如果你熟悉容器技术,推荐使用此方法,不过最新的 Docker 目前还不支持大多数的 windows 版本,因此如果使用容器,请使用 ubuntu 或 centos 等 Linux 操作系统。首先要安装 Docker,安装 Docker 的方法请参考我之前的一篇文章docker容器从入门到痴迷,或直接网上搜索对应操作系统的安装方法对着做即可,没有难度。

环境准备:

1、一台可以访问互联网的 linux 服务器 内存最好 >= 4G ,并创建一个具有 sudo 权限的普通用户,注意要有 yum 命令,如果没有可以安装下
2、一个 cmdb 专用的邮箱,用于发送密码和验证码,如果使用163、qq等第三方邮箱请在设置里面打开POP3/SMTP/IMAP服务并生成授权码。如果不使用注册和忘记密码功能,也可以不准备

一键安装

将下述代码保存到 install_cmdb.py 并执行 sudo python3 install_cmdb.py 即可一键安装。

# -*- coding: utf-8 -*-
import os
import subprocess
import argparse
import time

def base(cmd):
 if subprocess.call(cmd, shell=True):
  raise Exception("{} 执行失败".format(cmd))

def install_docker():
 base("sudo yum install -y yum-utils device-mapper-persistent-data lvm2")
 base("sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo")
 base("sudo yum makecache fast")
 base("sudo yum -y install docker-ce")
 if(not os.path.exists("/etc/docker")):
  base("mkdir -p /etc/docker")
 with open("/etc/docker/daemon.json", "w") as f:
  f.write('{\n "registry-mirrors": ["https://9f4w4icn.mirror.aliyuncs.com"] \n}')
 base("sudo systemctl daemon-reload")
 base("sudo systemctl start docker")

def create_dir():
 if (not os.path.exists("/var/cmdb/db")):
  base("sudo mkdir -p /var/cmdb/db")
 if (not os.path.exists("/var/cmdb/es")):
  base("sudo mkdir -p /var/cmdb/es")

def run_db_container():
 base("sudo docker run --name cmdb-db -d -e MYSQL_ROOT_PASSWORD=cmdbcmdb -v /var/cmdb/db:/var/lib/mysql mysql:5.7.21")

def run_es_container():
 base("sudo docker run --name cmdb-es -d -v /var/cmdb/es:/usr/share/elasticsearch/data elasticsearch:5.6.8")

def init_db():
 base("sudo docker run -it --rm --link cmdb-db -e ENV=PRO -e DB_HOST=cmdb-db -e DB_PORT=3306 -e DB_USERNAME=root -e DB_PASSWORD=cmdbcmdb -e DB_NAME=cmdb mingmingtang/cmdb init-db")

def run_cmdb_container(site_url, email_host, email_port, email_username, email_password):
 base("sudo docker run -d --name cmdb --link cmdb-db --link cmdb-es -p 80:80 -e ENV=PRO -e SITE_URL={} -e DB_HOST=cmdb-db -e DB_PORT=3306 -e DB_USERNAME=root -e DB_PASSWORDе聍顽4(4(е聱^R"@n3nO"Gg/GR"CjnZ	j疚4(е聍顽4(4(е聍顽4(^>^4(YB;>rj&7vjron3~r/B;o}jn3&04(鉅4('zs>6"@4)4(B*r7*c>zs6R*'>[r6Rj>4)(/vgZR)4(~r//*F(4)4(6>R"Cjr7*f4({r*&/gO>b"G:6CkW^^br'fCjgS.jvRO{s""G77Cgrj
Gr&jCkjrg&7bjk4(brZj3ro疒j惚r'&*rokkR2
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP