【docker, pm2】pm2管理koa项目以及compose部署前后端分离项目,并实现数据库连接地址自动切换


目标

使用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-------------------------------------

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值