我的第一个博客上线全过程 —— 从零部署 Spring Boot + React 全栈项目
🧱 一、前言:为什么我要做一个自己的博客?
作为一个程序员,我一直想拥有一个属于自己的博客平台。不仅可以记录学习心得,还能展示技术成果,甚至未来可以成为一个个人品牌门户。
于是,我决定从零开始搭建一个基于 Spring Boot + React 的全栈博客系统,并把它部署到公网服务器上。这篇文章将详细记录整个部署流程,并总结我在过程中踩过的“坑”。
🚀 二、部署流程总览
🔧 技术栈
- 后端:Spring Boot(Java)
- 前端:React(Admin 后台 + Tourist 游客页面)
- 数据库:MySQL + Redis
- 部署工具:Nginx、systemd、scp
- 服务器环境:CentOS
🛠️ 三、准备阶段:服务器与环境搭建
1. 购买服务器(以阿里云为例)
- 平台:阿里云 ECS
- 配置建议:
- 操作系统:CentOS 7 或 Ubuntu 20.04+
- 带宽:至少 1Mbps
- 安全组:开放端口 80(HTTP)、443(HTTPS)、22(SSH)
2. 登录服务器并更新系统
- 使用xshell登录系统
3. 安装 Java 环境(JDK)
Spring Boot 项目需要 Java 运行环境。
CentOS / Ubuntu 安装 OpenJDK 17 示例:
yum install java-17-openjdk -y # CentOS
apt install openjdk-17-jdk -y # Ubuntu
验证安装是否成功:
java -version
javac -version
4. 安装 Nginx(用于反向代理和静态资源托管)
CentOS:
yum install nginx -y
systemctl start nginx
systemctl enable nginx
5. 安装 MySQL 数据库
CentOS:
yum install mariadb-server -y
systemctl start mariadb
mysql_secure_installation
6. 安装 Redis(可选,用于缓存)
CentOS / Ubuntu:
yum install redis -y # CentOS
apt install redis -y # Ubuntu
systemctl start redis
systemctl enable redis
🛠️ 四、部署全流程详解
1. 前端部署:React 多项目共用 Nginx
我使用了两个 React 项目:
- blogAdmin:后台管理界面
- blogTourist:游客浏览页面
✅ 解决方案:
使用路径前缀区分不同项目,通过 Nginx 配置如下:
server {
listen 80;
server_name yourdomain.com;
location ^~ /admin {
alias /web/admin/build;
index index.html;
try_files $uri $uri/ /admin/index.html;
}
location ^~ /tourist {
alias /web/tourist/build;
index index.html;
try_files $uri $uri/ /tourist/index.html;
}
# 根路径跳转
location = / {
return 301 /tourist;
}
}
2. 后端部署:Spring Boot JAR 包运行
我将后端项目打包成可执行的 JAR 文件,并上传到服务器运行。
✅ 遇到问题:
- 使用 rz 上传大文件时经常中断。
- 开发环境和线上环境不匹配。
✅ 解决方案:
- 改用 scp 上传文件更稳定。
- 检查 JAR 是否完整:jar tf xxx.jar
- 确保本地正确打包:mvn clean package 或 ./gradlew bootJar
- 检查配置文件,最好不要将配置硬编码,这样好灵活配置
3. 数据库配置:MySQL + Hibernate dialect 设置
Spring Boot 默认会自动识别数据库类型,但有时失败。
❌ 错误提示:
Caused by: org.hibernate.HibernateException: Access to DialectResolutionInfo cannot be null when 'hibernate.dialect' not set
✅ 解决方案:
在 application.properties 中显式指定方言:
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
同时确保 MySQL 正常运行:
systemctl status mysqld
sudo systemctl start mysqld
4. 反向代理:前后端同域通信
前端请求 /api/xxx 接口时出现跨域问题。
✅ 解决方案:
在 Nginx 中添加反向代理:
location /api {
proxy_pass http://localhost:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
这样前端和后端就可以共享域名,避免跨域。
5. 守护进程:使用 systemd 实现开机自启
使用 nohup 启动的服务在服务器重启后会停止。
✅ 解决方案:
创建 systemd 服务文件 /etc/systemd/system/myblogserver.service:
[Unit]
Description=MyBlogServer Spring Boot Application
After=syslog.target
[Service]
User=root
WorkingDirectory=/web
ExecStart=/usr/bin/java -jar /web/MyBlogServer-0.0.1-SNAPSHOT.jar
SuccessExitStatus=143
Restart=always
StandardOutput=file:/web/logs/app.log
StandardError=file:/web/logs/app.err
[Install]
WantedBy=multi-user.target
然后执行:
sudo systemctl daemon-reload
sudo systemctl start myblogserver
sudo systemctl enable myblogserver
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐


所有评论(0)