Git Product home page Git Product logo

cmdb's Introduction

cmdb

CMDB 资产管理系统

License: GPL v3 pyversions vueversions es2015 element ui

知乎链接

https://zhuanlan.zhihu.com/p/34191320

在线演示

http://cmdb.xyz 用户名:admin 密码:cmdbcmdb (请不要修改)

问答群

特性

  • 热添加删除表 自定义字段类型
  • REST前后端分离架构 开放所有API接口
  • 强大的搜索查找能力(后端使用elasticsearch存储数据 ) 可以配合kibana使用
  • 支持查看数据修改记录
  • 表级权限管理
  • 容器快速部署

前端

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

后端

  • Python3
  • Django 1.11
  • Django REST framework
  • Elasticsearch
  • Mysql
  • LDAP
  • uwsgi
  • Nginx
  • Docker

前端

https://github.com/open-cmdb/cmdb-web

快速开始

准备一台可以访问互联网的centos服务器(内存大于等于4G) 将下面代码保存到install_cmdb.py 执行sudo python install_cmdb.py

#!/usr/bin/env python2
# -*- 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 DB_HOST=cmdb-db -e ENV=PRO -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=cmdbcmdb -e DB_NAME=cmdb -e ELASTICSEARCH_HOSTS=cmdb-es -e EMAIL_HOST={} -e EMAIL_PORT={} -e EMAIL_USERNAME={} -e EMAIL_PASSWORD={} mingmingtang/cmdb start".format(site_url, email_host, email_port, email_username, email_password))

def input_para(help):
    value = ""
    while(not value):
        value = raw_input(help)
    return value

if __name__ == '__main__':
    if(os.geteuid() != 0):
        raise("请以root权限运行")
    # parser = argparse.ArgumentParser()
    # parser.add_argument("--siteurl", type=str, help="E.g: http://cmdb.xxx.com, http://172.17.100.1")
    # parser.add_argument("--emailhost", type=str, help="E.g: http://cmdb.xxx.com, http://172.17.100.1")
    # parser.add_argument("--emailport", type=str, help="E.g: http://cmdb.xxx.com, http://172.17.100.1")
    # parser.add_argument("--emailusername", type=str, help="E.g: http://cmdb.xxx.com, http://172.17.100.1")
    # parser.add_argument("--emailpassword", type=str, help="E.g: http://cmdb.xxx.com, http://172.17.100.1")
    # args = parser.parse_args()
    # SITE_URL = args.SITE_URL

    site_url = input_para("请输入网站域名或IP(http://cmdb.xxx.com):")
    email_host = input_para("网站邮箱服务器(smtp.163.com):")
    email_port = input_para("邮箱服务器端口(25):")
    email_username = input_para("邮箱用户名([email protected]):")
    email_password = input_para("邮箱密码|独立授权码(P@ssw0rd):")

    print("开始安装docker")
    install_docker()
    print("开始创建目录")
    create_dir()
    print("开始运行mysql容器")
    run_db_container()
    print("开始运行elasticsearch容器")
    run_es_container()
    print("等待数据库启动完成(10s)")
    time.sleep(10)
    print("开始初始化数据库")
    init_db()
    print("开始运行cmdb")
    run_cmdb_container(site_url, email_host, email_port, email_username, email_password)
    print("完成!")

手工部署

先安装好Elasticsearch(5.6) 和 Mysql(5.7) 其它版本未测试

容器名称

mingmingtang/cmdb

初始化数据库

docker run -it --name cmdb-init-db --rm -e DB_HOST=数据库地址 -e ENV=PRO -e DB_PORT=数据库端口 -e DB_USERNAME=数据库用户名 -e DB_PASSWORD=数据库密码 -e DB_NAME=cmdb mingmingtang/cmdb init-db

示例:

docker run -it --name cmdb-init-db --rm -e DB_HOST=172.16.0.11 -e ENV=PRO -e DB_PORT=3306 -e DB_USERNAME=root -e DB_PASSWORD=******** -e DB_NAME=cmdb mingmingtang/cmdb init-db

运行CMDB

docker run -d --name cmdb -p 80:80 -e ENV=PRO -e SITE_URL=网站地址 -e DB_HOST=数据库地址 -e DB_PORT=数据库端口 -e DB_USERNAME=数据库用户名 -e DB_PASSWORD=数据库密码 -e DB_NAME=cmdb -e ELASTICSEARCH_HOSTS=ES地址,多个用英文逗号隔开,格式http://xx.xx.xx.xx:9200 -e EMAIL_HOST=邮箱smtp地址 -e EMAIL_PORT=邮箱smtp端口 -e EMAIL_USERNAME=发件箱 -e EMAIL_PASSWORD=邮箱密码 mingmingtang/cmdb start

示例:

