手动部署Java项目、nginx前端和mysql数据库到centos虚拟机
简介:整理自:SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等)课程的飞书文档。
一、创建并运行新mysql容器,挂载本地目录
1、首先在虚拟机的root目录下创建mysql文件夹,在mysql文件夹下创建conf和init文件夹
将hm.cnf文件放入conf文件夹;将hmall.sql放入init文件夹。
2、然后执行以下代码
# 1.删除原来的MySQL容器
docker rm -f mysql# 2.进入root目录
cd ~# 3.创建并运行新mysql容器,挂载本地目录
docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=123 \-v ./mysql/data:/var/lib/mysql \-v ./mysql/conf:/etc/mysql/conf.d \-v ./mysql/init:/docker-entrypoint-initdb.d \mysql
二、部署Java项目和创建自定义网络
1、ide打开Java项目
确保application.yaml中的虚拟机IP地址正确
确保docker中的mysql密码正确。
确保file->Project Structure里jdk版本正确(一般jdk17)
打包成功后,src同级目录下会出现target文件夹
2、创建自定义网络并将之前创建的mysql容器连接自定义网络
# 1.首先通过命令创建一个网络
docker network create hmall# 2.然后查看网络
docker network ls# 将mysql容器连接自定义网络
docker network connect hmall mysql
3、将提前准备好的Dockerfile文件和target文件夹里的hm-service.jar放入虚拟机的root目录下
Dockerfile文件:
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 拷贝jar包
COPY hm-service.jar /app.jar
# 入口
ENTRYPOINT ["java", "-jar", "/app.jar"]
然后依次运行以下命令:
# 1.构建项目镜像,不指定tag,则默认为latest
docker build -t hmall .# 2.查看镜像
docker images
# 结果
REPOSITORY TAG IMAGE ID CREATED SIZE
hmall latest 0bb07b2c34b9 43 seconds ago 362MB
mysql latest 3218b38490ce 17 months ago 516MB# 3.创建并运行容器,并通过--network将其加入hmall网络,这样才能通过容器名访问mysql
docker run -d --name hm --network hmall -p 8080:8080 hmall# 4.查看日志docker logs -f hm
4、测试是否部署成功
通过浏览器访问:如:http://你的虚拟机地址:8080/search/list;
“/search/list”这是Java项目里Controller类里的客户端请求路径,按自己java项目里的来测试。
三、部署前端
1、准备前端文件
hmall-portal和hmall-admin是前端代码,需要基于nginx部署。在课前资料中已经给大家提供了nginx的部署目录:
- html是静态资源目录,我们需要把hmall-portal以及hmall-admin都复制进去
- nginx.conf是nginx的配置文件,主要是完成对html下的两个静态资源目录做代理
我们现在要做的就是把整个nginx目录上传到虚拟机的/root目录下:
2、前端端口配置与nginx.conf文件配置Java应用容器名
由于需要让nginx同时代理hmall-portal和hmall-admin两套前端资源,因此我们需要暴露两个端口: - 18080:对应hmall-portal(用户端)
- 18081:对应hmall-admin(管理端)
nginx.conf文件配置
3、创建并运行nginx容器并连接自定义网络
注意:mysql容器、java应用容器和nginx容器一段要在同一个自定义网络里
运行以下命令:
docker run -d \--name nginx \-p 18080:18080 \-p 18081:18081 \-v /root/nginx/html:/usr/share/nginx/html \-v /root/nginx/nginx.conf:/etc/nginx/nginx.conf \--network heima\nginx
4、测试前后端连接
# 查看日志docker logs -f hm
通过浏览器访问:如:http://你的虚拟机地址:18080;
在前端页面查看数据库数据是否显示,如果显示数据且日志中有响应则部署成功。