news 2026/4/21 11:17:57

手把手教你用 Spring Boot + Vue 搭建个人博客系统(全栈整合 + 部署篇)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
手把手教你用 Spring Boot + Vue 搭建个人博客系统(全栈整合 + 部署篇)

视频看了几百小时还迷糊?关注我,几分钟让你秒懂!


在前两篇中,我们分别完成了:

  • 后端篇:用 Spring Boot 搭建 RESTful API;
  • 前端篇:用 Vue 3 实现文章列表与详情页。

现在,是时候把它们“合体”并部署上线了!本篇将带你完成前后端联调优化、安全加固、本地打包、以及部署到云服务器的全流程,真正拥有一个可对外访问的个人博客!


一、为什么需要整合与部署?

很多教程止步于“本地能跑”,但真正的成就感来自——让全世界都能访问你的博客
而部署过程中会遇到各种现实问题:

  • 前后端跨域怎么彻底解决?
  • 数据库密码能写死在代码里吗?
  • Vue 打包后如何和 Spring Boot 一起运行?
  • 如何用免费 HTTPS 让网站更专业?

本篇一一击破!


二、需求场景升级

你现在是一个独立开发者,希望:

✅ 博客能通过https://myblog.example.com访问;
✅ 前端页面加载快、无跨域警告;
✅ 后端配置不泄露敏感信息;
✅ 整个系统稳定运行,重启自动恢复。


