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/data、config 或 files。
修改访问端口
编辑 .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 时,每次升级都应先备份并确认更新日志。
公网部署
云服务器还需要:
- 在安全组和系统防火墙中开放访问端口。
- 正式环境使用 Nginx、Caddy 或网关配置域名和 HTTPS。
- 反向代理成功后,关闭公网对
1991的直接访问,只保留80/443。
反向代理示例见:前后端分离与反向代理。