前端項(xiàng)目部署
使用 docker compose
部署單頁(yè)面應(yīng)用走贪,我們?cè)偕弦槐槲恼陆榻B過(guò)。鏈接
創(chuàng)建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:
創(chuàng)建 Dockerfile
前端項(xiàng)目有兩種方式構(gòu)建 dockerfile
-
前端項(xiàng)目打包好后,再使用 nginx 構(gòu)建
FROM nginx COPY default.conf /etc/nginx/conf.d/default.conf COPY dist /usr/share/nginx/build
-
多階段構(gòu)建(打包也由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
本文使用了第一種方式精续,第二種方式下載依賴挠唆、打包構(gòu)建時(shí)間有點(diǎn)長(zhǎng)贿条,感興趣的小伙伴可以試試
創(chuàng)建 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;
}
}
前端項(xiàng)目部署構(gòu)建文件創(chuàng)建完成了,docker-compose.yaml
文件還缺少 server 項(xiàng)目
后端項(xiàng)目部署
創(chuàng)建 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 項(xiàng)目依賴mongodb
增热、redis
項(xiàng)目整以,docker-compose up
啟動(dòng)時(shí)會(huì)先啟動(dòng)mongodb
、redis
項(xiàng)目
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 數(shù)據(jù)庫(kù)默認(rèn)角色說(shuō)明
1. 數(shù)據(jù)庫(kù)用戶角色:read峻仇、readWrite
2. 數(shù)據(jù)庫(kù)管理角色:dbAdmin公黑、dbOwner、userAdmin
3. 集群管理角色:clusterAdmin摄咆、clusterManager凡蚜、clusterMonitor、hostManager
4. 備份恢復(fù)角色:backup豆同、restore
5. 所有數(shù)據(jù)庫(kù)角色: readAnyDatabase番刊、readWriteAnyDatabase、userAdminAnyDatabase影锈、dbAdminAnyDatabase
6. 超級(jí)用戶角色:root
連接到數(shù)據(jù)庫(kù)
mongodb://root:123456@127.0.0.1:27017/eggadmin
server 配置
server 的 Dockerfile 文件
# node鏡像
FROM node:14-alpine
# 設(shè)置工作目錄
WORKDIR /app
# 拷貝package.json文件到工作目錄
# !!重要:package.json需要單獨(dú)添加芹务。
# Docker在構(gòu)建鏡像的時(shí)候,是一層一層構(gòu)建的鸭廷,僅當(dāng)這一層有變化時(shí)枣抱,重新構(gòu)建對(duì)應(yīng)的層。
# 如果package.json和源代碼一起添加到鏡像辆床,則每次修改源碼都需要重新安裝npm模塊佳晶,這樣木有>必要。
# 所以讼载,正確的順序是: 添加package.json轿秧;安裝npm模塊;添加源代碼咨堤。
COPY package.json /app/
# 安裝npm依賴(使用淘寶的鏡像源)
# 如果使用的境外服務(wù)器菇篡,無(wú)需使用淘寶的鏡像源,即改為`RUN npm i`一喘。
RUN npm install --registry=https://registry.npm.taobao.org
COPY . /app
CMD ["npm","start"]
egg 項(xiàng)目 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,
}
};
有細(xì)心的同學(xué)會(huì)發(fā)現(xiàn)mongodb 對(duì)外暴露的端口是27019驱还,而我們這配置的是 27017,這是因?yàn)槲覀冊(cè)?code>docker-compose.yaml 文件配置了networks凸克,server议蟆、mongodb、redis 處于同一網(wǎng)絡(luò) my-server 下萎战,host 就是構(gòu)建的容器名咐容,如mongodb,redis撞鹉,端口就是容器的端口疟丙,如27017颖侄,6379 ... 同理,前端項(xiàng)目 server 享郊、vote 處于同一網(wǎng)絡(luò) frontend 下览祖,所以 前端項(xiàng)目 default.conf 的 proxy_pass 配置 為http://server:7001;
redis 配置
redis 的 redis.conf
# bind 127.0.0.1 ::1
requirepass redispassword
啟動(dòng)
docker-compose up -d