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用户
mongo mongodb://localhost:27017 -u root -p 123456 root 和 123456是 DB_USER 和 DB_PASSWORD
然后在mongodb的shell里面执行: