亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

10分鐘用python搭建一個超好用的CMDB系統

 更新時間:2019年07月17日 10:33:36   作者:清如許  
這篇文章主要介紹了10分鐘用python搭建一個超好用的CMDB系統,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

CMDB 是什么,作為 IT 工程師的你想必已經聽說過了,或者已經爛熟了,容我再介紹一下,以防有讀者還不知道。CMDB 的全稱是 Configuration Management Data Base,翻譯下就是配置管理數據庫,它存儲與管理企業(yè) IT 架構中設備的各種配置信息,它支撐服務流程的運轉、發(fā)揮著配置信息的價值。在今天,無論是自動化運維、標準化運維、DevOps、甚至是時髦的智能運維,其實都離開不 CMDB,可以說 CMDB 是運維體系的基石,有了配置信息數據庫,后面各種標準、流程都可以建立在 CMDB 基礎之上,從而實現真正的標準化、自動化、智能化運維,節(jié)約運維成本的同時,也降低運維流程混亂帶來的操作風險。

今天分享一個開源的 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 環(huán)境的搭建。

1. 使用 Docker

如果你熟悉容器技術,推薦使用此方法,不過最新的 Docker 目前還不支持大多數的 windows 版本,因此如果使用容器,請使用 ubuntu 或 centos 等 Linux 操作系統。首先要安裝 Docker,安裝 Docker 的方法請參考我之前的一篇文章docker容器從入門到癡迷,或直接網上搜索對應操作系統的安裝方法對著做即可,沒有難度。

環(huán)境準備:

1、一臺可以訪問互聯網的 linux 服務器 內存最好 >= 4G ,并創(chuàng)建一個具有 sudo 權限的普通用戶,注意要有 yum 命令,如果沒有可以安裝下。
2、一個 cmdb 專用的郵箱,用于發(fā)送密碼和驗證碼,如果使用163、qq等第三方郵箱請在設置里面打開POP3/SMTP/IMAP服務并生成授權碼。如果不使用注冊和忘記密碼功能,也可以不準備

一鍵安裝

