docker中部署egg项⽬记⼀次服务器中使⽤docker部署egg项⽬
下载docker
下载docker的时候,参考了阿⾥云的配置⽅案,附上⼀个链接:
链接: .
1.安装系统⼯具
yum install yum-utils device-mapper-persistent-data lvm2
2.添加软件源信息
yum-config-manager --add-repo mirrors.aliyun/docker-ce/linux/po 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.f
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/f:/etc/f -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 链接地址都改为服务器的)
mysql下载之后是个文件夹
"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 registry.
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 registry.
# RUN npm install --production
RUN npm i --production --registry=registry.
# 再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 名字不能错,否则会不到
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论