Linux 手动部署
本文介绍下载 SurveyKing v1.13.0 单体 JAR,并通过 systemd 在 Linux 上运行。单体 JAR 已包含前端页面,无需单独启动 Node.js 服务。
如果不需要定制代码,优先使用 Docker Compose 部署,安装和升级更简单。
环境要求
- 64 位 Linux,建议至少 2 核 CPU、4 GB 内存;
- JDK 8 或更高版本,最低使用 JDK 8 即可启动;
- 可选的 MySQL 8;使用 H2 时不需要 MySQL。
确认 Java 版本:
java -version
输出为 Java 8(通常显示为 1.8)或更高版本即可。
1. 下载 JAR
从官方下载站获取 v1.13.0:
也可以在服务器上使用 wget 下载:
wget -O surveyking-v1.13.0.jar http://download.surveyking.cn/files/surveyking-v1.13.0.jar
需要修改源码或自行编译时,参阅如何从源码构建 JAR。
2. 准备运行目录
把 JAR 上传到服务器,并创建专用系统用户和目录:
sudo useradd --system --home /opt/surveyking --shell /usr/sbin/nologin surveyking
sudo mkdir -p /opt/surveyking/{config,db,files,logs}
sudo cp surveyking-v1.13.0.jar /opt/surveyking/
sudo chown -R surveyking:surveyking /opt/surveyking
应用默认使用相对路径存储配置、H2 数据库和附件,因此必须固定工作目录。
3. 创建 systemd 服务
创建 /etc/systemd/system/surveyking.service:
[Unit]
Description=SurveyKing
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=surveyking
Group=surveyking
WorkingDirectory=/opt/surveyking
ExecStart=/usr/bin/java -jar /opt/surveyking/surveyking-v1.13.0.jar --spring.profiles.active=h2 --server.port=1991
Restart=on-failure
RestartSec=5
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
确认 /usr/bin/java -version 显示 Java 8(1.8)或更高版本;如果 Java 安装在其他位置,修改 ExecStart。
启动服务:
sudo systemctl daemon-reload
sudo systemctl enable --now surveyking
sudo systemctl status surveyking
sudo journalctl -u surveyking -f
4. 初始化
临时放行 TCP 1991,访问:
http://服务器 IP:1991/setup
- 选择 H2 时,数据保存在
/opt/surveyking/db; - 选择 MySQL 时,先创建一个空数据库和最小权限账号,再在向导中测试连接;
v1.13.0会自动创建表,无需手工导入初始化 SQL。
初始化写入的配置位于 /opt/surveyking/config/application.properties。
5. 配置 Nginx 和 HTTPS
正式公网部署建议让应用只通过 Nginx 暴露。将域名反向代理到 http://127.0.0.1:1991,申请 TLS 证书,然后关闭公网 1991 端口。
Nginx 示例见反向代理与前后端分离。
6. 运维和升级
常用命令:
sudo systemctl restart surveyking
sudo systemctl stop surveyking
sudo systemctl start surveyking
sudo journalctl -u surveyking --since today
升级步骤:
- 从系统中导出应用备份;
- 停止服务,备份
/opt/surveyking/config、db和files; - 从官方下载站获取新版 JAR,并替换旧文件;
- 如果版本文件名变化,同步修改 systemd 的
ExecStart; - 执行
systemctl daemon-reload并启动服务; - 检查日志、登录、项目和附件。
使用外部 MySQL 时还要单独备份数据库。复制 H2 数据库文件前必须停止服务。