前端项目部署
使用 docker compose
部署单页面应用,我们再上一遍文章介绍过。链接
创建docker-compose.yaml
version: "3.0"
services:
vote:
container_name: vote
build:
context: vote
dockerfile: Dockerfile
ports:
- 8000:80
restart: on-failure
networks:
- frontend
depends_on:
- server
networks:
frontend:
创建 Dockerfile
前端项目有两种方式构建 dockerfile
-
前端项目打包好后,再使用 nginx 构建
FROM nginx COPY default.conf /etc/nginx/conf.d/default.conf COPY dist /usr/share/nginx/build
-
多阶段构建(打包也由dockerfile 完成)
FROM node:14-alpine as builder WORKDIR /app COPY package.json package-lock.json /app/ RUN npm install --registry=https://registry.npm.taobao.org COPY . /app RUN npm run build FROM nginx COPY default.conf /etc/nginx/conf.d/default.conf COPY --from=builder app/dist /usr/share/nginx/build
本文使用了第一种方式,第二种方式下载依赖、打包构建时间有点长,感兴趣的小伙伴可以试试
创建 default.conf
server {
listen 80;
listen [::]:80;
server_name localhost;
access_log /var/log/nginx/host.access.log main;
error_log /var/log/nginx/error.log error;
location ^~ /api {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://server:7001;
}
location / {
root /usr/share/nginx/build;
index index.html index.htm;
try_files $uri $uri/ /index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
前端项目部署构建文件创建完成了,docker-compose.yaml
文件还缺少 server 项目
后端项目部署
创建 docker-compose.yaml
version: "3.0"
services:
redis:
container_name: redis
image: redis
ports:
- "6380:6379"
restart: on-failure
volumes:
- ./data/redis/data:/data
- ./redis/redis.conf:/usr/local/etc/redis/redis.conf
- ./data/redis/logs:/logs
command: redis-server /usr/local/etc/redis/redis.conf
networks:
- my-server
mongodb:
container_name: mongodb
build:
context: mongo
dockerfile: Dockerfile
restart: on-failure
ports:
- "27019:27017"
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: 123456
MONGO_INITDB_DATABASE: eggadmin
volumes:
- ./data/mongodb/db:/data/db
- ./data/mongodb/log/:/var/log/mongodb
networks:
- my-server
server:
container_name: server
build:
context: egg-admin
dockerfile: Dockerfile
ports:
- "3000:7001"
restart: on-failure
networks:
- my-server
- frontend
depends_on:
- mongodb
- redis
networks:
my-server:
frontend:
server 项目依赖mongodb
、redis
项目,docker-compose up
启动时会先启动mongodb
、redis
项目
mongodb 配置
mongodb 的 Dockerfile 文件
FROM mongo
ENV WORKSPACE /usr/local/work
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
ENV INSTALL_MONGO_SHELL setup.sh
RUN mkdir -p $WORKSPACE
COPY ./dump $WORKSPACE/
COPY ./$INSTALL_MONGO_SHELL $AUTO_RUN_DIR/
RUN chmod a+x $AUTO_RUN_DIR/$INSTALL_MONGO_SHELL
mongodb 的 setup.sh
#!/bin/bash
mongorestore -d eggadmin --drop $WORKSPACE/eggadmin
mongodb 数据库默认角色说明
1. 数据库用户角色:read、readWrite
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
4. 备份恢复角色:backup、restore
5. 所有数据库角色: readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root
连接到数据库
mongodb://root:123456@127.0.0.1:27017/eggadmin
server 配置
server 的 Dockerfile 文件
# node镜像
FROM node:14-alpine
# 设置工作目录
WORKDIR /app
# 拷贝package.json文件到工作目录
# !!重要:package.json需要单独添加。
# Docker在构建镜像的时候,是一层一层构建的,仅当这一层有变化时,重新构建对应的层。
# 如果package.json和源代码一起添加到镜像,则每次修改源码都需要重新安装npm模块,这样木有>必要。
# 所以,正确的顺序是: 添加package.json;安装npm模块;添加源代码。
COPY package.json /app/
# 安装npm依赖(使用淘宝的镜像源)
# 如果使用的境外服务器,无需使用淘宝的镜像源,即改为`RUN npm i`。
RUN npm install --registry=https://registry.npm.taobao.org
COPY . /app
CMD ["npm","start"]
egg 项目 config.prod.js 文件配置如下
config.mongoose = {
client: {
url: "mongodb://mongodb:27017/eggadmin",
options: {
useUnifiedTopology: true,
}
}
};
config.redis = {
client: {
port: 6379,
host: "redis",
password: "redispassword",
db: 0,
}
};
有细心的同学会发现mongodb 对外暴露的端口是27019,而我们这配置的是 27017,这是因为我们在docker-compose.yaml
文件配置了networks,server、mongodb、redis 处于同一网络 my-server 下,host 就是构建的容器名,如mongodb,redis,端口就是容器的端口,如27017,6379 ... 同理,前端项目 server 、vote 处于同一网络 frontend 下,所以 前端项目 default.conf 的 proxy_pass 配置 为http://server:7001;
redis 配置
redis 的 redis.conf
# bind 127.0.0.1 ::1
requirepass redispassword
启动
docker-compose up -d
网友评论