將下述代碼保存到 install_cmdb.py 并執(zhí)行 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("{} 執(zhí)行失敗".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=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權限運行")
 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("郵箱用戶名(cmdb@163.com):")
 email_password = input_para("郵箱密碼|獨立授權碼(P@ssw0rd):")

 print("開始安裝docker")
 install_docker()
 print("開始創(chuàng)建目錄")
 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("完成!")

輸入網站地址和郵箱信息開始安裝,如下圖所示:


如果一切順利一會兒后您將看到安裝完成,如果失敗了可能就要調整一些系統參數并刪除已運行的容器重新執(zhí)行了,不過根據我的安裝經驗,基本不會出錯,容器還是非常方便部署的。

執(zhí)行

sudo docker ps

將看到三個正在運行的容器,分別是 cmdb,cmdb-es,cmdb-db,如下圖所示

其中 cmdb 運行著 web 服務器(nginx,uwsgi,django,vue.js),cmdb-es 運行著 Elasticsearch 全文檢索引擎,也存儲你的配置信息,cmdb-db 運行著 mysql,保存著 web 服務器的元數據(django 的知識庫)。

在瀏覽器中輸入"localhost" 盡情的開始享用吧。

2. 不使用 Docker

下面的內容主要是分享給 windows 用戶的,linux 用戶也可以對比操作,沒有問題。使用 Docker 雖然方便部署,但它屏蔽了一些細節(jié),不利于二次開發(fā)和問題排查。在不使用 Docker 的情況下,我們不僅要裝軟件,還要安裝依賴,配置環(huán)境,雖然麻煩,但是可以學到更多知識,出了問題也可以很快定位,更能加深對項目框架的理解,也是值得的。

(1)安裝 mysql,創(chuàng)建數據庫,配置權限

如果你的本機已經安裝 mysql,則不心再安裝,直接創(chuàng)建數據庫,配置權限即可。

安裝 mysql

從網官下載最新的 MySQL Community Server [https://dev.mysql.com/downloads/mysql/]
比如我下載的是 mysql-8.0.12-winx64.zip ,這是個免安裝版本,直接解壓到你想安裝的目錄內,并在里面新建 my.ini 文件,位置如下圖所示:

my.ini 的文件內容如下所示:

[mysqld]
# 設置3306端口
port=3306
# 設置mysql的安裝目錄
basedir=D:\program\mysql\mysql-8.0.12-winx64
# 設置mysql數據庫的數據的存放目錄
datadir=D:\program\mysql\mysql-8.0.12-winx64\data
# 允許最大連接數
max_connections=200
# 允許連接失敗的次數。這是為了防止有人從該主機試圖攻擊數據庫系統
max_connect_errors=10
# 服務端使用的字符集默認為UTF8
character-set-server=utf8
# 創(chuàng)建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
# 默認使用“mysql_native_password”插件認證
default_authentication_plugin=mysql_native_password
[mysql]
# 設置mysql客戶端默認字符集
default-character-set=utf8
[client]
# 設置mysql客戶端連接服務端時默認使用的端口
port=3306
default-character-set=utf8

請注意下面的路徑設置要正確,

# 設置mysql的安裝目錄
basedir=D:\program\mysql\mysql-8.0.12-winx64
# 設置mysql數據庫的數據的存放目錄
datadir=D:\program\mysql\mysql-8.0.12-winx64\data

如果你想從任意一個命令窗口啟動 mysql,請把 D:\program\mysql\mysql-8.0.12-winx64\bin 加入環(huán)境變量。*

這個 my.ini 文件的編碼一定保存為 gbk 格式,否則會報錯,我費了好長時間才發(fā)現這個問題。

接下來在MySQL安裝目錄的 bin 目錄(D:\program\mysql\mysql-8.0.12-winx64\bin)下以管理員權限執(zhí)行命令:mysqld --initialize --console;執(zhí)行完成后,在輸出信息中會打印 root 用戶的初始密碼,比如

[Server] A temporary password is generated for root@localhost: rIafvf5f5G,a

表示臨時密碼為 rIafvf5f5G,a ,用于 root 用戶第一次登陸,之后再修改 root 用戶的密碼。

這一步執(zhí)行后完成初始化操作,并在安裝目錄下生成 data 文件夾,用于存放數據。執(zhí)行

mysqld --install

完成 mysql 服務的安裝,安裝完成之后,就可以通過命令 net start mysql 啟動 mysql 的服務了。通過命令 net stop mysql 停止服務。通過命令 sc delete mysql /mysqld -remove 卸載 mysql 服務。接下來就可以建庫、用戶、分配權限了。

修改 root 密碼:
在 mysql 安裝目錄的 bin 目錄下執(zhí)行命令:mysql -u root -p 然后輸入上面的密碼,進入 mysql 環(huán)境,執(zhí)行

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密碼';

注意命令尾的“;”一定要有,這是 mysql 的語法,

管理員 root 的 host 是 localhost,代表僅限 localhost 登錄訪問。如果要允許開放其他 ip 登錄,則需要添加新的 host。如果要允許所有 ip 訪問,可以直接修改成“%”;

ALTER USER 'root'@'%' IDENTIFIED BY '遠程登陸密碼';

創(chuàng)建數據庫,并分配用戶權限

使用 root 用戶登陸 mysql 并執(zhí)行

mysql>create database cmdb;

即可創(chuàng)建數據庫 cmdb,但是這個數據庫只能有 root 訪問,如果要使用其他用戶訪問,則先新建用戶,例如讓 aaron 用戶可以完全控制 cmdb

mysql>CREATE USER 'aaron'@'%' IDENTIFIED BY 'aaron';
Query OK, 0 rows affected (0.48 sec)
mysql> grant all on cmdb.* to 'aaron'@'%';
Query OK, 0 rows affected (0.23 sec)

至此 mysql 已安裝配置完畢。

(2)安裝 Elasticsearch

這一步很簡單,官網下載解壓,進入其 bin 目錄運行如下圖所示的 bat 文件即可 :

如果運行失敗,說明本機沒有安裝 java,或者沒有正確地配置 java 環(huán)境變量,這些操作也非常簡單,網上到處都是,不在此詳述。

(3)運行 cmdb 后端 api 服務、前端 ui

首先準備 Python3 的環(huán)境,這個也很簡單,直接官網下載,運行即可,記得把 Python 添加到 Path 變量中。

如果你的電腦里有多個項目,為防止項目的依賴包版本沖突,建議使用 virtualenv 來為每個項目前創(chuàng)建一個虛擬的 Python 環(huán)境,將各自的依賴包裝在自己的虛擬環(huán)境里。

(1)部署后端

執(zhí)行以下命令,注意命令后面的注釋。

git clone https://github.com/open-cmdb/cmdb.git
cd cmdb
#如創(chuàng)建了虛擬環(huán)境,請先激活
pip install -r requirements.txt #如果這一步有包安裝失敗,提示卻少 microsoft visual c++ 14.0 的話,請在網站 https://www.lfd.uci.edu/~gohlke/pythonlibs/ 上查找相應的whl文件,直接 pip install .whl文件即可。

接下來修改3個文件

修改 apps/mgmt/views.py 文件,注釋掉 “ from . import initialize ”這一行。

修改 manage.py

將 APP_NAME = BASE_DIR.rsplit("/", 1)[-1] 修改為

APP_NAME = BASE_DIR.rsplit("\", 1)[-1] ,這是因為windows的路徑\ 在python 里會變成 \。

修改 cmdb/settings.py 文件,修改mysql 數據庫的配置信息如下所示:

DATABASES = {
 'default': {
 'ENGINE': 'django.db.backends.mysql',
 'NAME': "cmdb",
 "HOST": "127.0.0.1",
 "PORT": 3306,
 "USER": "aaron",
 "PASSWORD": "aaron"
 }
}

接著在命令窗口繼續(xù)執(zhí)行以下操作:請關注注釋內容。

python manage.py makemigrations 
python manage.py migrate
python manage.py cmdb_create_superuser #這一步創(chuàng)建一可以登陸的管理員用戶
#修改 apps/mgmt/views.py 文件,取消注釋“ from . import initialize ”
python manage.py runserver #這一步啟動后端的 api 服務

此時一個后端的服務已經啟動了,在瀏覽器中打開 “127.0.0.1:8000”就可以看到 api 的接口了。

(2)使用 nginx 部署前端并連接后端 api 服務

在命令容器執(zhí)行以下命令:

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

獲取前端的源代碼,然后下載下載 ngnix 壓縮包,并解壓至安裝目錄,修改配置文件 nginx.conf,添加如下 server 配置:

server {
  listen 8080;
  server_name localhost;
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
  root html;
  }
  
  root E:\GitHub\cmdb-web\dist;
  index index.html;
  location / {
  try_files $uri $uri/ @router;
  index index.html;
  }
  
  location @router {
  rewrite ^.*$ /index.html last;
  }

  location ~ /api{
  proxy_pass http://127.0.0.1:8000;
  }
 }

其中以配置

 location ~ /api{
  proxy_pass http://127.0.0.1:8000;
  }

讓前臺發(fā)過來中以 api 開頭的 url 請求都轉發(fā)至 http://127.0.0.1:8000 進行解析,即第一步部署的 django 項目,這樣就連接了前端和后端。然后我們在 nginx.exe 所在的目錄下啟動 nginx 服務。

接下來在瀏覽器中輸入 127.0.0.1:8080 即可正常訪問本文開始處的 cmdb 系統,您可以嘗試下強大的搜索功能及增刪改功能。

點擊右上方【API 文檔】 可以訪問 cmdb 的接口文檔,非常方便。

至此系統搭建完畢。如果要用于生產環(huán)境,請使用 linux 操作系統,并使用 uwsgi 來驅動 django 項目。

3. Vue 環(huán)境搭建

我想你不會僅僅滿足于將別人的項目下載下來能運行就行了,你肯定想對其進行改造來滿足自己的需求。因此你可能會需要修改前端或后端,后端的修改其實上面部署的已經可以了,你可以直接閱讀 django 項目的源代碼進行修改調試。如果要修改前端代碼進行調試,你就需要搭建 Vue 環(huán)境。

你可能會問了,Vue 是個啥?Vue 是一個 javascript 框架,如果說 jQuery,你可能就知道了,使用方法是類似的,在 html 上引入一行 javascript 的文件,就可以使用框架的特性了。 Vue 是一套用于構建用戶界面的漸進式框架。與其它大型框架不同的是,Vue 被設計為可以自底向上逐層應用。Vue 的核心庫只關注視圖層,不僅易于上手,還便于與第三方庫或既有項目整合。另一方面,當與現代化的工具鏈以及各種支持類庫結合使用時,Vue 也完全能夠為復雜的單頁應用提供驅動。
學習 vue 需要有 html、css、javascript 基礎
新手可以通過 html 上引入 Vue 的 js 文件來使用 vue,如下所示:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Vue 測試實例 </title>
	<script src="https://cdn.staticfile.org/vue/2.4.2/vue.min.js"></script>
</head>
<body>
<div id="app">
 	<p>{{ message }}</p>
</div>

<script>
 new Vue({
	 el: '#app',
	 data: {
	 message: 'Hello Vue.js!'
	 }
})
</script>
</body>
</html>

但是在較復雜的項目中,還是要使用工具來幫助我們管理項目的層級及文件之間的依賴關系,這就需要使用 vue 的命令行工具 vue-cli ,vue-cli 需要 npm 工具來安裝,npm 工具集成在 node.js 中,因此需要安裝 node.js。

安裝 node.js 非常簡單,直接官網下載解壓即可使用:

將此路徑添加到環(huán)境變量 Path 中,你就可以在任意的命令窗口使用 npm 命令了。

1、安裝 vue-cli

先安裝淘寶鏡像,大家都知道國內直接使用 npm 的官方鏡像是非常慢的,這里推薦使用淘寶 NPM 鏡像。

npm install -g cnpm --registry=https://registry.npm.taobao.org

執(zhí)行結果如下:


這樣就可以使用 cnpm 命令來安裝模塊了:使用 cnpm 安裝 vue-cli

然后就可以使用 vue init webpack my-project 來建一個項目my-project,這里需要進行一些配置,默認回車即可,如下圖所示:

等依賴安裝完畢后,進入項目,執(zhí)行以下命令:

C:\Users\xx>cd my-project
C:\Users\xx\my-project>cnpm install
C:\Users\xx\my-project>cnpm run dev

運行成功后后打印如下信息:

此時打開瀏覽器,輸入 http://localhost:8081

如果要把這個頁面部署在 nginx 服務器上,你還需要 build 來生成靜態(tài)資源,如下圖所示:


這時會在 my-project 下生成 dist 目錄,相當于我們寫程序編譯生成的目標文件。my-project 下的內容如下:


此時已經可以開啟你的 vue 之旅了。

當學會了 Vue 之后,你就可以修改本項目的前端源代碼來滿足自己的需求了,進入 src 目錄,查看并修改源代碼之后,進入 cmdb_web 的項目目錄,執(zhí)行

# 安裝依賴,如果慢可換成 cnpm
npm install
# 啟動服務,默認端口為8080,如果被占用會自動選取一個未被占用的端口
npm run dev
# 建立靜態(tài)文件,可以放在 nginx 上運行
npm run build
# 查看建立報告
npm run build --report

即可將生成的 dist 部署到 web 服務器了。

也許你想這樣實在太麻煩了,自己動手寫一個 cmdb 系統,當然也可以,但是我不推薦這樣做,畢竟你的時間是有限的,自己寫一個要比拿優(yōu)秀的代碼來改造要慢得多,當然大神例外,作為一般人我們應該避免重復造輪子,學會站在巨人的肩膀上。開發(fā)一個項目最好是找 github 上優(yōu)秀的開源項目,拿來做修改以滿足自己的需求,這才是正確的做法。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 使用C語言擴展Python程序的簡單入門指引

    使用C語言擴展Python程序的簡單入門指引

    這篇文章主要介紹了使用C語言擴展Python程序的簡單入門指引,來自于IBM官網網站技術文檔,需要的朋友可以參考下
    2015-04-04
  • iPython pylab模式啟動方式

    iPython pylab模式啟動方式

    這篇文章主要介紹了iPython pylab模式啟動方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • Pygame坦克大戰(zhàn)游戲開發(fā)實戰(zhàn)詳解代碼

    Pygame坦克大戰(zhàn)游戲開發(fā)實戰(zhàn)詳解代碼

    《坦克大戰(zhàn)》以二戰(zhàn)坦克為題材,既保留了射擊類游戲的操作性,也改進了射擊類游戲太過于復雜難玩的高門檻特點,集休閑與競技于一身。經典再度襲來,流暢的畫面,瘋狂的戰(zhàn)斗,讓玩家再次進入瘋狂坦克的世界。玩家的目標是控制坦克躲避危險,消滅掉所有的敵人即可進入下一關
    2022-02-02
  • Python Loguru輕松靈活的日志管理庫基本用法探索

    Python Loguru輕松靈活的日志管理庫基本用法探索

    Loguru是一個用于Python的高性能、簡潔且靈活的日志庫,它的目標是提供一種簡單的方式來記錄應用程序的運行情況,同時保持代碼的簡潔性和可讀性,本文將探索loguru的基本用法
    2024-01-01
  • 分析python請求數據

    分析python請求數據

    這篇文章我們給大家整理了關于python請求數據的相關知識點內容,有興趣和需要的朋友們可以學習下。
    2018-08-08
  • Blueprint實現路由分組及Flask中session的使用詳解

    Blueprint實現路由分組及Flask中session的使用詳解

    這篇文章主要為大家介紹了Blueprint實現路由分組及Flask中session的使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • python3實現SMTP發(fā)送郵件詳細教程

    python3實現SMTP發(fā)送郵件詳細教程

    這篇文章主要為大家詳細介紹了python3實現SMTP發(fā)送郵件的詳細教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • pandas對齊運算的實現示例

    pandas對齊運算的實現示例

    本文主要介紹了pandas對齊運算的實現示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Python中pytest的參數化實例解析

    Python中pytest的參數化實例解析

    這篇文章主要介紹了Python中pytest的參數化實例解析,pytest是一個非常成熟的全功能的Python測試框架,主要有簡單靈活,容易上手,支持參數化等特點,需要的朋友可以參考下
    2023-07-07
  • 深入理解Python中字典的鍵的使用

    深入理解Python中字典的鍵的使用

    這篇文章主要介紹了深入理解Python中字典的鍵的使用,是Python入門學習中的基礎知識,需要的朋友可以參考下
    2015-08-08

最新評論