三、关键步骤概览

  1. 前端打包→ 生成静态文件
  2. 后端集成静态资源→ Spring Boot 托管 Vue 页面
  3. 配置优化→ 分离配置、关闭跨域(不再需要)
  4. 部署到 Linux 服务器(以 Ubuntu 22.04 为例)
  5. 配置 Nginx + HTTPS(Let's Encrypt 免费证书)

四、详细实现

步骤 1:Vue 项目打包

blog-frontend目录下执行:

npm run build

生成dist/文件夹,里面是纯 HTML/CSS/JS 静态资源。

✅ 此时前端已“编译完成”,不再依赖 Node.js 运行时。


步骤 2:Spring Boot 托管前端静态文件

dist/文件夹整体复制到 Spring Boot 项目的src/main/resources/static/目录下:

blog-backend/ └── src/ └── main/ └── resources/ └── static/ ├── index.html ├── assets/ └── ...

🌟 Spring Boot 默认会将/static下的内容作为静态资源提供服务。
访问http://localhost:8080/就会自动加载index.html

修改 Vue 路由模式(重要!)

因为现在所有请求都走 Spring Boot,必须支持HTML5 History 模式回退

修改src/router/index.js

const router = createRouter({ history: createWebHistory(), // 注意:生产环境不能带 import.meta.env.BASE_URL routes })

并在 Spring Boot 中添加一个兜底控制器,防止刷新 404:

// 新增:FallbackController.java @Controller public class FallbackController { @GetMapping({"/", "/post/{id}"}) public String forward() { return "forward:/index.html"; } }

💡 原理:当访问/post/123时,Spring Boot 找不到 API,就转发给index.html,由 Vue Router 接管路由。


步骤 3:配置分离 & 安全加固

不要把数据库密码写死在application.yml并提交到 Git!

✅ 正确做法:使用外部配置文件环境变量

创建application-prod.yml(不提交到 Git):

spring: datasource: url: jdbc:mysql://localhost:3306/blog_db?useSSL=false&serverTimezone=Asia/Shanghai username: ${DB_USER} password: ${DB_PASSWORD}

启动时指定:

java -jar blog.jar --spring.profiles.active=prod

并在服务器上设置环境变量:

export DB_USER="root" export DB_PASSWORD="your_real_password"

🔒 安全提示:MySQL 用户建议新建专用账号,仅授予blog_db权限。


步骤 4:打包 Spring Boot 项目

确保pom.xml包含打包插件:

<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>

执行打包:

./mvnw clean package -DskipTests

生成target/blog-0.0.1-SNAPSHOT.jar


步骤 5:部署到云服务器(Ubuntu 22.04)

1. 安装必要软件
# 安装 Java 17(Spring Boot 3 要求) sudo apt update sudo apt install openjdk-17-jre -y # 安装 MySQL sudo apt install mysql-server -y sudo mysql_secure_installation # 创建数据库 sudo mysql -e "CREATE DATABASE blog_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
2. 上传 JAR 包

scp或 FinalShell 上传blog.jar到服务器/home/ubuntu/目录。

3. 启动应用(后台运行)

使用nohupsystemd(推荐后者):

创建服务文件:

sudo nano /etc/systemd/system/blog.service

内容如下:

[Unit] Description=My Personal Blog After=network.target mysql.service [Service] Type=simple User=ubuntu WorkingDirectory=/home/ubuntu ExecStart=/usr/bin/java -jar /home/ubuntu/blog.jar --spring.profiles.active=prod Environment=DB_USER=root Environment=DB_PASSWORD=your_password_here Restart=always [Install] WantedBy=multi-user.target

启用并启动:

sudo systemctl daemon-reload sudo systemctl enable blog sudo systemctl start blog

检查状态:

sudo systemctl status blog

此时博客可通过http://你的服务器IP:8080访问!


步骤 6:配置 Nginx + HTTPS(免费!)

1. 安装 Nginx
sudo apt install nginx -y sudo ufw allow 'Nginx Full'
2. 配置反向代理
sudo nano /etc/nginx/sites-available/blog
server { listen 80; server_name your-domain.com; # 替换为你的域名 location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }

启用配置:

sudo ln -s /etc/nginx/sites-available/blog /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
3. 申请免费 HTTPS 证书(Let's Encrypt)
sudo apt install certbot python3-certbot-nginx -y sudo certbot --nginx -d your-domain.com

按提示操作,Certbot 会自动修改 Nginx 配置并启用 HTTPS!

✅ 现在访问https://your-domain.com就能看到你的博客,并且浏览器显示“安全锁”!


五、反例 & 注意事项

❌ 反例:直接暴露 8080 端口给公网

  • 不安全(容易被扫描攻击);
  • 无法使用标准 80/443 端口(用户需手动输端口)。

✅ 正确做法:用 Nginx 反向代理 + 防火墙限制 8080 仅本地访问

sudo ufw deny 8080 # 禁止外网访问 8080

❌ 反例:把敏感配置提交到 GitHub

# application.yml(危险!) password: 123456

✅ 正确做法:使用.gitignore忽略配置文件,或用环境变量。


⚠️ 注意事项

  1. 域名解析:提前在 DNS 服务商(如阿里云、Cloudflare)将域名指向服务器 IP;
  2. 防火墙:确保云服务器安全组开放 80/443 端口;
  3. 日志查看journalctl -u blog -f实时查看后端日志;
  4. 自动续期:Certbot 证书 90 天过期,但会自动续期(检查systemctl list-timers)。

六、最终效果

  • ✅ 域名访问:https://myblog.example.com
  • ✅ 响应式页面:手机/电脑都能看
  • ✅ 安全 HTTPS:浏览器显示绿色锁
  • ✅ 自动重启:服务器宕机后服务自恢复

七、后续可扩展功能

功能技术方案
后台管理Vue + Element Plus + JWT 登录
Markdown 编辑使用@bytemd/vuevditor
评论系统新增评论表 + 邮件通知
SEO 优化Vue SSR(Nuxt.js)或预渲染
图片上传阿里云 OSS / 本地存储

视频看了几百小时还迷糊?关注我,几分钟让你秒懂!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 12:07:26

feignclient,参数传body,应该怎么写

在Feign Client中传递请求体&#xff08;body&#xff09;参数&#xff0c;主要有以下几种方式&#xff1a;1. 基本使用方式1.1 使用 RequestBody注解FeignClient(name "service-name", url "${service.url}") public interface MyFeignClient {PostMapp…

作者头像 李华
网站建设 2026/4/19 20:00:02

基于深度学习的个性化携程美食数据推荐系统毕设源码+文档+讲解视频

前言 随着在线旅游与本地生活服务的深度融合&#xff0c;携程平台积累的海量美食相关数据亟待高效挖掘&#xff0c;而个性化推荐已成为提升用户体验、增强平台竞争力的关键环节&#xff0c;本课题由此展开研究。当前传统美食推荐方法普遍存在泛化能力薄弱、难以精准捕捉用户复杂…

作者头像 李华
网站建设 2026/4/20 22:45:32

Unity 踩坑记录 命名空间下发送json数据

Json 反序列化这里需要完整类型名&#xff08;包含命名空间&#xff09;&#xff0c;所以导致发送出去的数据会变成命名空间.命名空间下类型名解决方案&#xff1a;1.不要放在命名空间下2.MsgBase msgBase (MsgBase)JsonConvert.DeserializeObject(s, Type.GetType(protoName)…

作者头像 李华
网站建设 2026/4/17 23:16:12

MyBatisPlus整合GLM-4.6V-Flash-WEB后端服务实现图文数据持久化存储

MyBatisPlus整合GLM-4.6V-Flash-WEB后端服务实现图文数据持久化存储 在当今内容爆炸的时代&#xff0c;图像与文本的融合信息正以前所未有的速度增长。从社交媒体到电商平台&#xff0c;从医疗影像到教育资料&#xff0c;系统不仅要“看见”图片&#xff0c;更要“理解”它&…

作者头像 李华
网站建设 2026/4/19 11:36:48

Dify + Pandas协同处理超大Excel(资源占用降低80%的秘密)

第一章&#xff1a;Dify Excel 大文件提取的背景与挑战在现代企业数据处理中&#xff0c;Excel 文件因其易用性和广泛兼容性被大量用于数据存储与流转。然而&#xff0c;随着业务规模扩大&#xff0c;单个 Excel 文件可能包含数十万行数据&#xff0c;甚至达到数百MB大小&#…

作者头像 李华
网站建设 2026/4/19 8:38:52

导师推荐!继续教育必备!8款AI论文平台TOP8测评

导师推荐&#xff01;继续教育必备&#xff01;8款AI论文平台TOP8测评 2026年AI论文平台测评&#xff1a;精准匹配学术需求的工具指南 随着人工智能技术在学术领域的深入应用&#xff0c;越来越多的研究者开始依赖AI工具提升写作效率与质量。然而&#xff0c;面对市场上琳琅满目…

作者头像 李华