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)**_ -![QQgroup](docs/qr_code.jpg) +![QQgroup](docs/qr_code.jpg) \ 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