跳到主要内容

初始化、备份和升级

本文适用于 SurveyKing 开源版 v1.13.0。无论使用 Windows、Docker 还是手动部署,第一次启动后都通过 /setup 完成初始化。

注意

升级、迁移或导入备份前,先把备份下载到另一台电脑或对象存储。只保存在原服务器上的备份无法应对磁盘损坏和误删目录。

第一次初始化

打开部署地址;未初始化的系统会自动进入:

http://你的访问地址/setup

选择数据库

数据库推荐场景需要额外准备
H2 内置数据库个人、演示、办公室或教室局域网轻量使用不需要
MySQL 8公网服务、长期运行、多人频繁使用一个空数据库及其账号

Docker Compose 文档中的 MySQL 信息填写如下:

配置项
数据库地址mysql
端口3306
数据库名surveyking
用户名root
密码.env 中的 MYSQL_ROOT_PASSWORD

点击“测试连接”,通过后再初始化。v1.13.0 会自动创建表并写入初始数据,不要再手工导入 init-mysql.sql

完成系统设置

初始化向导还会设置系统名称、默认语言、是否开放注册以及可选的 AI 服务。AI 可以暂时关闭,之后在“系统管理 → 系统设置 → AI 设置”中配置。

目前支持简体中文、繁体中文、英语、日语、韩语、德语、法语和泰语。Windows 启动器与 Web 系统使用相同的八种语言。

默认管理员为:

项目默认值
账号admin
密码123456

首次登录会要求设置更安全的密码。新密码必须为 8~16 位,同时包含大写字母、小写字母和数字,并且只能使用字母和数字。

选择 MySQL 后,初始化完成时应用会自动重启;等待一会儿再刷新页面即可。

应用内备份

管理员进入“系统管理 → 系统设置 → 数据备份”,可以导出或导入备份。

导出的 ZIP 包主要包含:

  • manifest.json:版本和备份清单;
  • data/*.ndjson:数据库表数据;
  • files/:问卷中上传的图片和附件。

导入会覆盖目标系统中的对应表数据和文件。建议目标系统与来源系统版本一致,或使用更高版本;导入完成后检查用户、项目、答卷和附件。

危险

导入不是“合并数据”。执行导入前,也要先为目标系统导出一份备份。

文件级备份

应用内备份便于跨数据库迁移;文件级备份则适合完整保留运行环境。复制数据库目录前先停止 SurveyKing,避免得到不一致的文件。

部署方式至少备份这些内容
Windows%LOCALAPPDATA%\SurveyKing 整个目录
Docker 单容器(H2)宿主机的 config/db/files/
Docker Compose(MySQL)config/files/mysql/data/;建议同时保存 Compose 文件和 .env
Linux/宝塔手动部署程序工作目录下的 config/db/files/;使用外部 MySQL 时另做数据库备份

logs/ 通常不影响恢复,但排查故障时很有价值,也可以一起保存。

升级

先阅读开源版更新日志,导出应用备份并保存文件级备份,然后按部署方式升级。

Windows

  1. 在托盘菜单中退出 SurveyKing,确认服务已经停止。
  2. 运行新版安装包,安装到原目录或新的程序目录。
  3. 启动桌面快捷方式,确认原数据和附件仍然存在。

程序安装目录与 %LOCALAPPDATA%\SurveyKing 数据目录相互独立,因此覆盖升级不会主动删除业务数据。

Docker Compose

cd /opt/surveyking
docker compose pull
docker compose up -d
docker compose ps

不要执行 docker compose down -v,也不要删除挂载目录。

Docker 单容器

拉取新镜像,停止并删除旧容器,再使用原来的四个挂载目录创建同名容器。容器本身可以重建,宿主机上的数据目录不能删除。

Linux、宝塔和源码部署

停止服务,替换为新构建的 JAR,再启动服务。保持原来的工作目录,否则相对路径下的 config/db/files/ 会发生变化。

迁移到新机器或新数据库

推荐流程:

  1. 在旧系统导出应用备份。
  2. 在新机器部署相同或更新版本的 SurveyKing。
  3. 访问新系统的 /setup,选择目标数据库并完成初始化。
  4. 登录新系统并导入备份。
  5. 核对数据、附件、邮件和 AI 等外部服务配置。
  6. 验证完成后再切换域名或停止旧系统。

这套方式同样可以把 H2 数据迁移到 MySQL。

关于旧版本 SQL 脚本

全新安装 v1.13.0 不需要手工执行初始化 SQL。只有从很早的版本原地升级时,才可能需要按版本顺序执行历史迁移脚本;请以版本更新说明为准,不要把历史脚本用于全新数据库。