使用Docker尝试了基于Node.js设计模式的nginx负载均衡的备忘录
总结
《Node.js 设计模式 第2版》
-
- 10章 スケーラビリティとアーキテクチャ
10.2 クローニングと負荷分散
由於使用了 Docker 來測試上面提供的程式碼,遇到了一些小問題,因此寫下了這個筆記。
环境
-
- Windows 10
-
- Vagrant 2.2.5
-
- virtualbox 6.0.8
-
- Ubuntu 18.04 LTS (Bionic Beaver)
-
- Docker version 18.09.5, build e8ff056
- docker-compose version 1.24.0, build 0aa59064
构成
- app
- app.js
- docker
- docker-compose.yml
- nodejs
- Dockerfile
- nginx
- Dockerfile
- default.conf
- upstream.conf
在这个例题的Github页面中,只有以下内容,且显得相当冗长。
- app.js
- nginx.patch.conf
醬汁
version: '3'
services:
nodejs:
build: ./nodejs
volumes:
- ../app:/app/app
command: [npm,run,run]
nginx:
build: ./nginx
ports:
- 80:80
在创建node.js容器时,进行所需模块的安装。
然后,在package.json中将要执行的命令注册到脚本中。
FROM node:12.5.0
WORKDIR /app
RUN npm init -y
RUN yarn add forever
RUN sed -i -e "s/\(\"scripts\": {\)/\1\n \"run\": \"forever start app\/app.js 8081 \&\& forever start app\/app.js 8082 \&\& forever start app\/app.js 8083 \&\& forever start app\/app.js 8084 \&\& forever list \&\& forever --fifo logs 0 \",/g" /app/package.json
在这里运行的脚本如下所示:
仅使用forever将导致容器在执行后终止。
为了继续保持容器,我们需要输出日志。使用forever –fifo logs 0。
forever start app/app.js 8081
forever start app/app.js 8082
forever start app/app.js 8083
forever start app/app.js 8084
forever list
forever --fifo logs 0
Nginx将配置文件加载到容器中。
FROM nginx
COPY default.conf /etc/nginx/conf.d/default.conf
COPY upstream.conf /etc/nginx/conf.d/upstream.conf
server {
listen 80;
location / {
proxy_pass http://nodejs_design_patterns_app;
}
}
在示例中,将”127.0.0.1″替换为容器的名称(nodejs)。
upstream nodejs_design_patterns_app {
server nodejs:8081;
server nodejs:8082;
server nodejs:8083;
server nodejs:8084;
}
app.js并没有从例子中发生任何更改。
"use strict";
const http = require('http');
const pid = process.pid;
http.createServer((req, res) => {
// 1e7: 10の累乗を指数で指定*1
for (let i = 1e7; i > 0; i--) {}
console.log(`Handling request from ${pid}`);
res.end(`Hello from ${pid}\n`);
}).listen(process.env.PORT || process.argv[2] || 8080, () => {
console.log(`Started ${pid}`);
});
请提供以下信息的中文本地语言释义,只需提供一个选项:
1. Could you please explain the concept of artificial intelligence to me?
请使用自己编写的源代码作为参考。
可以查阅
Node.js设计模式 第二版
支持页面
使用Docker快速运行Apache Bench
将node.js express forever应用容器化为Docker容器
实战篇 – 使用Docker在nginx上设置反向代理