前期提要:
- 本文案例中使用到的设备
- Windows 8 笔电一台
- 阿里云 ECS 服务器一台
- 本文案例中使用到的工具
- VS Code
- MongoDB Compass
- 本文案例中项目技术栈
- FrontEnd: Vue + Nuxt
- BackEnd: Node + Express
- DataBase: Mongo
首先要有一个项目,本例中项目技术栈见 “前情提要”。
const isProd = process.env.NODE_ENV === 'production'
console.log('Is current mode production?', isProd)
const apiUrl = isProd ? 'http://rms-backend:8899' : 'http://localhost:8899'
注:这里 Production 环境中的 ‘rms-backend’,是采用 Docker 中 容器互联 技术(后面会说)。
module.exports = {
secret : 'xxx',
host : process.env.DB_HOST || 'localhost',
port : process.env.DB_PORT || '27017',
database: 'rms',
JWT_SECRET: 'xxx',
JWT_EXPIRY: 86400000,
JWT_ISSUER: 'RMS_XH',
JWT_AUDIENCE: 'RMS_XH',
JWT_ALG: 'HS256'
}
...
"scripts": {
"dev": "nodemon server.js",
"start": "cross-env DB_HOST=139.133.122.111 node server.js",
"build": "webpack -p --progress --colors"
},
...
添加 Dockerfile 文件到前后端根目录下
FROM node:10.15-slim
ENV NODE_SOURCE /usr/src/
WORKDIR $NODE_SOURCE
COPY . $NODE_SOURCE
RUN buildDeps=' \
gcc \
make \
python \
' \
&& apt-get update \
&& apt-get install -y libhiredis-dev node-gyp\
&& apt-get install -y $buildDeps --no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& yarn install \
&& yarn build
EXPOSE 8000
CMD ["yarn", "start"]
FROM node:10.15-slim
ENV NODE_SOURCE /usr/src/
WORKDIR $NODE_SOURCE
COPY . $NODE_SOURCE
RUN buildDeps=' \
gcc \
make \
python \
' \
&& apt-get update \
&& apt-get install -y libhiredis-dev node-gyp\
&& apt-get install -y $buildDeps --no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& yarn install
EXPOSE 8899
CMD ["yarn", "start"]
注:前端比后端多了一个
yarn build
,前端需要打包运行。
最后记得将 前后端代码 上传 GitHub
优质高效,建议主选此方案
首先你要有一个 阿里云 账号,没有可以去注册。
没有 科学sw 的访问较慢。
首先你要有一个 Docker Hub 账号,没有可以去注册。
如果是 Windows 系统,请装一个 VM 来装 Docker,然后再 Build。
如果感觉这样麻烦(反正我是这样认为),请放弃此方法。
cd RMS-FE
docker build -t rms-fe:v1 .
cd ..
cd RMS-BE
docker build -t rms-be:v1 .
本方法 服务器网速 差者(比如我)请弃用
cd RMS-FE
docker build -t rms-fe:v1 .
cd ..
cd RMS-BE
docker build -t rms-be:v1 .
如果你采用了 3.1 的方法一,或者你的 Image 已经放到了 阿里云 或 Docker Hub 上,那么请执行这一块。
docker login --username=xxxxxxx registry.cn-xxxx.aliyuncs.com
(上图中的 1)docker pull registry.cn-xxxx.aliyuncs.com/xxx/xxx:[镜像版本号]
(上图中的 2)docker login
docker pull xxx/xxx:[镜像版本号]
(上图框中)我习惯在 pull 之后给 Image 打 Tag
例如docker tag [imageID] rms-fe:1.0
尽量先 run 后端,因为前端要 容器互联到 后端
# backend
docker run -itd -p 8899:8899 --name rms-backend rms-backend:1.0
# frontend
docker run -itd -p 8888:8000 --link rms-backend:rms-backend --name rms-fe rms-fe:1.0
收集 log
docker logs :containerId
从 docker Hub 上 pull Mongo 镜像就好
docker pull mongo
docker run -itd -p 27017:27017--name mongo mongo
最后记得向 Mongo 中插入数据。然后使用 MongoDB Compass 链接 mongo (Robo 3T也可以,但是我遇到不能连接的问题,因为 Mongo 版本和 3T 版本 问题。)