跳到主要内容

Docker Compose 部署

这是 Linux 云服务器、NAS 和长期运行环境的推荐方式。Compose 同时启动 SurveyKing 1.13.0 和 MySQL 8.0,首次打开后由 /setup 完成数据库初始化。

1. 准备目录

确认 Docker 和 Compose 可用:

docker version
docker compose version

创建部署目录:

sudo mkdir -p /opt/surveyking
sudo chown -R "$USER":"$USER" /opt/surveyking
cd /opt/surveyking
mkdir -p config db files logs mysql/conf mysql/data

2. 创建环境变量

/opt/surveyking/.env 中保存端口和 MySQL root 密码:

SURVEYKING_PORT=1991
MYSQL_ROOT_PASSWORD=请替换为强密码

请不要把 .env 上传到公开仓库。

3. 创建 Compose 文件

新建 /opt/surveyking/docker-compose.yml

services:
mysql:
image: mysql:8.0
container_name: surveyking-mysql
restart: unless-stopped
command:
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: surveyking
TZ: Asia/Shanghai
volumes:
- ./mysql/conf:/etc/mysql/conf.d:ro
- ./mysql/data:/var/lib/mysql
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$${MYSQL_ROOT_PASSWORD} --silent"]
interval: 10s
timeout: 5s
retries: 12
start_period: 30s

surveyking:
image: surveyking/surveyking:latest
container_name: surveyking-app
restart: unless-stopped
environment:
SERVER_PORT: "1991"
JAVA_OPTS: "-Xms256m -Xmx1g -Dfile.encoding=UTF-8"
TZ: Asia/Shanghai
ports:
- "${SURVEYKING_PORT:-1991}:1991"
volumes:
- ./config:/app/config
- ./db:/app/db
- ./files:/app/files
- ./logs:/app/logs
depends_on:
mysql:
condition: service_healthy

这里不挂载初始化 SQL,也不预先设置 PROFILE=mysql。1.13.0 会先启动初始化页面,再由应用写入持久化的 config/application.properties

4. 启动并查看日志

docker compose pull
docker compose up -d
docker compose ps
docker compose logs -f surveyking

日志出现 Started SurveyServerApplication 后打开:

http://服务器IP:1991

如果修改了 SURVEYKING_PORT,请使用对应端口。

5. 初始化 MySQL

进入 /setup 后选择 MySQL 数据库,连接信息填写:

配置项
部署方式Docker Compose 内置 MySQL
数据库地址mysql
端口3306
数据库名surveyking
用户名root
密码.env 中的 MYSQL_ROOT_PASSWORD

先测试连接,再完成系统信息和可选 AI 配置。初始化成功后应用会自动重启并进入登录页。

注意

容器之间连接 MySQL 使用 mysql:3306,与宿主机端口无关。本文默认不向宿主机或公网暴露 MySQL。

常用命令

/opt/surveyking 中执行:

操作命令
查看状态docker compose ps
查看应用日志docker compose logs -f surveyking
查看 MySQL 日志docker compose logs -f mysql
重启应用docker compose restart surveyking
停止并保留数据docker compose down
启动docker compose up -d

不要执行 docker compose down -v,也不要删除 mysql/dataconfigfiles

修改访问端口

编辑 .env

SURVEYKING_PORT=8080

应用变更:

docker compose up -d

之后访问 http://服务器IP:8080。容器内部端口仍保持 1991

升级

升级前先在系统中导出备份,并额外备份部署目录。然后执行:

cd /opt/surveyking
docker compose pull
docker compose up -d
docker compose ps
docker compose logs --tail=200 surveyking

如果需要锁定版本,可把镜像改为发布时提供的版本标签;使用 latest 时,每次升级都应先备份并确认更新日志。

公网部署

云服务器还需要:

  1. 在安全组和系统防火墙中开放访问端口。
  2. 正式环境使用 Nginx、Caddy 或网关配置域名和 HTTPS。
  3. 反向代理成功后,关闭公网对 1991 的直接访问,只保留 80/443

反向代理示例见:前后端分离与反向代理