系列:后端路线 · Part 4
前面你写出了能跑的 Spring Boot 接口。本篇讲”怎么把它放到服务器上稳定运行”,以及”除了浏览器,还能怎么调它”。这是从”本地 demo”到”真能上线”的关键一跃。
1. 从本地到服务器:发生了什么?
本地:mvn spring-boot:run → 进程在 IDE 里跑,你用 localhost 访问。
服务器:把项目打包成 jar,传到 Linux,用命令在后台跑,别人通过服务器 IP/域名访问。
核心差别只有一个字:后台常驻。本地关了终端程序就停,服务器要”关了 SSH 还活着”。
2. 打包
1 | mvn clean package -DskipTests # 生成 target/demo-0.0.1.jar |
-DskipTests跳过测试加速;生产应跑测试。产物是可执行 jar(内嵌 Tomcat,自带运行环境)。
3. 服务器运行(三种方式)
方式一:nohup(最简单,临时用)
1 | nohup java -jar demo-0.0.1.jar > app.log 2>&1 & |
& 后台运行,nohup 让关终端不中断,> app.log 把日志落盘。看日志:tail -f app.log。停服务:kill <pid>(pid 用 ps -ef | grep demo 找)。
方式二:systemd(生产推荐,开机自启)
/etc/systemd/system/demo.service:
1 | [Unit] |
1 | systemctl daemon-reload |
方式三:Docker(进阶,容器化,后续专题)
4. 端口与防火墙
- 应用默认 8080,可在
application.yml改server.port。 - 云服务器需在安全组放行该端口(如 8080),否则外网访问不了。
- 访问:
http://<服务器IP>:8080/api/user。
5. 反向代理:Nginx(为什么需要?)
直接用 IP:端口 丑且不安全。Nginx 做反向代理:把 80/443 域名请求转发给后端 8080。
1 | server { |
好处:统一入口、HTTPS 卸载、静态资源托管、负载均衡、限流。线上几乎一定有一层 Nginx。
6. 接口调用:除了浏览器还能怎么调?
curl(命令行,最硬核)
1 | # GET |
Postman / Apifox(图形化,调试首选)
建请求、填 URL/Header/Body,点 Send,看状态码与响应。可保存为集合、做环境变量。
前端调用(fetch / axios)
1 | // fetch |
7. 跨域(CORS):前端调不通的头号原因
浏览器同源策略禁止页面向”不同源”(协议/域名/端口任一不同)发请求。前端 localhost:3000 调后端 localhost:8080 即跨域。
后端放行(Spring Boot):
1 |
|
生产应把
*收紧为具体前端域名。预检请求 OPTIONS 也要放行。
8. 配置分离(生产/测试不同配置)
1 | # application.yml |
启动指定环境:java -jar demo.jar --spring.profiles.active=prod。密码等敏感信息勿硬编码,用环境变量或配置中心。。
9. 面试速通题
Q1:jar 和 war 区别?Spring Boot 为什么打 jar?
war 需外部 Tomcat 部署;Spring Boot 内嵌容器,打可执行 jar,java -jar 即可,部署简单、环境一致。
Q2:什么是反向代理?和正向代理区别?
反向代理代理”服务端”(Nginx 替后端收请求),客户端无感知;正向代理代理”客户端”(翻墙/内网出网),服务端无感知。
Q3:什么是跨域?怎么解决?
同源策略限制不同源请求。解决:CORS(后端加响应头)、网关统一域名(同源于是不跨)、JSONP(仅 GET,淘汰)。
Q4:nohup 和 systemd 选哪个?
临时测试 nohup 够用;生产用 systemd,可开机自启、崩溃重启、统一日志管理。
Q5:生产环境密码/配置怎么管理?
不写死在代码;用环境变量、启动参数、或配置中心(Nacos/Apollo),密钥进 Vault。
下一篇:完整示例 · 用户管理系统——把 Part1~4 全部串起来,给你一个复制即可跑的最小可运行项目。



