Docker部署SpringBoot +Vue项目流程详解(含域名 + HTTPS)

文章目录

      • 前言
      • 1、选购服务器
      • 2、部署 Docker
      • 3、前端、后端项目打包
      • 4、配置 Dockerfile
      • 5、配置 Nginx
      • 6、配置 DockerCompose
      • 6、启动 DockerCompose 完成部署
      • 7、【可选】域名 + SSL证书

前言

本次整体部署操作使用阿里云服务器,这里我选择的是香港地区2核2G ECS(可以省略域名备案操作)。

涉及到的中间件如下:

  • Nginx
  • MySQL
  • Redis
  • 后端项目
  • 前端项目

在这里插入图片描述

1、选购服务器

首先登录到阿里云的官网,选购一台公网服务器,由于本次我部署项目体量比较小,所以这里选择的ECS服务器配置如下:

  • 系统:CentOS 7.9
  • 配置:2核2G(按量) + 公网ip
  • 地区:中国香港

选购完毕服务器后,将本次部署需要的安全组进行开放:
在这里插入图片描述

2、部署 Docker

首先在阿里云服务器上安装好Docker和DockerCompose,在后续部署过程中需要通过Docker方式,具体安装步骤参考下述文章第1节

https://blog.csdn.net/weixin_46594796/article/details/122750009

通过下述命令可以判断是否安装成功:
在这里插入图片描述

3、前端、后端项目打包

前端后端打包之前,需要将项目配置信息进行调整,主要是将前后端项目配置文件中的本地地址调整为你申请的阿里云ECS公网ip地址,后端配置举例:
在这里插入图片描述
配置调整完毕后,需要前端代码和后端代码进行打包操作。

  • 针对前端:执行npm run build
    打包完成后,可以看到前端dist文件
    在这里插入图片描述

  • 针对后端:执行mvn clean package -Dmaven.test.skip=true
    打包完成后,可以看到后端jar文件
    在这里插入图片描述

后端jar前端dist文件夹中的内容上传到阿里云ECS根目录(~),然后按照下述操作进行:

# 创建文件夹
mkdir /opt/project
mkdir /opt/project/backend
mkdir /opt/project/sslmkdir /opt/project/nginx
mkdir /opt/project/nginx/html
mkdir /opt/project/nginx/logmkdir /opt/project/mysql
mkdir /opt/project/mysql/conf
mkdir /opt/project/mysql/datamkdir /opt/project/redis
mkdir /opt/project/redis/conf
mkdir /opt/project/redis/data# 移动前后端项目文件
cd ~
mv project-test.jar /opt/project/backend
mv index.html /opt/project/nginx/html
mv static /opt/project/nginx/html

4、配置 Dockerfile

Dockerfile的作用是将后端SpringBoot的项目Jar包build成Docker镜像。
首先创建Dockerfile文件:

# 进入到backend目录
cd /opt/project/backend# 创建Dockerfile文件
vim Dockerfile

将下述内容同步到Dockerfile中:

# 基础镜像:构建JDK8镜像依赖
FROM openjdk:8# 作者
MAINTAINER 徐志斌# 宿主机文件 COPY 镜像(类似COPY,不过COPY不能自动解压文件、访问网络资源)
ADD project-test.jar /project-test.jar# 运行成容器时的端口
EXPOSE 9999# 容器启动时执行(类似CMD)
ENTRYPOINT ["java", "-jar", "project-test.jar"]

构建SpringBoot项目jar镜像:

# docker build -t 镜像名 -f 文件名 工作目录
docker build -t project-test -f Dockerfile /opt/project/backend

构建成功后,通过命令docker images查看刚刚生成的镜像:
在这里插入图片描述
这样就说明Dockerfile没有任何的问题,此时就可以通过命令将SpringBoot项目JAR镜像删除:

docker rmi 镜像id

5、配置 Nginx

进入目标目录,创建好Nginx配置文件:

# 进入目录
cd /opt/project/nginx# 创建配置文件
vim nginx.conf

将下述配置复制到nginx.conf文件中(注意换成自己的公网ip):

