Docker Compose 部署
Docker Compose 部署会同时启动卷王 v1.12.0 和 MySQL,适合把开源版长期放在服务器上使用。
使用场景
- 你有一台 Linux 云服务器。
- 服务器已经安装 Docker 和 Docker Compose。
- 你希望数据库、上传附件和日志都保存在固定目录里,方便备份和迁移。
零基础用户如果已经安装宝塔面板,可以优先看 宝塔一键部署。不想装宝塔,再用本文的 Docker Compose 方式。
操作步骤
1. 连接服务器
用 SSH 工具连接你的服务器。
进入一个你想保存部署文件的目录,比如:
cd /opt
2. 运行一键脚本
复制下面两行命令执行:
curl -sSO https://surveyking.cn/surveyking-docker/setup.sh
bash setup.sh
脚本会创建 surveyking 目录,并生成 Docker Compose 配置。
如果脚本提示选择端口,直接回车会使用默认端口:
| 服务 | 默认端口 |
|---|---|
| 卷王系统 | 1991 |
| MySQL | 33060 |
3. 等待启动完成
执行完成后,查看容器状态:
cd surveyking
docker compose ps
看到 surveyking-app 和 surveyking-mysql 都是运行状态,说明服务已启动。
也可以查看应用日志:
docker compose logs -f surveyking-app
看到 Started SurveyServerApplication 后,说明卷王启动成功。
4. 打开并初始化系统
服务器本机访问:
http://localhost:1991
其他电脑或手机访问:
http://服务器公网IP:1991
第一次打开会自动进入 /setup 页面。
选择 MySQL 数据库,部署方式选择 Docker Compose 内置 MySQL。如果页面里的默认值不一致,按下面填写:
| 配置项 | 填写内容 |
|---|---|
| 数据库地址 | mysql |
| 端口号 | 3306 |
| 数据库名称 | surveyking |
| 用户名 | surveyking |
| 密码 | surveyking/.env 里的密码 |
这里的端口填 3306,不是 33060。33060 是服 务器对外访问 MySQL 的端口,卷王容器连接 MySQL 容器时使用内部端口 3306。
后续系统信息、默认账号和改密码步骤见:初始化、备份和升级。
常用管理命令
所有命令都在 surveyking 目录下执行:
cd /opt/surveyking
| 想做什么 | 命令 |
|---|---|
| 启动服务 | docker compose up -d |
| 停止服务 | docker compose down |
| 重启服务 | docker compose restart |
| 查看状态 | docker compose ps |
| 查看卷王日志 | docker compose logs -f surveyking-app |
| 查看 MySQL 日志 | docker compose logs -f surveyking-mysql |
修改端口
如果 1991 被占用,可以在运行脚本前指定新端口:
SK_APP_PORT=8080 bash setup.sh
如果 33060 被占用,可以指定 MySQL 对外端口:
SK_MYSQL_PORT=33061 bash setup.sh
端口改成 8080 后,访问地址也要改成 http://服务器公网IP:8080。
查看 MySQL 密码
脚本会自动生成 MySQL 密码,并写入 surveyking/.env。第一次进入 /setup 选择 MySQL 时,也要用这个密码。
查看密码:
cd /opt/surveyking
cat .env
你会看到类似:
MYSQL_PASSWORD=一串随机密码
备份、恢复和升级
日常备份、导入恢复和升级步骤统一见:初始化、备份和升级。
如果你只想原地更新 Docker 镜像,先导出备份,再执行:
cd /opt/surveyking
docker compose pull
docker compose up -d
docker image prune -f
常见问题
为什么 /setup 里 MySQL 端口填 3306,脚本默认端口却是 33060?
33060 是给服务器外部连接 MySQL 用的端口。
卷王应用和 MySQL 都在 Docker Compose 内部网络里,卷王连接 MySQL 时走容器内部地址,所以 /setup 里填写:
mysql:3306
不要在 /setup 里填 33060。
手机为什么不能访问 localhost:1991?
localhost 只代表当前设备。手机上的 localhost 是手机自己,不是服务器。
手机访问服务器时,要输入:
http://服务器公网IP:1991
如果打不开,检查两处:
- 云服务器安全组是否放行
1991端口。 - 服务器系统防火墙是否放行
1991端口。
提示端口被占用怎么办?
如果应用端口 1991 被占用,换成 8080:
SK_APP_PORT=8080 bash setup.sh
如果 MySQL 对外端口 33060 被占用,换成 33061:
SK_MYSQL_PORT=33061 bash setup.sh
服务启动失败怎么办?
先看容器状态:
cd /opt/surveyking
docker compose ps
再看日志:
docker compose logs surveyking-app
docker compose logs surveyking-mysql
常见原因是端口被占用、Docker 没有启动、服务器无法下载镜像或初始化 SQL。
重置服务会删除数据吗?
下面这个命令会删除 MySQL 数据卷,不要随便执行:
docker compose down -v
如果只是停止服务,用:
docker compose down