2018-12-1lesson

Dec 1, 2018

最近继续服务修行

打造docker 容器守护

采用docker-compose 多重容器聚合,一键配置。
一开始配置上出问题,mongodb连接不上。
当前成功配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: "3"
services:
mongo:
image: "mongo:3.6.9-stretch"
volumes:
- ./data:/data/db
ports:
- "27017:27017"
redis:
image: "redis:alpine"
web:
build: .
image: nodejap
command: npm run debug
volumes:
- ./dist:/server/dist
ports:
- "3000:9527"
- "9222:9222"
links:
- mongo
depends_on:
- mongo

mongo先启动,然后到了web 启动的时候,配置启动采用github issue

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
const options = {
autoIndex: true,
reconnectTries: 30,
reconnectInterval: 500,
poolSize: 10,
bufferMaxEntries: 0,
useNewUrlParser: true,
}
const connectWithRetry = () => {
console.log("MongoDB connection with retry");
mongoose.connect(db_url, options).then(() => {
console.log("MongoDB is connected");
}).catch(err => {
console.log("MongoDB connection unsuccessful, retry after 5 seconds.");
setTimeout(connectWithRetry, 5000)
})
}
connectWithRetry();

这时,每次启动最后一行就都是web_1_9cf04d6b74a9 | MongoDB is connected

接下来顺顺利利的写不久,遇到两个问题:

首先得知Schema 有_idid区分。

_id 是为了分布式而取的对象,根据时间戳生成,当然就具有createdAt 的能力。

id 是字符串,唯一字符串。

再者遇到unique 对象可以重复创建相同键:

1
2
3
4
5
6
https://github.com/Automattic/mongoose/issues/7194

mongoose.set("debug", true);
mongoose.set('useNewUrlParser', true);
mongoose.set('useFindAndModify', false);
mongoose.set('useCreateIndex', true);

原因是mongodb 升级上来,这篇必看的,被我这半路出家的终于花了周六一天才解决掉。

使用vscode 配合docker-compose.yml debug

参考这篇vscode 官方原文

使用起来太爽了。

再分享我的Dockerfile 的长相

1
2
3
4
5
6
7
8
9
FROM node:8.12.0-alpine

WORKDIR /server

COPY . /server
RUN npm install

EXPOSE 9527
CMD ["yarn", "debug"]