nginx部署react docker-compose部署mongodb express

不说原理只说怎么做。

前端react:    

1: 安装nginx           

2: 改写 /etc/nginx/sites-enabled/default 如下:

    

server {
        listen 80 default_server;
        listen [::]:80 default_server;
        server_name www.xxxx.com;

        root /home/aaa/bbb/ccc/build;     //生成的压缩文件的地址

        index index.html index.htm;
        # Add index.php to the list if you are using PHP
        location / {           // 这句话要加 因为使用了react-router
            try_files $uri $uri/ /index.html;
        }
}

     此时访问 www.xxxx.com 就能看到前端了

后端: express + mongodb

Dockerfile, index.js, .env, docker-compose.yml 均在同一目录下。

// .env 这个文件时环境变量配置的文件

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=123456
DB_NAME=todo
DB_PORT=27017
PORT=3001
SALT_ROUNDS = 10
TOKEN_KEY = era231fj287ij2331u3409t34t3gj3

MONGODB_USER=user_a
MONGODB_PASSWORD=666666
MONGODB_DATABASE=todo
MONGODB_LOCAL_PORT=7017
MONGODB_DOCKER_PORT=27017

NODE_LOCAL_PORT=6868
NODE_DOCKER_PORT=8080

  

// db.js 这个文件是后端Express项目使用mongoose链接数据库的文件

'use strict';


const mongoose = require('mongoose')
const config = require('../../utils/config')
const {
DB_HOST,
  MONGODB_PASSWORD,
  MONGODB_USER,
  DB_PORT,
  MONGODB_DATABASE,
} = process.env;
const URL = `mongodb://${MONGODB_USER}:${MONGODB_PASSWORD}@${DB_HOST}:${DB_PORT}/${MONGODB_DATABASE}`
// mongodb://todo_admin:drq12345!@127.0.0.1:27017/todo
console.log('=======', URL)


mongoose.connect(URL);


const db = mongoose.connection;



db.once('open' ,() => {
  console.info('连接数据库成功');
})


db.on('error', function(error) {
  console.error('数据库连接失败: ' + error);
  mongoose.disconnect();
});


db.on('close', function () {
  console.log(URL)
  console.error('数据库断开,重新连接数据库');
  mongoose.connect(URL, {server:{auto_reconnect:true}});
});


module.exports = db

// Dockerfile

FROM node:16.0.0
COPY . /app
WORKDIR /app
RUN ["npm", "install"]
EXPOSE 3000

// docker-compose.yml 缩紧拷贝过来可能有问题。

version: '3'


services:
  mongodb:
    image: mongo:5.0.7
    restart: unless-stopped
    env_file: ./.env
    container_name: mongodb
    ports:
      - $MONGODB_LOCAL_PORT:$MONGODB_DOCKER_PORT
    volumes:
      - ./data:/data/db
    environment:
      - MONGO_INITDB_ROOT_USERNAME=$DB_USER
      - MONGO_INITDB_ROOT_PASSWORD=$DB_PASSWORD



  web:
    depends_on:
      - mongodb
    build: .
    command: node index.js
    env_file: ./.env
    volumes:
      - .:/app
      - /app/node_modules
    ports:
      - $PORT:$PORT
    environment:
      - DB_HOST=mongodb
      - DB_USER=$MONGODB_USER
      - DB_PASSWORD=$MONGODB_PASSWORD
      - DB_NAME=$MONGODB_DATABASE
      - DB_PORT=$MONGODB_DOCKER_PORT
    stdin_open: true
    tty: true

 

然后执行命令: docker-compose up。

这个时候会发现后端连接不到数据库,是因为咱们的后端要链接的数据库没有创建呢 用户也没有创建。

创建mongodb用户

docker exec -it mongodb /bin/bash 进入mongodb容器的shell

mongo mongodb://localhost:27017 -u root -p 123456    root 和 123456是 DB_USER 和 DB_PASSWORD
然后在mongodb的shell里面执行: 
                
              use todo
              db.createUser(
                 {
                   user: "user_a",
                   pwd: "123456",
                   roles: [{role: "dbOwner", db: "todo"} ]
                 }
              )
              就是环境变量设置的这三个字段: MONGODB_USER=user_a   MONGODB_PASSWORD=666666    MONGODB_DATABASE=todo
                
posted @ 2023-02-27 15:40  DRQ丶  阅读(93)  评论(0编辑  收藏  举报