前后端分离部署
前后端分离部署适合已经有 Linux 服务器和 Nginx 运维经验的场景。前端静态文件由 Nginx 提供,后端 jar 只监听服务器本机端口,浏览器统一访问 Nginx。
使用场景
- 你希望用户通过
80或443端口访问系统。 - 你已经有 Nginx,想把前端静态文件和后端接口分开管理。
- 你能通过 SSH 连接服务器,并能维护 Java、Nginx 和防火墙配置。
如果你没有服务器运维经验,优先使用 Docker Compose 部署 或 宝塔一键部署。
部署结构
浏览器
|
| http://你的域名/
v
Nginx
|-- / -> /opt/surveyking/html 前端静态文件
|-- /api -> http://127.0.0.1:1991 后端接口
后端端口 1991 只给 Nginx 代理使用,不需要直接对公网开放。
准备文件
| 文件 | 下载地址 | 用途 |
|---|---|---|
html.zip | https://download.surveyking.cn/files/html.zip | 前端静态文件 |
surveyking.jar | https://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 |
| 重载 Nginx | sudo systemctl reload nginx |
放行端口
前后端分离后,对公网通常只需要放行 80 和 443。后端 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 保持在本机访问即可,减少暴露面。