From 1b1b4ad1e4d833c4d2cd83e53d6fc609136f0bd0 Mon Sep 17 00:00:00 2001 From: yhlben Date: Thu, 13 Jun 2019 16:47:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8=20docker=20=E9=83=A8?= =?UTF-8?q?=E7=BD=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker/Dockerfile | 18 ++++++++++++++++++ docker/docker-compose.yml | 23 ++++++++++++++++++++++ package-lock.json | 16 +++++----------- package.json | 2 +- src/client/config/index.ts | 5 +---- src/nodeuii/config/index.ts | 9 ++++++++- src/nodeuii/utils/dbHelper.ts | 36 +++++++++++++++++++++++++++-------- 7 files changed, 84 insertions(+), 25 deletions(-) create mode 100644 docker/Dockerfile create mode 100644 docker/docker-compose.yml diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..e0c9e2e --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,18 @@ +FROM node + +LABEL maintainer = "yhlben " + +RUN rm -rf /app +RUN mkdir /app + +WORKDIR /app + +COPY . /app + +RUN npm install +RUN npm run build +RUN mv ./dist/* ./ + +EXPOSE 8082 + +CMD BUILD_ENV=docker node app.js diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..da3056d --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,23 @@ +version: '3.7' + +services: + database: + image: mongo + restart: always + volumes: + - ~/data/db:/data/db + networks: + - webapp-network + + web: + image: yhlben/cdfang-spider + depends_on: + - database + ports: + - 8082:8082 + networks: + - webapp-network + +networks: + webapp-network: + driver: bridge diff --git a/package-lock.json b/package-lock.json index 1b4baea..d614678 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "cdfang-spider", - "version": "2.9.17", + "version": "2.10.17", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -3175,15 +3175,6 @@ "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", "dev": true }, - "axios": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz", - "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", - "requires": { - "follow-redirects": "^1.3.0", - "is-buffer": "^1.1.5" - } - }, "axobject-query": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", @@ -7023,6 +7014,7 @@ "version": "1.7.0", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "dev": true, "requires": { "debug": "^3.2.6" }, @@ -7031,6 +7023,7 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, "requires": { "ms": "^2.1.1" } @@ -7038,7 +7031,8 @@ "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true } } }, diff --git a/package.json b/package.json index 675f657..c65de82 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cdfang-spider", - "version": "2.10.17", + "version": "2.11.17", "description": "成都房协网爬虫,定时爬取最新房源,可视化数据分析。", "main": "index.js", "scripts": { diff --git a/src/client/config/index.ts b/src/client/config/index.ts index 5548edc..6845d80 100644 --- a/src/client/config/index.ts +++ b/src/client/config/index.ts @@ -1,10 +1,7 @@ import ApolloClient from 'apollo-boost'; // 默认为当前域名 -let serverDomain = ''; -if (process.env.NODE_ENV === 'production') { - serverDomain = 'https://cdfangyuan.cn'; -} +const serverDomain = ''; function getGraphqlClient(): ApolloClient<{}> { return new ApolloClient({ diff --git a/src/nodeuii/config/index.ts b/src/nodeuii/config/index.ts index 18027bc..9b2a5c1 100644 --- a/src/nodeuii/config/index.ts +++ b/src/nodeuii/config/index.ts @@ -1,4 +1,11 @@ +const mongoDBHost = + process.env.BUILD_ENV === 'docker' + ? 'mongodb://database/test' + : 'mongodb://localhost/test'; + export default { spiderDomain: 'http://zw.cdzj.chengdu.gov.cn', - serverPort: 8082 + serverPort: 8082, + // 和 docker-compose 里的 mongo 容器相对应 + databaseUrl: mongoDBHost }; diff --git a/src/nodeuii/utils/dbHelper.ts b/src/nodeuii/utils/dbHelper.ts index 7bf9a02..d6bd94b 100644 --- a/src/nodeuii/utils/dbHelper.ts +++ b/src/nodeuii/utils/dbHelper.ts @@ -1,23 +1,43 @@ /* eslint-disable no-console */ import mongoose from 'mongoose'; +import config from '../config/index'; + +let connectTimeOut: NodeJS.Timeout; const DbHelper = { + connectTimes: 8, connect(): mongoose.Mongoose { - mongoose.connect('mongodb://localhost/test', { - useNewUrlParser: true, - // 弃用警告 https://mongoosejs.com/docs/deprecations.html#-findandmodify- - useFindAndModify: false - }); + DbHelper.mongooseConnect(); const db = mongoose.connection; - db.on('error', console.error.bind(console, '连接mongodb失败。')); - db.once('open', () => { - console.warn('连接mongodb成功。'); + db.once('error', () => { + console.error('连接 mongodb 失败。'); + connectTimeOut = setInterval(() => { + if (DbHelper.connectTimes > 0) { + console.log(`正在重连 mongodb,剩余次数 ${DbHelper.connectTimes}。`); + DbHelper.connectTimes -= 1; + DbHelper.mongooseConnect(); + } else { + console.log('重连 mongodb 失败。'); + clearTimeout(connectTimeOut); + } + }, 8000); + }); + db.on('open', () => { + console.log('连接 mongodb 成功。'); + clearTimeout(connectTimeOut); }); // 单例模式 DbHelper.connect = () => { return mongoose; }; return mongoose; + }, + mongooseConnect(): void { + mongoose.connect(config.databaseUrl, { + useNewUrlParser: true, + // 弃用警告 https://mongoosejs.com/docs/deprecations.html#-findandmodify- + useFindAndModify: false + }); } };