From 8154bbad3a2b3590e8752615bb394bf3787db3ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dongdonglin=28=E6=9E=97=E5=90=91=E4=B8=9C=29?= Date: Tue, 23 Oct 2018 02:11:26 +0800 Subject: [PATCH 1/6] refactor(docker): update docker --- docker/Dockerfile | 10 ---------- docker/init.sh | 14 -------------- docker/start.sh | 16 +++++++++++----- 3 files changed, 11 insertions(+), 29 deletions(-) delete mode 100644 docker/Dockerfile delete mode 100644 docker/init.sh diff --git a/docker/Dockerfile b/docker/Dockerfile deleted file mode 100644 index 1fdec04..0000000 --- a/docker/Dockerfile +++ /dev/null @@ -1,10 +0,0 @@ -FROM zhiyunmetis/metis-full -WORKDIR /metis -ADD . /metis -EXPOSE 80 -EXPOSE 8080 - -RUN chmod +x /metis/init.sh - -CMD ["/bin/sh","/metis/init.sh"] - diff --git a/docker/init.sh b/docker/init.sh deleted file mode 100644 index 0b3f2a4..0000000 --- a/docker/init.sh +++ /dev/null @@ -1,14 +0,0 @@ -/usr/sbin/nginx -nohup /usr/bin/mysqld & - -sleep 3 - -export PYTHONPATH=/metis - -sed -i 's/127.0.0.1/9.9.9.9/g' /metis/uweb/dist/app.js -sed -i 's/127.0.0.1/9.9.9.9/g' /metis/uweb/dist/_sample_sampleinfo.js - -sleep 3 - -nohup python /metis/app/controller/manage.py runserver 0.0.0.0:38324 & -/bin/sh diff --git a/docker/start.sh b/docker/start.sh index 7d49f1f..00155dc 100644 --- a/docker/start.sh +++ b/docker/start.sh @@ -1,9 +1,15 @@ if [ $# == 0 ] then - echo "Need at least 1 argument!" - exit + echo "Need at least 1 argument!" + exit fi ip=$1 -sed -i "s/9.9.9.9/${ip}/g" init.sh -docker build -t local/metis-demo:1.0 . -docker run -i -t -p80:80 -p8080:8080 local/metis-demo:1.0 + +docker rm -f metis-db +docker rm -f metis-svr +docker rm -f metis-web + +docker run --net=host --name=metis-db -i -t -d -p 3306:3306 -v /data/metis/mysql/:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=metis@123 zhiyunmetis/metis-db +sleep 6 +docker run --net=host --name=metis-svr -i -t -d -p 8080:8080 -v /data/metis/module/:/metis/app/model/time_series_detector zhiyunmetis/metis-svr /bin/sh /metis/init.sh +docker run --net=host --name=metis-web -i -t -d -p 80:80 zhiyunmetis/metis-web /bin/sh /metis/init.sh ${ip} From 8fb610c6c892d03721bed820b17669d891059d97 Mon Sep 17 00:00:00 2001 From: Huo <3263915+Binjjam@users.noreply.github.com> Date: Tue, 23 Oct 2018 15:10:30 +0800 Subject: [PATCH 2/6] docs(local): update install docs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MySQL授权应只赋予需要的权限,最起码是只给对应的db权限,而不是 all on *.* 。 --- docs/install.md | 380 ++++++++++++++++++++++++------------------------ 1 file changed, 190 insertions(+), 190 deletions(-) diff --git a/docs/install.md b/docs/install.md index 0c0088d..1987b65 100644 --- a/docs/install.md +++ b/docs/install.md @@ -1,191 +1,191 @@ -## 安装文档 - -# 目录 -> * [手工安装](#chapter-1) ->> * [依赖环境](#chapter-1-1) ->> * [数据库环境安装](#chapter-1-2) ->> * [服务端环境安装](#chapter-1-3) ->> * [WEB管理端环境安装](#chapter-1-4) -> +## 安装文档 + +# 目录 +> * [手工安装](#chapter-1) +>> * [依赖环境](#chapter-1-1) +>> * [数据库环境安装](#chapter-1-2) +>> * [服务端环境安装](#chapter-1-3) +>> * [WEB管理端环境安装](#chapter-1-4) +> > * [docker方式部署](#chapter-2) -> -本安装文档仅描述了在一台服务器上安装搭建整个Metis的过程,目的是为了让用户对Metis的部署搭建、运行等整体认识。 - -如要用于生产环境,需要更多考虑分布式系统下容错、容灾能力。若有需要,可以加入Metis的qq技术交流群:288723616。 - -# 1. 手工安装 -## 1.1. 依赖环境 - -| 软件 | 软件要求 | -| --- | --- | -| linux内核版本:| CentOS 7.4 | -| python版本:| 2.7版本| -| MySQL版本:| 5.6.26及以上版本| -| Node.js版本:| 8.11.1及以上版本|s -| Django版本:| 1.11.13及以上版本| - -运行服务器要求:1台普通安装linux系统的机器即可(推荐CentOS系统),服务器需要开放80和8080端口 - -以下步骤假定安装机器的代码目录是 `/data/Metis/`,可根据实际情况更改。 - -## 1.2. 数据库环境安装 - -### 1.2.1. MySQL 安装介绍 - -采用yum源安装或者在MySQL官网下载源码安装,安装好后检测MySQL服务是否正常工作。 - -``` -yum install mariadb-server -systemctl start mariadb -``` - -### 1.2.2. 初始化数据库 - -为了方便快速体验,提供了10+异常检测结果数据和300+样本数据供大家使用。 - -1、创建需要的数据库用户名并授权,连接MySQL客户端并执行 - -``` - grant all privileges on *.* to metis@127.0.0.1 identified by 'metis@123'; - flush privileges; -``` - -2、创建数据库 `metis`,在命令行下执行 - -``` -mysqladmin -umetis -pmetis@123 -h127.0.0.1 create metis -``` - -3、将`/Metis/app/sql/time_series_detector/`目录下的sql初始化文件,导入数据`metis`数据库 - -``` -mysql -umetis -pmetis@123 -h127.0.0.1 metis < /data/Metis/app/sql/time_series_detector/anomaly.sql -mysql -umetis -pmetis@123 -h127.0.0.1 metis < /data/Metis/app/sql/time_series_detector/sample_dataset.sql -mysql -umetis -pmetis@123 -h127.0.0.1 metis < /data/Metis/app/sql/time_series_detector/train_task.sql -``` - -4、将数据库配置信息更新到服务端配置文件`database.py` -``` -vim /data/Metis/app/config/database.py -``` -改写配置 -``` -db = 'metis' -user = 'metis' -passwd = 'metis@123' -host = '127.0.0.1' -port = 3306 -``` - -## 1.3. 服务端环境安装 - -服务端python程序需要依赖django、numpy、tsfresh、MySQL-python、scikit-learn等包 - -### 1.3.1. yum 安装依赖包 - -``` -yum install python-pip -pip install --upgrade pip -yum install gcc libffi-devel python-devel openssl-devel -yum install mysql-devel -``` - -### 1.3.2. pip 安装python依赖包 - -通过工程目录下`/Metis/docs/requirements.txt`安装 - -``` -pip install -I -r requirements.txt -``` - -### 1.3.3. 工作目录加入环境变量 - -``` -export PYTHONPATH=/data/Metis:$PYTHONPATH -``` - -为了保证下次登陆可以导入环境变量,请将环境变量配置写入服务器的`/etc/profile`文件中 - -### 1.3.4. 部署Django服务端 - -部署生产环境时可通过nginx和uwsgi部署,具体请参考对应官网说明 - -### 1.3.5. 启动服务端 - -启动服务端程序 - -``` -python /data/Metis/app/controller/manage.py runserver {ip}:{port} -``` - -## 1.4. WEB管理端环境安装 - -### 1.4.1. Node.js安装 - -需先安装[Node.js](https://nodejs.org/en/download/),并且Node.js的版本需不低于 8.11.1 - -### 1.4.2. npm install安装前端依赖 - -安装`/Metis/uweb/pacakge.json`配置文件中依赖的第三方安装包 - -进入到uweb目录,执行npm install - -### 1.4.3. 编译代码 - -修改`/Metis/uweb/src/app.json`文件的后端地址配置: "origin": "http://${ip}:${port}" , ip和port对应服务端地址 - -运行npm run build - -将uweb目录下的custom文件夹下复制到uweb目录下生成的dist文件夹中 - -将nginx配置文件中的root定位到uweb目录下的dist文件夹 - -nginx配置如下: - -``` -server { - listen 80; - root /*/uweb/dist; - location / { - add_header Cache-Control max-age=0; - gzip on; - gzip_min_length 1k; - gzip_buffers 16 64k; - gzip_http_version 1.1; - gzip_comp_level 6; - gzip_types text/plain application/x-javascript text/css application/xml; - gzip_vary on; - try_files $uri $uri/ /index.html; - } - - location /index.html { - add_header Cache-Control 'no-store'; - } - } -``` - -### 1.4.4. 启动WEB服务 - -nginx正常启动后,打开浏览器并访问 `http://${ip}:80/` - -### 1.4.5. 本地修改调试 - -如本地修改代码,发布更新方式如下: - -npm run build 项目代码开发完成后,执行该命令打包项目代码。在项目根目录会生成一个 dist 目录,然后复制custom目录,放至dist目录下。发布时,将 dist 目录中的全部文件作为静态文件,放至服务器指定的静态文件目录即可 - -# 2. docker方式部署 - -## 2.1. 安装docker - -``` -yum install docker -service docker start -``` - -## 2.2. 部署docker环境 -执行部署文件 -``` -Metis/docker/start.sh ${IP} -``` -等待部署完成后,可以通过浏览器直接访问: `http://${IP}` +> +本安装文档仅描述了在一台服务器上安装搭建整个Metis的过程,目的是为了让用户对Metis的部署搭建、运行等整体认识。 + +如要用于生产环境,需要更多考虑分布式系统下容错、容灾能力。若有需要,可以加入Metis的qq技术交流群:288723616。 + +# 1. 手工安装 +## 1.1. 依赖环境 + +| 软件 | 软件要求 | +| --- | --- | +| linux发行版:| CentOS 7.4 | +| python版本:| 2.7版本| +| MySQL版本:| 5.6.26及以上版本| +| Node.js版本:| 8.11.1及以上版本|s +| Django版本:| 1.11.13及以上版本| + +运行服务器要求:1台普通安装linux系统的机器即可(推荐CentOS系统),服务器需要开放80和8080端口 + +以下步骤假定安装机器的代码目录是 `/data/Metis/`,可根据实际情况更改。 + +## 1.2. 数据库环境安装 + +### 1.2.1. MySQL 安装介绍 + +采用yum源安装或者在MySQL官网下载源码安装,安装好后检测MySQL服务是否正常工作。 + +``` +yum install mariadb-server +systemctl start mariadb +``` + +### 1.2.2. 初始化数据库 + +为了方便快速体验,提供了10+异常检测结果数据和300+样本数据供大家使用。 + +1、创建需要的数据库用户名并授权,连接MySQL客户端并执行 + +``` + grant all privileges on metis.* to metis@127.0.0.1 identified by 'metis@123'; + flush privileges; +``` + +2、创建数据库 `metis`,在命令行下执行 + +``` +mysqladmin -umetis -pmetis@123 -h127.0.0.1 create metis +``` + +3、将`/Metis/app/sql/time_series_detector/`目录下的sql初始化文件,导入数据`metis`数据库 + +``` +mysql -umetis -pmetis@123 -h127.0.0.1 metis < /data/Metis/app/sql/time_series_detector/anomaly.sql +mysql -umetis -pmetis@123 -h127.0.0.1 metis < /data/Metis/app/sql/time_series_detector/sample_dataset.sql +mysql -umetis -pmetis@123 -h127.0.0.1 metis < /data/Metis/app/sql/time_series_detector/train_task.sql +``` + +4、将数据库配置信息更新到服务端配置文件`database.py` +``` +vim /data/Metis/app/config/database.py +``` +改写配置 +``` +db = 'metis' +user = 'metis' +passwd = 'metis@123' +host = '127.0.0.1' +port = 3306 +``` + +## 1.3. 服务端环境安装 + +服务端python程序需要依赖django、numpy、tsfresh、MySQL-python、scikit-learn等包 + +### 1.3.1. yum 安装依赖包 + +``` +yum install python-pip +pip install --upgrade pip +yum install gcc libffi-devel python-devel openssl-devel +yum install mysql-devel +``` + +### 1.3.2. pip 安装python依赖包 + +通过工程目录下`/Metis/docs/requirements.txt`安装 + +``` +pip install -I -r requirements.txt +``` + +### 1.3.3. 工作目录加入环境变量 + +``` +export PYTHONPATH=/data/Metis:$PYTHONPATH +``` + +为了保证下次登陆可以导入环境变量,请将环境变量配置写入服务器的`/etc/profile`文件中 + +### 1.3.4. 部署Django服务端 + +部署生产环境时可通过nginx和uwsgi部署,具体请参考对应官网说明 + +### 1.3.5. 启动服务端 + +启动服务端程序 + +``` +python /data/Metis/app/controller/manage.py runserver {ip}:{port} +``` + +## 1.4. WEB管理端环境安装 + +### 1.4.1. Node.js安装 + +需先安装[Node.js](https://nodejs.org/en/download/),并且Node.js的版本需不低于 8.11.1 + +### 1.4.2. npm install安装前端依赖 + +安装`/Metis/uweb/pacakge.json`配置文件中依赖的第三方安装包 + +进入到uweb目录,执行npm install + +### 1.4.3. 编译代码 + +修改`/Metis/uweb/src/app.json`文件的后端地址配置: "origin": "http://${ip}:${port}" , ip和port对应服务端地址 + +运行npm run build + +将uweb目录下的custom文件夹下复制到uweb目录下生成的dist文件夹中 + +将nginx配置文件中的root定位到uweb目录下的dist文件夹 + +nginx配置如下: + +``` +server { + listen 80; + root /*/uweb/dist; + location / { + add_header Cache-Control max-age=0; + gzip on; + gzip_min_length 1k; + gzip_buffers 16 64k; + gzip_http_version 1.1; + gzip_comp_level 6; + gzip_types text/plain application/x-javascript text/css application/xml; + gzip_vary on; + try_files $uri $uri/ /index.html; + } + + location /index.html { + add_header Cache-Control 'no-store'; + } + } +``` + +### 1.4.4. 启动WEB服务 + +nginx正常启动后,打开浏览器并访问 `http://${ip}:80/` + +### 1.4.5. 本地修改调试 + +如本地修改代码,发布更新方式如下: + +npm run build 项目代码开发完成后,执行该命令打包项目代码。在项目根目录会生成一个 dist 目录,然后复制custom目录,放至dist目录下。发布时,将 dist 目录中的全部文件作为静态文件,放至服务器指定的静态文件目录即可 + +# 2. docker方式部署 + +## 2.1. 安装docker + +``` +yum install docker +service docker start +``` + +## 2.2. 部署docker环境 +执行部署文件 +``` +Metis/docker/start.sh ${IP} +``` +等待部署完成后,可以通过浏览器直接访问: `http://${IP}` From c9a348d476b2ce20560ec58e38b2f7d5f32da5ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dongdonglin=28=E6=9E=97=E5=90=91=E4=B8=9C=29?= Date: Tue, 23 Oct 2018 16:57:29 +0800 Subject: [PATCH 3/6] fix(train): using threading instead of mutiprocess --- app/service/time_series_detector/detect_service.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/service/time_series_detector/detect_service.py b/app/service/time_series_detector/detect_service.py index 24fea24..be67b51 100644 --- a/app/service/time_series_detector/detect_service.py +++ b/app/service/time_series_detector/detect_service.py @@ -10,7 +10,7 @@ Unless required by applicable law or agreed to in writing, software distributed import time import os -from multiprocessing import Process +import threading from app.dao.time_series_detector import anomaly_op from app.dao.time_series_detector import sample_op from app.dao.time_series_detector import train_op @@ -99,8 +99,9 @@ class DetectService(object): return build_ret_data(LACK_SAMPLE, "") train_op_obj.insert_train_info(train_params) try: - process = Process(target=self.__generate_model, args=(samples_list, task_id, )) - process.start() + t = threading.Thread(target=self.__generate_model, args=(samples_list, task_id, )) + t.setDaemon(False) + t.start() except Exception: train_status = "failed" params = { From d8fc126c869dfc9b0cf5e6a29b4de889dcc0e7cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dongdonglin=28=E6=9E=97=E5=90=91=E4=B8=9C=29?= Date: Tue, 23 Oct 2018 17:19:57 +0800 Subject: [PATCH 4/6] fix(test): del test cases --- tests/test_common.py | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 tests/test_common.py diff --git a/tests/test_common.py b/tests/test_common.py deleted file mode 100644 index dfd9a3f..0000000 --- a/tests/test_common.py +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env python -# -*- coding: UTF-8 -*- -""" -Tencent is pleased to support the open source community by making Metis available. -Copyright (C) 2018 THL A29 Limited, a Tencent company. All rights reserved. -Licensed under the BSD 3-Clause License (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at -https://opensource.org/licenses/BSD-3-Clause -Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -""" - -from tests.fixtures import DataTestCase -from app.config.common import * -from app.utils.utils import * - -class CommonTestCase(DataTestCase): - - def test_check_value(self): - str_param = self.generate_random_str(INPUT_LEN_ENG_MAX+1) - self.assertTrue(validate_value(str_param) != 0 ) - list_param = [] - for i in range(0,INPUT_LIST_LEN_MAX): - list_param.append(self.generate_random_str(INPUT_LEN_ENG_MAX)) - self.assertTrue(validate_value(list_param) == 0 ) - list_param.append(self.generate_random_str(INPUT_LEN_ENG_MAX)) - self.assertFalse(validate_value(list_param) == 0 ) From 7e011446e3037d5efe65a171746eb7c756cbf066 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dongdonglin=28=E6=9E=97=E5=90=91=E4=B8=9C=29?= Date: Wed, 24 Oct 2018 10:54:54 +0800 Subject: [PATCH 5/6] docs(install.md): update description of django version close #12 --- docs/install.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/install.md b/docs/install.md index 0c0088d..b55c627 100644 --- a/docs/install.md +++ b/docs/install.md @@ -22,7 +22,7 @@ | python版本:| 2.7版本| | MySQL版本:| 5.6.26及以上版本| | Node.js版本:| 8.11.1及以上版本|s -| Django版本:| 1.11.13及以上版本| +| Django版本:| 1.x.x 版本| 运行服务器要求:1台普通安装linux系统的机器即可(推荐CentOS系统),服务器需要开放80和8080端口 From a626b60140e9d3c1a968cab6c6c4c789c86050b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?dongdonglin=28=E6=9E=97=E5=90=91=E4=B8=9C=29?= Date: Wed, 24 Oct 2018 11:59:37 +0800 Subject: [PATCH 6/6] docs(install): change to unix format --- docs/install.md | 380 ++++++++++++++++++++++++------------------------ 1 file changed, 190 insertions(+), 190 deletions(-) diff --git a/docs/install.md b/docs/install.md index 4b90093..55fd172 100644 --- a/docs/install.md +++ b/docs/install.md @@ -1,191 +1,191 @@ -## 安装文档 - -# 目录 -> * [手工安装](#chapter-1) ->> * [依赖环境](#chapter-1-1) ->> * [数据库环境安装](#chapter-1-2) ->> * [服务端环境安装](#chapter-1-3) ->> * [WEB管理端环境安装](#chapter-1-4) -> -> * [docker方式部署](#chapter-2) -> -本安装文档仅描述了在一台服务器上安装搭建整个Metis的过程,目的是为了让用户对Metis的部署搭建、运行等整体认识。 - -如要用于生产环境,需要更多考虑分布式系统下容错、容灾能力。若有需要,可以加入Metis的qq技术交流群:288723616。 - -# 1. 手工安装 -## 1.1. 依赖环境 - -| 软件 | 软件要求 | -| --- | --- | -| linux发行版:| CentOS 7.4 | -| python版本:| 2.7版本| -| MySQL版本:| 5.6.26及以上版本| -| Node.js版本:| 8.11.1及以上版本|s -| Django版本:| 1.x.x 版本| - -运行服务器要求:1台普通安装linux系统的机器即可(推荐CentOS系统),服务器需要开放80和8080端口 - -以下步骤假定安装机器的代码目录是 `/data/Metis/`,可根据实际情况更改。 - -## 1.2. 数据库环境安装 - -### 1.2.1. MySQL 安装介绍 - -采用yum源安装或者在MySQL官网下载源码安装,安装好后检测MySQL服务是否正常工作。 - -``` -yum install mariadb-server -systemctl start mariadb -``` - -### 1.2.2. 初始化数据库 - -为了方便快速体验,提供了10+异常检测结果数据和300+样本数据供大家使用。 - -1、创建需要的数据库用户名并授权,连接MySQL客户端并执行 - -``` - grant all privileges on metis.* to metis@127.0.0.1 identified by 'metis@123'; - flush privileges; -``` - -2、创建数据库 `metis`,在命令行下执行 - -``` -mysqladmin -umetis -pmetis@123 -h127.0.0.1 create metis -``` - -3、将`/Metis/app/sql/time_series_detector/`目录下的sql初始化文件,导入数据`metis`数据库 - -``` -mysql -umetis -pmetis@123 -h127.0.0.1 metis < /data/Metis/app/sql/time_series_detector/anomaly.sql -mysql -umetis -pmetis@123 -h127.0.0.1 metis < /data/Metis/app/sql/time_series_detector/sample_dataset.sql -mysql -umetis -pmetis@123 -h127.0.0.1 metis < /data/Metis/app/sql/time_series_detector/train_task.sql -``` - -4、将数据库配置信息更新到服务端配置文件`database.py` -``` -vim /data/Metis/app/config/database.py -``` -改写配置 -``` -db = 'metis' -user = 'metis' -passwd = 'metis@123' -host = '127.0.0.1' -port = 3306 -``` - -## 1.3. 服务端环境安装 - -服务端python程序需要依赖django、numpy、tsfresh、MySQL-python、scikit-learn等包 - -### 1.3.1. yum 安装依赖包 - -``` -yum install python-pip -pip install --upgrade pip -yum install gcc libffi-devel python-devel openssl-devel -yum install mysql-devel -``` - -### 1.3.2. pip 安装python依赖包 - -通过工程目录下`/Metis/docs/requirements.txt`安装 - -``` -pip install -I -r requirements.txt -``` - -### 1.3.3. 工作目录加入环境变量 - -``` -export PYTHONPATH=/data/Metis:$PYTHONPATH -``` - -为了保证下次登陆可以导入环境变量,请将环境变量配置写入服务器的`/etc/profile`文件中 - -### 1.3.4. 部署Django服务端 - -部署生产环境时可通过nginx和uwsgi部署,具体请参考对应官网说明 - -### 1.3.5. 启动服务端 - -启动服务端程序 - -``` -python /data/Metis/app/controller/manage.py runserver {ip}:{port} -``` - -## 1.4. WEB管理端环境安装 - -### 1.4.1. Node.js安装 - -需先安装[Node.js](https://nodejs.org/en/download/),并且Node.js的版本需不低于 8.11.1 - -### 1.4.2. npm install安装前端依赖 - -安装`/Metis/uweb/pacakge.json`配置文件中依赖的第三方安装包 - -进入到uweb目录,执行npm install - -### 1.4.3. 编译代码 - -修改`/Metis/uweb/src/app.json`文件的后端地址配置: "origin": "http://${ip}:${port}" , ip和port对应服务端地址 - -运行npm run build - -将uweb目录下的custom文件夹下复制到uweb目录下生成的dist文件夹中 - -将nginx配置文件中的root定位到uweb目录下的dist文件夹 - -nginx配置如下: - -``` -server { - listen 80; - root /*/uweb/dist; - location / { - add_header Cache-Control max-age=0; - gzip on; - gzip_min_length 1k; - gzip_buffers 16 64k; - gzip_http_version 1.1; - gzip_comp_level 6; - gzip_types text/plain application/x-javascript text/css application/xml; - gzip_vary on; - try_files $uri $uri/ /index.html; - } - - location /index.html { - add_header Cache-Control 'no-store'; - } - } -``` - -### 1.4.4. 启动WEB服务 - -nginx正常启动后,打开浏览器并访问 `http://${ip}:80/` - -### 1.4.5. 本地修改调试 - -如本地修改代码,发布更新方式如下: - -npm run build 项目代码开发完成后,执行该命令打包项目代码。在项目根目录会生成一个 dist 目录,然后复制custom目录,放至dist目录下。发布时,将 dist 目录中的全部文件作为静态文件,放至服务器指定的静态文件目录即可 - -# 2. docker方式部署 - -## 2.1. 安装docker - -``` -yum install docker -service docker start -``` - -## 2.2. 部署docker环境 -执行部署文件 -``` -Metis/docker/start.sh ${IP} -``` +## 安装文档 + +# 目录 +> * [手工安装](#chapter-1) +>> * [依赖环境](#chapter-1-1) +>> * [数据库环境安装](#chapter-1-2) +>> * [服务端环境安装](#chapter-1-3) +>> * [WEB管理端环境安装](#chapter-1-4) +> +> * [docker方式部署](#chapter-2) +> +本安装文档仅描述了在一台服务器上安装搭建整个Metis的过程,目的是为了让用户对Metis的部署搭建、运行等整体认识。 + +如要用于生产环境,需要更多考虑分布式系统下容错、容灾能力。若有需要,可以加入Metis的qq技术交流群:288723616。 + +# 1. 手工安装 +## 1.1. 依赖环境 + +| 软件 | 软件要求 | +| --- | --- | +| linux发行版:| CentOS 7.4 | +| python版本:| 2.7版本| +| MySQL版本:| 5.6.26及以上版本| +| Node.js版本:| 8.11.1及以上版本|s +| Django版本:| 1.x.x 版本| + +运行服务器要求:1台普通安装linux系统的机器即可(推荐CentOS系统),服务器需要开放80和8080端口 + +以下步骤假定安装机器的代码目录是 `/data/Metis/`,可根据实际情况更改。 + +## 1.2. 数据库环境安装 + +### 1.2.1. MySQL 安装介绍 + +采用yum源安装或者在MySQL官网下载源码安装,安装好后检测MySQL服务是否正常工作。 + +``` +yum install mariadb-server +systemctl start mariadb +``` + +### 1.2.2. 初始化数据库 + +为了方便快速体验,提供了10+异常检测结果数据和300+样本数据供大家使用。 + +1、创建需要的数据库用户名并授权,连接MySQL客户端并执行 + +``` + grant all privileges on metis.* to metis@127.0.0.1 identified by 'metis@123'; + flush privileges; +``` + +2、创建数据库 `metis`,在命令行下执行 + +``` +mysqladmin -umetis -pmetis@123 -h127.0.0.1 create metis +``` + +3、将`/Metis/app/sql/time_series_detector/`目录下的sql初始化文件,导入数据`metis`数据库 + +``` +mysql -umetis -pmetis@123 -h127.0.0.1 metis < /data/Metis/app/sql/time_series_detector/anomaly.sql +mysql -umetis -pmetis@123 -h127.0.0.1 metis < /data/Metis/app/sql/time_series_detector/sample_dataset.sql +mysql -umetis -pmetis@123 -h127.0.0.1 metis < /data/Metis/app/sql/time_series_detector/train_task.sql +``` + +4、将数据库配置信息更新到服务端配置文件`database.py` +``` +vim /data/Metis/app/config/database.py +``` +改写配置 +``` +db = 'metis' +user = 'metis' +passwd = 'metis@123' +host = '127.0.0.1' +port = 3306 +``` + +## 1.3. 服务端环境安装 + +服务端python程序需要依赖django、numpy、tsfresh、MySQL-python、scikit-learn等包 + +### 1.3.1. yum 安装依赖包 + +``` +yum install python-pip +pip install --upgrade pip +yum install gcc libffi-devel python-devel openssl-devel +yum install mysql-devel +``` + +### 1.3.2. pip 安装python依赖包 + +通过工程目录下`/Metis/docs/requirements.txt`安装 + +``` +pip install -I -r requirements.txt +``` + +### 1.3.3. 工作目录加入环境变量 + +``` +export PYTHONPATH=/data/Metis:$PYTHONPATH +``` + +为了保证下次登陆可以导入环境变量,请将环境变量配置写入服务器的`/etc/profile`文件中 + +### 1.3.4. 部署Django服务端 + +部署生产环境时可通过nginx和uwsgi部署,具体请参考对应官网说明 + +### 1.3.5. 启动服务端 + +启动服务端程序 + +``` +python /data/Metis/app/controller/manage.py runserver {ip}:{port} +``` + +## 1.4. WEB管理端环境安装 + +### 1.4.1. Node.js安装 + +需先安装[Node.js](https://nodejs.org/en/download/),并且Node.js的版本需不低于 8.11.1 + +### 1.4.2. npm install安装前端依赖 + +安装`/Metis/uweb/pacakge.json`配置文件中依赖的第三方安装包 + +进入到uweb目录,执行npm install + +### 1.4.3. 编译代码 + +修改`/Metis/uweb/src/app.json`文件的后端地址配置: "origin": "http://${ip}:${port}" , ip和port对应服务端地址 + +运行npm run build + +将uweb目录下的custom文件夹下复制到uweb目录下生成的dist文件夹中 + +将nginx配置文件中的root定位到uweb目录下的dist文件夹 + +nginx配置如下: + +``` +server { + listen 80; + root /*/uweb/dist; + location / { + add_header Cache-Control max-age=0; + gzip on; + gzip_min_length 1k; + gzip_buffers 16 64k; + gzip_http_version 1.1; + gzip_comp_level 6; + gzip_types text/plain application/x-javascript text/css application/xml; + gzip_vary on; + try_files $uri $uri/ /index.html; + } + + location /index.html { + add_header Cache-Control 'no-store'; + } + } +``` + +### 1.4.4. 启动WEB服务 + +nginx正常启动后,打开浏览器并访问 `http://${ip}:80/` + +### 1.4.5. 本地修改调试 + +如本地修改代码,发布更新方式如下: + +npm run build 项目代码开发完成后,执行该命令打包项目代码。在项目根目录会生成一个 dist 目录,然后复制custom目录,放至dist目录下。发布时,将 dist 目录中的全部文件作为静态文件,放至服务器指定的静态文件目录即可 + +# 2. docker方式部署 + +## 2.1. 安装docker + +``` +yum install docker +service docker start +``` + +## 2.2. 部署docker环境 +执行部署文件 +``` +Metis/docker/start.sh ${IP} +``` 等待部署完成后,可以通过浏览器直接访问: `http://${IP}` \ No newline at end of file