docker run -d --name cmdb -p 80:80 -e ENV=PRO -e SITE_URL=http://120.79.60.130 -e DB_HOST=172.16.0.11 -e DB_PORT=3306 -e DB_USERNAME=root -e DB_PASSWORD=******** -e DB_NAME=cmdb -e ELASTICSEARCH_HOSTS=http://127.0.0.1:9200 -e EMAIL_HOST=smtp.163.com -e EMAIL_PORT=25 -e [email protected] -e EMAIL_PASSWORD=******** mingmingtang/cmdb start

嘿 哥们儿 给颗星吧 ┭┮﹏┭┮

cmdb's People

Contributors

tangmingming avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cmdb's Issues

我本地部署后,点击“登录”,发现后台没有收到post请求,只收到OPTIONS请求,怎么破?

@tangmingming 3Q!

"C:\Program Files\JetBrains\PyCharm 2019.3\bin\runnerw64.exe" C:\py_envs\cmdb-CdfGpvMc\Scripts\python.exe "C:\Program Files\JetBrains\PyCharm 2019.3\plugins\python\helpers\pydev\pydevd.py" --multiproc --qt-support=auto --client 127.0.0.1 --port 52076 --file C:/repo_git/cmdb/gitee/cmdb/manage.py runserver 8000
pydev debugger: process 8260 is connecting

Connected to pydev debugger (build 193.5233.109)
APP_NAME = C:\repo_git\cmdb\gitee\cmdb
pydev debugger: process 15300 is connecting

APP_NAME = C:\repo_git\cmdb\gitee\cmdb
Performing system checks...

(0.001) SELECT @@SQL_AUTO_IS_NULL; args=None
(0.000) SELECT VERSION(); args=None
(0.001) SELECT mgmt_permission.id, mgmt_permission.name, mgmt_permission.alias FROM mgmt_permission WHERE mgmt_permission.name = 'read_all'; args=('read_all',)
(0.001) UPDATE mgmt_permission SET name = 'read_all', alias = '所有可读' WHERE mgmt_permission.id = 1; args=('read_all', '所有可读', 1)
(0.000) SELECT mgmt_permission.id, mgmt_permission.name, mgmt_permission.alias FROM mgmt_permission WHERE mgmt_permission.name = 'write_all'; args=('write_all',)
(0.000) UPDATE mgmt_permission SET name = 'write_all', alias = '所有可写' WHERE mgmt_permission.id = 2; args=('write_all', '所有可写', 2)
(0.000) SELECT mgmt_table.name, mgmt_table.alias, mgmt_table.readme, mgmt_table.creator_id, mgmt_table.creation_time FROM mgmt_table; args=()
System check identified no issues (0 silenced).
March 22, 2020 - 17:48:40
Django version 1.11.29, using settings 'cmdb.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
(0.010) SHOW FULL TABLES; args=None
(0.001) SELECT django_migrations.app, django_migrations.name FROM django_migrations; args=()
"OPTIONS /api/v1/token HTTP/1.1" 200 504

新功能整合

可否用 D-R-F 也把发布系统,工单系统加进来?

django.db.utils.OperationalError: no such table: mgmt_permission

我git clone了你的源代码,完全正确地安装了requirements.txt中的软件包,为什么提示
django.db.utils.OperationalError: no such table: mgmt_permission
执行 python manage.py makemigrations 也报错 。
删除 migrations目录 再执行,还是报同样的错误,网上搜索了好久也未找到解决方法,
请教大神如何解决。

初始化数据库异常

