diff --git a/Dockerfile b/Dockerfile
index cf4195b..734981a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,5 +1,5 @@
# ================================= UI ================================
-FROM node:alpine AS builder
+FROM node:16.0.0-alpine AS builder
LABEL description="cmdb-ui"
@@ -18,20 +18,20 @@ COPY --from=builder /data/apps/cmdb-ui/dist /etc/nginx/html/
# ================================= API ================================
-FROM python:3.7-alpine AS cmdb-api
+FROM python:3.8-alpine AS cmdb-api
-LABEL description="Python3.7,cmdb"
+LABEL description="Python3.8,cmdb"
COPY cmdb-api /data/apps/cmdb
WORKDIR /data/apps/cmdb
-RUN apk add --no-cache tzdata gcc musl-dev libffi-dev openldap-dev
+RUN apk add --no-cache tzdata gcc musl-dev libffi-dev openldap-dev python3-dev jpeg-dev zlib-dev build-base
ENV TZ=Asia/Shanghai
RUN pip install --no-cache-dir -r requirements.txt \
- && cp ./settings.py.example settings.py \
+ && cp ./settings.example.py settings.py \
&& sed -i "s#{user}:{password}@127.0.0.1:3306/{db}#cmdb:123456@mysql:3306/cmdb#g" settings.py \
&& sed -i "s#redis://127.0.0.1#redis://redis#g" settings.py \
&& sed -i 's#CACHE_REDIS_HOST = "127.0.0.1"#CACHE_REDIS_HOST = "redis"#g' settings.py
diff --git a/README.md b/README.md
index c124ad5..a981916 100644
--- a/README.md
+++ b/README.md
@@ -17,7 +17,7 @@
系统介绍
-------------
### 整体架构
-
+
### 相关文档
- 设计文档
@@ -64,8 +64,6 @@
### [Makefile安装](docs/makefile.md)
-
-
----------------------
_**欢迎加入CMDB运维开发QQ群(336164978)**_
diff --git a/README_en.md b/README_en.md
index 44fd236..af28886 100644
--- a/README_en.md
+++ b/README_en.md
@@ -17,7 +17,7 @@
Overview
-------------
### Technical Architecture
-
+
### Document
- Design Document
@@ -75,4 +75,4 @@ Installation
-----
_**Welcome to join us through QQ group(336164978)**_
-
+
\ No newline at end of file
diff --git a/cmdb-api/api/commands/click_cmdb.py b/cmdb-api/api/commands/click_cmdb.py
index 570031f..4fd7cf3 100644
--- a/cmdb-api/api/commands/click_cmdb.py
+++ b/cmdb-api/api/commands/click_cmdb.py
@@ -41,6 +41,15 @@ from api.models.cmdb import PreferenceRelationView
def cmdb_init_cache():
db.session.remove()
+ ci_relations = CIRelation.get_by(to_dict=False)
+ relations = dict()
+ for cr in ci_relations:
+ relations.setdefault(cr.first_ci_id, {}).update({cr.second_ci_id: cr.second_ci.type_id})
+ for i in relations:
+ relations[i] = json.dumps(relations[i])
+ if relations:
+ rd.create_or_update(relations, REDIS_PREFIX_CI_RELATION)
+
if current_app.config.get("USE_ES"):
from api.extensions import es
from api.models.cmdb import Attribute
@@ -83,15 +92,6 @@ def cmdb_init_cache():
else:
rd.create_or_update({ci.id: json.dumps(ci_dict)}, REDIS_PREFIX_CI)
- ci_relations = CIRelation.get_by(to_dict=False)
- relations = dict()
- for cr in ci_relations:
- relations.setdefault(cr.first_ci_id, {}).update({cr.second_ci_id: cr.second_ci.type_id})
- for i in relations:
- relations[i] = json.dumps(relations[i])
- if relations:
- rd.create_or_update(relations, REDIS_PREFIX_CI_RELATION)
-
db.session.remove()
diff --git a/cmdb-api/api/lib/cmdb/search/ci/db/search.py b/cmdb-api/api/lib/cmdb/search/ci/db/search.py
index b9a9f75..48e2fb9 100644
--- a/cmdb-api/api/lib/cmdb/search/ci/db/search.py
+++ b/cmdb-api/api/lib/cmdb/search/ci/db/search.py
@@ -95,7 +95,7 @@ class Search(object):
for _v in new_v:
ci_type = CITypeCache.get(_v)
- if len(new_v) == 1 and not self.sort and ci_type.default_order_attr:
+ if len(new_v) == 1 and not self.sort and ci_type and ci_type.default_order_attr:
self.sort = ci_type.default_order_attr
if ci_type is not None:
diff --git a/cmdb-api/api/lib/common_setting/acl.py b/cmdb-api/api/lib/common_setting/acl.py
index 45af93b..163a373 100644
--- a/cmdb-api/api/lib/common_setting/acl.py
+++ b/cmdb-api/api/lib/common_setting/acl.py
@@ -41,7 +41,8 @@ class ACLManager(object):
def get_all_roles(self):
numfound, roles = RoleCRUD.search(
None, self.app_name, 1, 999999, True, True, False)
- return roles
+
+ return [i.to_dict() for i in roles]
def remove_user_from_role(self, user_rid, payload):
app_id = self.app_name
diff --git a/cmdb-api/api/models/cmdb.py b/cmdb-api/api/models/cmdb.py
index 0d42c6c..e1693cb 100644
--- a/cmdb-api/api/models/cmdb.py
+++ b/cmdb-api/api/models/cmdb.py
@@ -444,7 +444,7 @@ class AutoDiscoveryCIType(Model):
__tablename__ = "c_ad_ci_types"
type_id = db.Column(db.Integer, db.ForeignKey('c_ci_types.id'))
- adr_id = db.Column(db.Integer, db.ForeignKey('c_ad_ci_types.id'))
+ adr_id = db.Column(db.Integer, db.ForeignKey('c_ad_rules.id'))
attributes = db.Column(db.JSON) # {ad_key: cmdb_key}
diff --git a/cmdb-api/api/models/common_setting.py b/cmdb-api/api/models/common_setting.py
index 6c2fccc..741f664 100644
--- a/cmdb-api/api/models/common_setting.py
+++ b/cmdb-api/api/models/common_setting.py
@@ -1,3 +1,5 @@
+# -*- coding:utf-8 -*-
+
from api.extensions import db
from api.lib.database import Model, TimestampMixin, SoftDeleteMixin, CRUDMixin
diff --git a/cmdb-api/settings.example.py b/cmdb-api/settings.example.py
index b28c568..a1cee7e 100644
--- a/cmdb-api/settings.example.py
+++ b/cmdb-api/settings.example.py
@@ -58,7 +58,12 @@ DEFAULT_MAIL_SENDER = ''
CELERY_RESULT_BACKEND = "redis://127.0.0.1:6379/2"
BROKER_URL = 'redis://127.0.0.1:6379/2'
BROKER_VHOST = '/'
-
+ONCE = {
+ 'backend': 'celery_once.backends.Redis',
+ 'settings': {
+ 'url': BROKER_URL,
+ }
+}
# # SSO
CAS_SERVER = "http://sso.xxx.com"
diff --git a/docker-compose.yml b/docker-compose.yml
index 3038861..0a8e187 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -2,7 +2,7 @@ version: '3.5'
services:
cmdb-db:
- image: registry.cn-qingdao.aliyuncs.com/pycook/cmdb-db:1.0
+ image: registry.cn-hangzhou.aliyuncs.com/veops/cmdb-db:3.0
container_name: cmdb-db
environment:
TZ: Asia/Shanghai
@@ -12,81 +12,55 @@ services:
MYSQL_PASSWORD: '123456'
volumes:
- db-data:/var/lib/mysql
- - ./docs/cmdb_en.sql:/docker-entrypoint-initdb.d/cmdb.sql
+ - ./docs/mysqld.cnf:/etc/mysql/conf.d/mysqld.cnf
+ - ./docs/cmdb.sql:/docker-entrypoint-initdb.d/cmdb.sql
networks:
new:
aliases:
- mysql
+ ports:
+ - '23306:3306'
cmdb-cache:
- image: registry.cn-qingdao.aliyuncs.com/pycook/cmdb-cache:1.0
+ image: registry.cn-hangzhou.aliyuncs.com/veops/cmdb-cache:3.0
container_name: cmdb-cache
networks:
new:
aliases:
- redis
- cmdb-search:
- image: registry.cn-qingdao.aliyuncs.com/pycook/cmdb-search:1.2
-# build:
-# context: .
-# target: cmdb-search
- container_name: cmdb-search
- environment:
- - discovery.type=single-node
- - cluster.name=docker-cluster
- - bootstrap.memory_lock=true
- - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- ulimits:
- memlock:
- soft: -1
- hard: -1
- nofile:
- soft: 65536
- hard: 65536
- volumes:
- - esdata:/usr/share/elasticsearch/data
- ports:
- - 9200:9200
- networks:
- new:
- aliases:
- - cmdb-search
-
cmdb-api:
- image: registry.cn-qingdao.aliyuncs.com/pycook/cmdb-api:2.2
+ image: registry.cn-hangzhou.aliyuncs.com/veops/cmdb-api:3.0
# build:
# context: .
# target: cmdb-api
container_name: cmdb-api
environment:
TZ: Asia/Shanghai
- WAIT_HOSTS: cmdb-db:3306, cmdb-cache:6379, cmdb-search:9200
+ WAIT_HOSTS: cmdb-db:3306, cmdb-cache:6379
command:
- /bin/sh
- -c
- |
- sed -i "s#USE_ES = False#USE_ES = True#g" settings.py
sed -i "s#USE_ACL = False#USE_ACL = True#g" settings.py
- sed -i "s#ES_HOST = '127.0.0.1'#ES_HOST = 'cmdb-search'#g" settings.py
/wait
sleep 5
gunicorn --workers=3 autoapp:app -b 0.0.0.0:5000 -D
- flask init-cache
- flask init-acl
+ flask cmdb-init-cache
+ flask cmdb-init-acl
- celery worker -A celery_worker.celery -E -Q cmdb_async --concurrency=1
+ celery worker -A celery_worker.celery -E -Q one_cmdb_async --concurrency=2 -D
+ celery worker -A celery_worker.celery -E -Q acl_async --concurrency=2
depends_on:
- cmdb-db
- cmdb-cache
- - cmdb-search
networks:
new:
aliases:
- cmdb-api
cmdb-ui:
- image: registry.cn-qingdao.aliyuncs.com/pycook/cmdb-ui:2.2
+ image: registry.cn-hangzhou.aliyuncs.com/veops/cmdb-ui:3.0
# build:
# context: .
# target: cmdb-ui
@@ -112,7 +86,6 @@ services:
volumes:
db-data:
- esdata:
networks:
new:
diff --git a/docs/mysqld.cnf b/docs/mysqld.cnf
new file mode 100644
index 0000000..51b8b61
--- /dev/null
+++ b/docs/mysqld.cnf
@@ -0,0 +1,55 @@
+# Copyright (c) 2014, 2016, Oracle and/or its affiliates. All rights reserved.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License, version 2.0,
+# as published by the Free Software Foundation.
+#
+# This program is also distributed with certain software (including
+# but not limited to OpenSSL) that is licensed under separate terms,
+# as designated in a particular file or component or in included license
+# documentation. The authors of MySQL hereby grant you an additional
+# permission to link the program and your derivative works with the
+# separately licensed software that they have included with MySQL.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License, version 2.0, for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+
+#
+# The MySQL Server configuration file.
+#
+# For explanations see
+# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
+
+[mysqld]
+character-set-server = utf8
+collation-server = utf8_unicode_ci
+skip-character-set-client-handshake
+pid-file = /var/run/mysqld/mysqld.pid
+socket = /var/run/mysqld/mysqld.sock
+datadir = /var/lib/mysql
+default-storage-engine=INNODB
+# Disabling symbolic-links is recommended to prevent assorted security risks
+skip-external-locking
+key_buffer_size=16M
+max_allowed_packet=4M
+table_open_cache=64
+sort_buffer_size=512K
+net_buffer_length=8K
+read_buffer_size=256K
+read_rnd_buffer_size=512K
+skip-name-resolve
+max_connections=1000
+slow_query_log = ON
+slow_query_log_file = /var/log/mysql_slow.log
+long_query_time = 1
+sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
+#log-error = /var/log/mysql/error.log
+# By default we only accept connections from localhost
+#bind-address = 127.0.0.1
+# Disabling symbolic-links is recommended to prevent assorted security risks
\ No newline at end of file