跳到主要内容

前后端分离部署

前后端分离部署适合已经有 Linux 服务器和 Nginx 运维经验的场景。前端静态文件由 Nginx 提供,后端 jar 只监听服务器本机端口,浏览器统一访问 Nginx。

使用场景

  • 你希望用户通过 80443 端口访问系统。
  • 你已经有 Nginx,想把前端静态文件和后端接口分开管理。
  • 你能通过 SSH 连接服务器,并能维护 Java、Nginx 和防火墙配置。
注意

如果你没有服务器运维经验,优先使用 Docker Compose 部署宝塔一键部署

部署结构

浏览器
|
| http://你的域名/
v
Nginx
|-- / -> /opt/surveyking/html 前端静态文件
|-- /api -> http://127.0.0.1:1991 后端接口

后端端口 1991 只给 Nginx 代理使用,不需要直接对公网开放。

准备文件

文件下载地址用途
html.ziphttps://download.surveyking.cn/files/html.zip前端静态文件
surveyking.jarhttps://download.surveyking.cn/files/surveyking.jar后端应用程序
提示

后端 jar 使用固定下载地址和固定文件名。每次发布新版本时,只要下载站更新 surveyking.jar,文档里的命令就不需要跟着版本号改。

操作步骤

1. 安装 Java、Nginx 和解压工具

Ubuntu / Debian:

sudo apt update
sudo apt install -y openjdk-8-jdk nginx unzip curl
sudo systemctl enable --now nginx

CentOS / RHEL:

sudo yum install -y java-1.8.0-openjdk nginx unzip curl
sudo systemctl enable --now nginx

检查 Java 和 Nginx:

java -version
nginx -v

2. 创建部署目录

sudo mkdir -p /opt/surveyking/html /opt/surveyking/files /opt/surveyking/logs
sudo chown -R $USER:$USER /opt/surveyking
cd /opt/surveyking

3. 下载并解压前端

curl -L -o html.zip https://download.surveyking.cn/files/html.zip
rm -rf /opt/surveyking/html/*
unzip -q html.zip -d /opt/surveyking/html

确认 index.html 已经解压出来:

ls -lh /opt/surveyking/html/index.html

4. 下载后端 jar

curl -L -o surveyking.jar https://download.surveyking.cn/files/surveyking.jar

确认文件存在:

ls -lh /opt/surveyking/surveyking.jar

5. 启动后端

先用命令行启动一次,确认后端能正常运行:

nohup java -Xms512m -Xmx1024m -jar /opt/surveyking/surveyking.jar \
--spring.profiles.active=h2 \
--server.port=1991 \
--file-storage.local.root-path=/opt/surveyking/files \
> /opt/surveyking/logs/surveyking.log 2>&1 &

查看日志:

tail -f /opt/surveyking/logs/surveyking.log

看到 Started SurveyServerApplication 后,说明后端启动成功。

6. 配置 Nginx 代理

创建配置文件:

sudo vim /etc/nginx/conf.d/surveyking.conf

写入下面内容。没有域名时,server_name 可以先保留为 _,用服务器公网 IP 访问。

server {
listen 80;
server_name _;

root /opt/surveyking/html;
index index.html;

client_max_body_size 100m;

location /api {
proxy_pass http://127.0.0.1:1991;
proxy_http_version 1.1;
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;
proxy_read_timeout 300s;
proxy_send_timeout 300s;
}

location / {
try_files $uri $uri/ /index.html;
}
}

如果 Ubuntu 上默认站点占用了 80 端口,可以先删除默认站点链接:

sudo rm -f /etc/nginx/sites-enabled/default

检查并重载 Nginx:

sudo nginx -t
sudo systemctl reload nginx

7. 打开并初始化系统

浏览器访问:

http://服务器公网IP

如果你已经绑定域名,访问:

http://你的域名

第一次打开会进入 /setup 页面。

  • 试用:选择 H2 内置数据库
  • 正式使用:建议选择 MySQL 数据库。如果需要自己安装 MySQL,可以参考 Linux 手动部署开源版 里的 MySQL 创建步骤。

后续系统信息、默认账号和改密码步骤见:初始化、备份和升级

设置后端开机自启

创建 systemd 服务:

sudo vim /etc/systemd/system/surveyking.service

写入下面内容:

[Unit]
Description=SurveyKing
After=network.target mysql.service mysqld.service

[Service]
Type=simple
WorkingDirectory=/opt/surveyking
ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar /opt/surveyking/surveyking.jar --spring.profiles.active=h2 --server.port=1991 --file-storage.local.root-path=/opt/surveyking/files
Restart=always
RestartSec=10
StandardOutput=append:/opt/surveyking/logs/surveyking.log
StandardError=append:/opt/surveyking/logs/surveyking.log

[Install]
WantedBy=multi-user.target

启用服务:

pkill -f /opt/surveyking/surveyking.jar || true
sudo systemctl daemon-reload
sudo systemctl enable surveyking
sudo systemctl start surveyking
sudo systemctl status surveyking

常用命令:

想做什么命令
启动后端sudo systemctl start surveyking
停止后端sudo systemctl stop surveyking
重启后端sudo systemctl restart surveyking
查看后端状态sudo systemctl status surveyking
查看后端日志tail -f /opt/surveyking/logs/surveyking.log
重载 Nginxsudo systemctl reload nginx

放行端口

前后端分离后,对公网通常只需要放行 80443。后端 1991 端口建议只监听本机代理,不要在云服务器安全组里开放。

Ubuntu / Debian:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw status

CentOS / RHEL:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
注意

云服务器还要去云服务商控制台放行安全组。只在系统防火墙里放行端口,不代表公网一定能访问。

备份和升级

日常备份、导入恢复和数据库升级步骤统一见:初始化、备份和升级

更新前端:

cd /opt/surveyking
cp -r html html.bak
curl -L -o html.zip https://download.surveyking.cn/files/html.zip
rm -rf html/*
unzip -q html.zip -d html
sudo systemctl reload nginx

更新后端:

cd /opt/surveyking
sudo systemctl stop surveyking
cp surveyking.jar surveyking.jar.bak
curl -L -o surveyking.jar.new https://download.surveyking.cn/files/surveyking.jar
mv surveyking.jar.new surveyking.jar
sudo systemctl start surveyking

关于下载文件名

文档统一使用稳定下载地址:

https://download.surveyking.cn/files/surveyking.jar

这样每次发布新版本时,只需要替换下载站上的 surveyking.jar。服务器本地、systemd 服务和文档命令都继续使用 /opt/surveyking/surveyking.jar,不需要跟着版本号改。

常见问题

为什么访问页面正常,但登录或初始化失败?

通常是 Nginx 没有把 /api 代理到后端。检查 /etc/nginx/conf.d/surveyking.conf 里是否有 location /api,再执行:

sudo nginx -t
sudo systemctl reload nginx

同时确认后端还在运行:

sudo systemctl status surveyking
为什么刷新页面后变成 404?

前端是单页应用,Nginx 需要把非文件路径回退到 index.html。确认配置里有这一段:

location / {
try_files $uri $uri/ /index.html;
}
为什么不建议开放 1991 端口?

前后端分离部署时,公网入口应统一交给 Nginx。Nginx 可以负责域名、HTTPS、上传大小限制和日志;后端 1991 保持在本机访问即可,减少暴露面。