目标
使用pm2管理koa项目
配置pm2
根据pm2环境,自动切换连接mongo数据库的地址
编辑docker-compose.yml文件
version: "2.6"
services:
web:
image: "nginx:alpine"
ports:
- "80:80"
volumes:
- /usr/dist/build:/usr/share/nginx/html
- /usr/dist/default.conf:/etc/nginx/conf.d/default.conf
server:
build: .
ports:
- "4000:4000"
depends_on:
- mongo
mongo:
image: "mongo:4.4.10"
ports:
- "27017:27017"
volumes:
- /data/db:/data/db
restart: always
container_name: mongo01
environment:
MONGO_INITDB_ROOT_USERNAME: 账号
MONGO_INITDB_ROOT_PASSWORD: 密码
编辑Dockerfile文件
FROM node:14-alpine
WORKDIR /home/koa
ADD server /home/koa
RUN npm install -registry=https://registry.npm.taobao.org
RUN npm install pm2 -g
ENTRYPOINT ["pm2-runtime", "ecosystem.config.js", "--env", "prod", "--only", "gogo_server"]
本地项目安装pm2
npm i pm2 -g
配置pm2
# 在koa项目根目录中生成初始化文件ecosystem.config.js
# 执行指令:
pm2 init
# 编辑配置文件
module.exports = {
apps: [{
name: 'gogo_server',
cwd: './',
script: 'bin/www',
watch: true,
ignore_watch: ["node_modules", "logs"],
exec_mode: "cluster_mode",
error_file: "./logs/pm2-err.log",
out_file: "./logs/pm2-out.log",
merge_logs: true,
log_date_format: "YYYY-MM-DD HH:mm:ss",
autorestart: true,
env_dev: {
NODE_ENV: 'development',
REMOTE_ADDR: 'development...'
},
env_prod: {
NODE_ENV: 'production',
REMOTE_ADDR: 'production...'
}
}]
};
配置mongo连接地址
console.log('当前环境:', process.env.NODE_ENV);
const config_db = {
dbUrl: process.env.NODE_ENV === "production"
? 'mongodb://账号:密码@服务器ip:27017' # 生产环境的连接地址
: 'mongodb://localhost:27017', # 开发环境的连接地址
dbName : 'gogo'
}
module.exports = config_db
部署
# 把前后端文件、配置文件都放到dist目录中
[root@VM-4-7-centos dist]# ls
build default.conf docker-compose.yml Dockerfile server
# 关闭之前的compose,此时会把之前的镜像和容器都移除
docker compose down
# 重新构建镜像
docker compose build
# 部署
docker compose up -d
查看结果
[root@VM-4-7-centos dist]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6f326c07288d dist_server "pm2-runtime ecosyst…" 4 seconds ago Up 2 seconds 0.0.0.0:4000->4000/tcp, :::4000->4000/tcp dist-server-1
052d73978cc5 mongo:4.4.10 "docker-entrypoint.s…" 4 seconds ago Up 3 seconds 0.0.0.0:27017->27017/tcp, :::27017->27017/tcp mongo01
39f64b2f6de9 nginx:alpine "/docker-entrypoint.…" 4 seconds ago Up 3 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp dist-web-1
[root@VM-4-7-centos dist]# docker exec -it 6f3 sh
/home/koa # ls
app.js ecosystem.config.js package-lock.json routes token.config.js
bin logs package.json socketIo.js utils
db node_modules public test views
/home/koa # cd logs
/home/koa/logs # ls
pm2-err.log pm2-out.log
/home/koa/logs # cat pm2-out.log
2022-09-19 10:59:59: 当前环境: production
2022-09-19 11:00:24: <-- POST /login?v=1663585226521
2022-09-19 11:00:24: POST /login?v=1663585226521 - 21ms
2022-09-19 11:00:24: --> POST /login?v=1663585226521 200 26ms 255b
2022-09-19 11:01:16: <-- POST /login?v=1663585276096
2022-09-19 11:01:16: POST /login?v=1663585276096 - 5ms
2022-09-19 11:01:16: --> POST /login?v=1663585276096 200 6ms 62b
2022-09-19 11:01:22: <-- POST /login?v=1663585282628
2022-09-19 11:01:22: POST /login?v=1663585282628 - 4ms
2022-09-19 11:01:22: --> POST /login?v=1663585282628 200 5ms 62b
-------------------------------end-------------------------------------