`(cmdb) C:\repo_git\cmdb\gitee\cmdb>python manage.py makemigrations
APP_NAME = C:\repo_git\cmdb\gitee\cmdb
(0.000) SELECT @@SQL_AUTO_IS_NULL; args=None
(0.000) SELECT VERSION(); args=None
(0.001) None; args=('read_all',)
Traceback (most recent call last):
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\backends\mysql\base.py", line 101, in execute
return self.cursor.execute(query, args)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\MySQLdb\cursors.py", line 209, in execute
res = self._query(query)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\MySQLdb\cursors.py", line 315, in _query
db.query(q)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\MySQLdb\connections.py", line 239, in query
_mysql.connection.query(self, query)
MySQLdb._exceptions.ProgrammingError: (1146, "Table 'cmdb.mgmt_permission' doesn't exist")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
File "manage.py", line 32, in
execute_from_command_line(sys.argv)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\core\management_init_.py", line 364, in execute_from_command_line
utility.execute()
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\core\management_init_.py", line 356, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\core\management\base.py", line 283, in run_from_argv
self.execute(*args, **cmd_options)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\core\management\base.py", line 327, in execute
self.check()
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\core\management\base.py", line 359, in check
include_deployment_checks=include_deployment_checks,
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\core\management\base.py", line 346, in run_checks
return checks.run_checks(**kwargs)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\core\checks\registry.py", line 81, in run_checks
new_errors = check(app_configs=app_configs)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\core\checks\urls.py", line 16, in check_url_config
return check_resolver(resolver)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\core\checks\urls.py", line 26, in check_resolver
return check_method()
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\urls\resolvers.py", line 256, in check
for pattern in self.url_patterns:
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\utils\functional.py", line 35, in get
res = instance.dict[self.name] = self.func(instance)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\urls\resolvers.py", line 407, in url_patterns
patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\utils\functional.py", line 35, in get
res = instance.dict[self.name] = self.func(instance)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\urls\resolvers.py", line 400, in urlconf_module
return import_module(self.urlconf_name)
File "C:\py_envs\cmdb-CdfGpvMc\lib\importlib_init
.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1006, in _gcd_import
File "", line 983, in _find_and_load
File "", line 967, in _find_and_load_unlocked
File "", line 677, in load_unlocked
File "", line 728, in exec_module
File "", line 219, in call_with_frames_removed
File "C:\repo_git\cmdb\gitee\cmdb\cmdb\urls.py", line 28, in
url(r'^api/v1/mgmt/', include("mgmt.urls")),
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\conf\urls_init
.py", line 50, in include
urlconf_module = import_module(urlconf_module)
File "C:\py_envs\cmdb-CdfGpvMc\lib\importlib_init
.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "", line 1006, in _gcd_import
File "", line 983, in _find_and_load
File "", line 967, in _find_and_load_unlocked
File "", line 677, in _load_unlocked
File "", line 728, in exec_module
File "", line 219, in _call_with_frames_removed
File "C:\repo_git\cmdb\gitee\cmdb\apps\mgmt\urls.py", line 3, in
from . import views
File "C:\repo_git\cmdb\gitee\cmdb\apps\mgmt\views.py", line 32, in
from . import initialize
File "C:\repo_git\cmdb\gitee\cmdb\apps\mgmt\initialize.py", line 124, in
permission, is_new = models.Permission.objects.get_or_create(name="read_all")
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\models\manager.py", line 85, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\models\query.py", line 464, in get_or_create
return self.get(**lookup), False
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\models\query.py", line 374, in get
num = len(clone)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\models\query.py", line 232, in len
self._fetch_all()
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\models\query.py", line 1121, in _fetch_all
self._result_cache = list(self._iterable_class(self))
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\models\query.py", line 53, in iter
results = compiler.execute_sql(chunked_fetch=self.chunked_fetch)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\models\sql\compiler.py", line 899, in execute_sql
raise original_exception
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\models\sql\compiler.py", line 889, in execute_sql
cursor.execute(sql, params)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\backends\utils.py", line 79, in execute
return super(CursorDebugWrapper, self).execute(sql, params)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\utils.py", line 94, in exit
six.reraise(dj_exc_type, dj_exc_value, traceback)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\utils\six.py", line 685, in reraise
raise value.with_traceback(tb)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\backends\utils.py", line 64, in execute
return self.cursor.execute(sql, params)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\django\db\backends\mysql\base.py", line 101, in execute
return self.cursor.execute(query, args)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\MySQLdb\cursors.py", line 209, in execute
res = self._query(query)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\MySQLdb\cursors.py", line 315, in _query
db.query(q)
File "C:\py_envs\cmdb-CdfGpvMc\lib\site-packages\MySQLdb\connections.py", line 239, in query
_mysql.connection.query(self, query)
django.db.utils.ProgrammingError: (1146, "Table 'cmdb.mgmt_permission' doesn't exist")

ry
_mysql.connection.query(self, query)
django.db.utils.ProgrammingError: (1146, "Table 'cmdb.mgmt_permission' doesn't exist")
`

我在尝试手动部署,之前,docker方式部署是ok的。

想问下,初始化数据库不能通过 python manage.py makemigrations 进行吗?
是不是只能 用docker命令初始化(sudo docker run -it --rm --link cmdb-db -e DB_HOST=cmdb-db -e ENV=PRO -e DB_PORT=3306 -e DB_USERNAME=root -e DB_PASSWORD=cmdbcmdb -e DB_NAME=cmdb mingmingtang/cmdb init-db)数据库?

docker run 错误

ubuntu 下run的时候提示
docker: invalid reference format: repository name must be lowercase.

吼吼

垃圾,页面老是报错

代码逻辑问题

正在拜读您的代码,确实对我这个刚入门vue的新手有很大的帮助,可否留下联系方式,vue的代码有些疑问点,多谢

求教程

请问管理的是阿里云的资源吗

用户体验:中文支持

为了国内用户体验好,建议中文支持;或者如果有中文版,发下链接;传统企业资产管理,可以考虑用。

访问

楼主为啥访问不到示例那个网址了

部署问题

docker快速部署之后
docker ps可以看到db es cmdb都启动了,但是不能访问。

The interface not defined!

在测试过程中经常出现这样提示 The interface not defined!

api接口调用也会经常提示返回 {"detail": "The interface not defined!"}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.