记一次服务器中使用docker部署egg项目
- 下载docker
- 下载mysql
- 运行mysql配置密码
- 进入mysql
- 下载redis
- 运行redis 同时设置密码
- 下载nginx
- 上传服务器文件
- 部署
- 启动nginx
- 前端:修改 egg 配置文件
- 后端:根目录 新增 Dockerfile 用于构建镜像
- Dockerfile的配置
- 生成镜像文件
- 运行镜像
- 常见问题
- mysql版本
- 注意服务器端口是否开通
- Dockerfile 名字不能错,否则会找不到
下载docker
下载docker的时候,参考了阿里云的配置方案,附上一个链接:
链接: link.
1.安装系统工具
yum install yum-utils device-mapper-persistent-data lvm2
2.添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.安装docker
yum install docker-ce docker-ce-cli containerd.io
4.查看docker
docker -v
5.启动docker
systemctl start docker
下载mysql
推荐使用国内的镜像市场
搜索 mysql 选择对应的版本库
复制链接
下载:
docker pull daocloud.io/library/mysql:5.7.5
我这里选择5.7.7
下载完成后使用:
docker images
可以查看到刚刚安装完成的镜像
运行mysql配置密码
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 cf8a22028fe7
注意后面的 id 对应的是 IMAGE ID
查看mysql是否已经被启动
docker ps
会展示所有在运行的镜像,会看到mysql已经在运行了
进入mysql
docker exec -it f44218738998 sh
f44218738998 对应的是 CONTAINER ID
下载redis
docker pull daocloud.io/library/redis:6.0.5
运行redis 同时设置密码
docker run -d -p 6379:6379 --name redis 235592615444 --requirepass 123456
下载nginx
docker pull daocloud.io/library/nginx:1.12.0
本地新建nginx文件,做基础的配置
conf.d/default.conf
server {
#监听端口
listen 80;
#监听地址
server_name 你的服务器地址;
#静态资源
location / {
#根目录
root /usr/share/nginx/html;
# 设置默认页
index index.html;
}
#接口转发
location ~ /api/ {
proxy_pass 你的服务器地址:端口号;
}
}
将前端打完的包放到 html 目录下即可
上传服务器文件
我这里使用的 winscp 连接到自己的服务器,直接上传即可
上传nginx文件和server文件
部署
启动nginx
docker run --name nginx -d -p 80:80 -v /root/nginx/log:/var/log/nginx -v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /root/nginx/conf.d:/etc/nginx/conf.d -v /root/nginx/html:/usr/share/nginx/html c246cd3dd41d
注意最后那个id 是 IMAGEID
这时候在浏览器访问你的服务器地址,可以看到前端的页面已经显示了
再次 docker ps 就可以查看到 redis mysql nginx 都已经是启动状态了
前端:修改 egg 配置文件
手动增加一个prod命令脚本,添加环境变量,这时候他会默认走 config/config.prod.js 的配置文件(拷贝config.default.js,把mysql redis 链接地址都改为服务器的)
"prod": "egg-scripts start -env=prod --title=egg-server-lession",
后端:根目录 新增 Dockerfile 用于构建镜像
这个文件可以调用命令 docker通过读取Dockerfile中的指令自动生成映像
Dockerfile的配置
如果你用的yarn可以参考:
# 使用node镜像
FROM daocloud.io/library/node:12.18
# 在容器中新建目录文件夹 egg
RUN mkdir -p /egg
# 将 /egg 设置为默认工作目录
WORKDIR /egg
# 将 package.json 复制默认工作目录
COPY package.json /egg/package.json
# 安装依赖
RUN yarn config set register https://registry.npm.taobao.org
RUN yarn --production
# 再copy代码至容器
COPY ./ /egg
#7001端口
EXPOSE 7001
#等容器启动之后执行脚本
CMD yarn prod
如果是npm可以参考:
# 使用node镜像
FROM daocloud.io/library/node:14.6
# 在容器中新建一个目录 egg
RUN mkdir -p /egg
# 将 /egg 设置为默认的工作目录
WORKDIR /egg
# 将package.json 复制到默认工作目录
COPY package.json /egg/package.json
# 安装依赖
# RUN npm config set register https://registry.npm.taobao.org
# RUN npm install --production
RUN npm i --production --registry=https://registry.npm.taobao.org
# 再copye代码到容器 . 拷贝所有的文件 到 /egg
COPY . /egg
# 暴露7001端口
EXPOSE 7001
#等待 node 容器启动之后,再执行start命令
# CMD 是等容器启动完毕之后再执行 RUN是立即执行
CMD npm run prod
生成镜像文件
docker build -t react-hooks_egg:v1.0 ./server
再次查看镜像 docker images
会看到这个镜像
运行镜像
docker run -d -p 7001:7001 --name server f74f8ae3f248
–name 后面跟着的是 container 名字 可以自定义
查看是否已经在运行了
docker ps
查看egg运行的日志
docker logs -f 3314c1b9649c
查看是否启动成功
常见问题
mysql版本
开始用的mysql 8.0.1 项目一直启动失败,好像是因为mysql8不支持直接node服务连接,需要去做权限的配置 就不做拓展了(ps:试过,也没跑起来)
注意服务器端口是否开通
Dockerfile 名字不能错,否则会找不到