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;}}
}
相关文章:
Docker部署SpringBoot +Vue项目流程详解(含域名 + HTTPS)
文章目录 前言1、选购服务器2、部署 Docker3、前端、后端项目打包4、配置 Dockerfile5、配置 Nginx6、配置 DockerCompose6、启动 DockerCompose 完成部署7、【可选】域名 SSL证书 前言 本次整体部署操作使用阿里云服务器,这里我选择的是香港地区的2核2G ECS&…...
需要在 MySQL 服务器中监控的重要指标
MySQL是一个开源的关系数据库管理系统,它基于客户端-服务器模型运行,使用SQL作为其通信模式。它具有灵活性和可扩展性、高安全性、易用性以及无缝处理大型数据集的能力,由于其广泛的功能,MySQL 被用作数据库管理系统的一部分。 什…...
Hadoop之HDFS
目录 1.HDFS概述 1.1HDFS产出背景及定义 1.2 HDFS优缺点 1.3 HDFS组成架构 1.4 HDFS文件块大小 2. HDFS的Shell操作 2.1 基本语法 2.2 命令大全 2.3 常用命令实操 2.3.1 准备工作 2.3.2 上传 2.3.3 下载 2.3.4 HDFS直接操作 3. HDFS的API操作 3.1 客户端环境准备…...
【Matlab笔记_17】查找数组中相同元素
案例一:找到数组中相同元素所在位置索引 方法:使用unique函数用于找到唯一的元素和它们在原数组中的索引。然后,histc函数用于计算每个唯一元素的出现次数,并通过ismember函数找到重复元素在原数组中的索引。最后,通过…...
前端多媒体处理工具——ffmpeg的使用
写在前面 在前端领域,FFmpeg 是一个非常有用的工具,它提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种色彩格式转换、多种采样率转换、多种码率切换等。可以在多种操作系统安装使用。 安装 下载FFmpeg 在网…...
Pandas 数据分析系列1--SeriesDataFrame数据结构详解
Pandas 概述 Pandas 是一个开源的数据分析和数据处理库,是基于 NumPy 开发的。它提供了灵活且高效的数据结构,使得处理和分析结构化、缺失和时间序列数据变得更加容易。其在数据分析和数据处理领域广泛应用,在金融、社交媒体、科学研究等领域都有很高的使用率和广泛的应用场…...
【模型部署】c++部署yolov5使用openvino
1. 推理方式 CPU推理GPU推理(要求电脑具备核显,即CPU中有嵌入显卡) 2. openvino依赖项下载 https://github.com/openvinotoolkit/openvino/releases 直接解压(随便放到哪个路径) 环境配置 ********(…...
DC-7 靶机
DC_7 信息搜集 存活检测 详细扫描 后台网页扫描 网页信息搜集 搜索相关信息 在配置中发现了用户名密码字样 $username "dc7user"; $password "MdR3xOgB7#dW";ssh 登录 尝试使用获取的账密进行登录 网页登录失败 尝试 ssh 登录 成功登录 登陆今后提…...
Mr.Alright---MTK安卓13 抬手亮屏功能的逻辑
该功能在系统设置-显示-拿起设备时唤醒 alps\vendor\mediatek\proprietary\packages\apps\MtkSettings\src\com\android\settings\display\LiftToWakePreferenceController.javapublic boolean isAvailable() {SensorManager sensors (SensorManager) mContext.getSystemServ…...
thinkPHP5.0字符集修改为utf8mb4
Q:为什么要用utf8mb4 A:utf8mb4可以直接保存emoji字符 MySQL修改字符集 // 数据表编码改为utf8mb4 function to_utf8mb4() {$database config("database.database");$sql "ALTER DATABASE {$database} CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;&q…...
[架构之路-242]:目标系统 - 纵向分层 - 应用程序的类型与演进过程(单机应用程序、网络应用程序、分布式应用程序、云端应用程序、云原生应用程序)
目录 一、什么是计算机应用程序 1.1 什么是应用程序 1.2 应用程序的分类 二、应用程序架构分类详解与演进阶段 三、应用程序架构(Application Architecture) 3.1 基本类型 3.2 云应用程序架构 一、什么是计算机应用程序 1.1 什么是应用程序 计算…...
Jackson 反序列化失败,出现JSON: Unrecognized field
问题: 这边在灰度发布的时候,其他未发布的机器出现过could not read JSON: Unrecognized field “type”,这个报错,原因是有一个表新加了一个字段,并且灰度发布了一台机器,刚好有请求命中这台机器…...
vscode代码快捷输入
Vscode代码片段快捷输入 常用的代码片段为了避免重复输入,可以使用Vsco的中用户代码片段进行设置,这样就可以实现快捷输入. 操作流程 如下 打开vscode的设置 2. 找到用户代码片段 3. 选择模板 4. 然后写入代码片段即可 上面的代码片段可以设置多个,看自己 重点关注的是 prefi…...
【微服务】Feign 整合 Sentinel,深入探索 Sentinel 的隔离和熔断降级规则,以及授权规则和自定义异常返回结果
文章目录 前言一、Feign 整合 Sentinel1.1 实现步骤1.2 FallbackFactory 示例 二、Sentinel 实现隔离2.1 隔离的实现方法2.2 Sentinel 实现线程隔离示例 三、熔断降级规则3.1 熔断降级原理及其流程3.2 熔断策略 —— 慢调用3.3 熔断策略 —— 异常比例和异常数 四、授权规则4.1…...
Kurento多对多webrtc会议搭建测试
环境ubuntu18.04 KMS版本6.13.0 多对多通信demo7.0.0 KMS运行起来后,通过运行它的一个个demo,来实现不同的功能,它的demo很多如下: https://github.com/Kurento 里面有一对一,多对多,还有一些特效的demo。…...
蓝桥杯 (饮料换购,C++)
思路: 1、先加上初始的饮料数n。 2、再加上n可以兑换的饮料数n/3,求多余的瓶盖n%3。循环直至瓶盖数无法兑换新的一瓶饮料。 #include<iostream> using namespace std; int main() {int n,a0,sum0;cin >> n;sum n;while (n){n n a;//加上上…...
《java核心卷Ⅰ》知识点总结(可作面试题)
🛫 JDK和JRE傻傻分不清?🛫 HelloWorld的输出都经历了啥?🛫 Java的三个版本都是啥?🛫 关于main方法你都知道啥?main方法被声明为private会怎样?🛫 强制and自动类型转换都…...
发成绩小程序,一键群发成绩给家长,省事
大家好!又到了学期末,是不是又开始为了学生的成绩而烦恼了?别担心,今天就给大家带来一款超级实用的成绩查询系统!从此告别繁琐的手动操作,一键群发成绩给家长,轻松又愉快! 成绩查询系…...
barzilar_borwein算法微调函数的优化收敛
import optimtool as oo from optimtool.base import np, sp, pltpip install optimtool>2.4.2加载barzilar_borwein算法 import optimtool.unconstrain as ou barzilar_borwein ou.gradient_descent.barzilar_borwein初始化输入数据 f ( x ) ∑ i 1 n / 2 c ( x 2 i −…...
SpringBoot篇---第一篇
系列文章目录 文章目录 系列文章目录一、为什么要用SpringBoot二、Spring Boot 的核心注解是哪个?它主要由哪几个注解组成的?三、运行Spring Boot有哪几种方式?一、为什么要用SpringBoot Spring Boot 优点非常多,如: 一、独立运行 Spring Boot而且内嵌了各种servlet容器,…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
华为OD最新机试真题-数组组成的最小数字-OD统一考试(B卷)
题目描述 给定一个整型数组,请从该数组中选择3个元素 组成最小数字并输出 (如果数组长度小于3,则选择数组中所有元素来组成最小数字)。 输入描述 行用半角逗号分割的字符串记录的整型数组,0<数组长度<= 100,0<整数的取值范围<= 10000。 输出描述 由3个元素组成…...
C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...
云原生安全实战:API网关Envoy的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关 作为微服务架构的统一入口,负责路由转发、安全控制、流量管理等核心功能。 2. Envoy 由Lyft开源的高性能云原生…...