worker_processes  1;events {worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  8.210.65.213;location / {root   /usr/share/nginx/html;try_files $uri $uri/ /index.html;index  index.html index.htm;}location /user/ {proxy_pass http://8.210.65.213:9999;proxy_redirect default;rewrite ^/user/(.*) /$1 break;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

6、配置 DockerCompose

DockerCompose的作用是批量操作Docker容器,这样就可以一键部署好我们的环境了。

首先进入到目标目录,创建docker-compose.yml文件:

# 进入目标目录,创建文件
cd /opt/project
vim docker-compose.yml

将下述内容复制到文件中:

version: '3'services:# Nginxnginx:image: nginx:latestcontainer_name: nginxports:- 80:80- 443:443volumes:- /opt/project/nginx/html:/usr/share/nginx/html- /opt/project/nginx/log:/var/log/nginx- /opt/project/nginx/nginx.conf:/etc/nginx/nginx.conf- /opt/project/ssl:/etc/nginx/sslprivileged: true# MySQLmysql:image: mysql:8.0.27container_name: mysqlenvironment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: Xuzhibin123.MYSQL_DATABASE: bingoports:- 3306:3306volumes:- /opt/project/mysql/data:/var/lib/mysql- /opt/project/mysql/conf:/etc/mysql/conf.dprivileged: truerestart: always# Redisredis:image: redis:6.2.6container_name: redisports:- 6379:6379environment:TZ: Asia/Shanghaiprivileged: truerestart: always# 后端JARbackend-project:image: backend-projectcontainer_name: backend-projectbuild: ./backend # 运行Dockerfileports:- 9999:9999depends_on:  # mysql,redis启动后在启动- mysql- redis

6、启动 DockerCompose 完成部署

# 运行 docker-compose.yml
cd /opt/project
docker-compose up -d

此时就可以通过输入ip地址访问到部署完毕的SpringBoot + Vue项目了:
在这里插入图片描述

7、【可选】域名 + SSL证书

注意:国内ECS服务器想要配置域名需要进行备案操作(时间非常久),所以我本篇文章我选择的ECS服务器地区为香港,这样可以省略掉域名备案操作!

关于配置域名和SSL证书流程请参考如下文章:
https://blog.csdn.net/weixin_46594796/article/details/130446464

注意:配置好域名后,需要将前端项目中的公网ip切换成域名地址!

最后 Nginx 大致如下:

worker_processes  1;events {use epoll;worker_connections  1024;
}http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;upstream backend {server 8.210.65.213:9999 max_fails=2 fail_timeout=30s;}# HTTP转为HTTPSserver {listen       80;server_name  www.xuzhibin.top;rewrite ^(.*) https://www.xuzhibin.top;}server {listen       443 ssl;server_name  www.xuzhibin.top;ssl_certificate      /etc/nginx/ssl/xuzhibin.top.pem;ssl_certificate_key  /etc/nginx/ssl/xuzhibin.top.key;ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_ciphers  HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers  on;location / {root   /usr/share/nginx/html;try_files $uri $uri/ /index.html;index  index.html index.htm;}location ^~/user/ {proxy_pass http://backend;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/144933.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源博客项目Blog .NET Core源码学习(4:生成验证码)

开源博客项目Blog中的后台管理登录界面中支持输入验证码(如下图所示),本文学习并记录项目中验证码的生成及调用方式。   博客项目中调用VerifyCode类生成验证码,该类位于App.Framwork项目中,命名空间为App.Framwork…

【java爬虫】使用selenium获取某交易所公司半年报数据

引言 上市公司的财报数据一般都会进行公开,我们可以在某交易所的官方网站上查看这些数据,由于数据很多,如果只是手动收集的话可能会比较耗时耗力,我们可以采用爬虫的方法进行数据的获取。 本文就介绍采用selenium框架进行公司财…

QT判断平台和生成版本设置输入目录

QT判断平台和生成版本设置输入目录 pro工程文件中常用的宏定义Chapter1 QT判断平台和生成版本设置输入目录Chapter2 Qt pro文件中判断 x86/arm(aarch64)交叉编译环境,区分 linux/windows系统, debug/release版本Chapter3 Qt的版本判断、跨平台选择与pro工程文件输出…

nginx tomcat 动静分离

动静分离: 访问静态和动态页面分开 实现动态和静态页面负载均衡。 五台虚拟机 实验1,动静分离 思路: 需要设备:三台虚拟机 一台nginx 代理又是静态 两台tomcat 请求动态页面 在全局模块中配置upstream tomcat 新建location…

AD9371 官方例程HDL详解之JESD204B TX_CLK生成 (二)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 : AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射: AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 : AD9371 官方…

分享一下我家网络机柜,家庭网络设备推荐

家里网络机柜搞了几天终于搞好了,非专业的,走线有点乱,勿喷。 从上到下的设备分别是: 无线路由器(当ap用):TL-XDR6088 插排:德木pdu机柜插排 硬盘录像机:TL-NVR6108-L8P 第二排左边…

仿CSGO盲盒开箱源码 盲盒商城源码 盲盒开箱源码 潮物盲盒商城源码

仿CSGO盲盒开箱源码 盲盒商城源码 盲盒开箱源码 潮物盲盒商城源码 测试环境:宝塔、Linux、PHP7.2、MySQL5.6 根目录 public,伪静态 thinkphp,php需要Redis扩展 后台:/stf 账号:admin 密码:123123 *后台…

Windows 安装 Java

1. 安装 JDK 从 Oracle 的官网下载的 JDK,例如 JDK 21 双击下载得到的 msi 文件,开始安装 JDK 选择要安装的文件路径(我一般都默认): 等待安装: 安装完成: 2. 验证是否安装成功 2.1. 打开 cmd…

反射的作用( 越过泛型检查 和 可以使用反射保存所有对象的具体信息 )

1、绕过 编译阶段 为集合添加数据 反射是作用在运行时的技术,此时集合的泛型将不能产生约束了,此时是可以 为集合存入其他任意类型的元素的 。泛型只是在编译阶段可以约束集合只能操作某种数据类型,在 编译成Class文件进入 运行阶段 的时候&a…

计算机视觉实战项目3(图像分类+目标检测+目标跟踪+姿态识别+车道线识别+车牌识别+无人机检测+A*路径规划+单目测距与测速+行人车辆计数等)

车辆跟踪及测距 该项目一个基于深度学习和目标跟踪算法的项目,主要用于实现视频中的目标检测和跟踪。该项目使用了 YOLOv5目标检测算法和 DeepSORT 目标跟踪算法,以及一些辅助工具和库,可以帮助用户快速地在本地或者云端上实现视频目标检测和…

Kubernetes 通过 Deployment 部署Jupyterlab

概要 在Kubernetes上部署jupyterlab服务,链接Kubernetes集群内的MySQL,实现简单的数据开发功能。 前置条件 镜像准备:自定义Docker镜像--Jupyterlab-CSDN博客 MySQL-Statefulset准备:StatefulSet 简单实践 Kubernetes-CSDN博客…

Linux中的开发工具(yum,vim,gcc/g++,gdb,Makefile,git)

文章目录 1. Linux软件包管理器——yumyum 语法yum 常用命令安装 yum 仓库源 2. Linux编辑器——vimvim 的五种常用模式模式切换vim 基本操作命令模式命令集(1)光标命令(2)复制粘贴命令(3)撤销与重做&#…