LimeSurvey 7.7 Docker Compose 部署实战
LimeSurvey 7.7 Docker Compose 部署实战:martialblog 官方镜像取证与 tag 选型、MariaDB 编排、静默安装与 Web 图形向导双路径实录、业务最小验收、升级与排障五实录,基于 7.7.0-261020-apache 实测。
LimeSurvey 7.7 Docker Compose 部署实战
版本基线:LimeSurvey Community Edition 7.7.0(镜像
martialblog/limesurvey:7.7.0-261020-apache,2026-10-27 推送)+ MariaDB 10.11 实测环境:Linux 服务器 + Docker Compose v2,全部命令与回显均来自实际操作记录(查询日期 2026-10-28) 读者前置:已安装 Docker 与 Docker Compose 插件;产品背景与版本选型见 《LimeSurvey 介绍与选型指南》
一、本篇目标与环境说明
本篇解决 LimeSurvey CE「从零到可用」的完整落地:镜像选型与取证 → 编写 compose 编排 → 启动栈 → 完成安装(静默安装与 Web 图形向导两条路径都实测)→ 管理员验证 → 业务最小验收 → 排障实录。全部步骤在一台 Linux 服务器上实测通过,文中回显均为实测原样记录。
LimeSurvey 的安装形态有两条官方路径:官方 tar.gz 包 + Web 图形向导(官方安装手册主线,见 A1 篇)与 Docker 镜像。本文实测采用 Docker Compose 形态,原因有三:镜像把 PHP 运行时、Web 服务器、依赖扩展全部固化,环境一致性好;console.php 静默安装机制可以让「起栈即可用」,也可关闭静默参数走完整 Web 向导;升级时换镜像 tag 重跑 updatedb 的路径清晰。
实验资源规划(多服务共存的宿主机上,先规划后占用):
- 自定义 bridge 网络:
limesurvey-net,显式子网10.89.63.0/24(先docker network ls确认 10.89.56~75 段未被占用再取值,避开 192.168/100.64 段); - 宿主机端口:
8137(先ss -ltn确认未占用); - 数据目录:应用上传目录
./upload、数据库目录./mariadb/data均以 bind mount 落在部署目录内。
官方安装手册对运行环境的硬性要求(LimeSurvey CE 安装手册,2026-10-28 查询):磁盘最少 500 MB(7.x 安装包解压后约 380 MB);数据库 MariaDB 10.3.38+ 或 MySQL 8+ 或 PostgreSQL 14+;7.x 要求 PHP 8.1.29 及以上(官方测试至 8.5.x)、memory_limit 至少 128 MB、mbstring 与 PDO 扩展必须启用;URL 格式必须为 path 型。本文实测组合为 PHP 8.4 + MariaDB 10.11,均满足要求。
二、镜像选型与取证
2.1 镜像仓库与维护关系
LimeSurvey 官方发布主线是源码 tar.gz(community.limesurvey.org/downloads),Docker 形态由社区维护镜像 martialblog/limesurvey 提供(GitHub 仓库 martialblog/docker-limesurvey)。取证口径(Docker Hub API,2026-10-28 查询):
- 拉取量:3,225,592 次;仓库
last_updated: 2026-10-27,跟随上游小版本滚动构建,活跃度可直接从推送日期判断; - 镜像内应用:LimeSurvey CE + Apache/PHP-FPM + 官方 entrypoint(负责生成
config.php并执行命令行安装); - 另有配套 Helm Chart(
martialblog/helm-charts),k8s 场景可参考。
2.2 tag 命名规则与变体选择
tag 规则为 <LS版本>-<YYMMDD>-<变体>,另有浮动 tag。通过 Docker Hub tags API 实查 7.x 系列(节选,2026-10-28):
7.7.0-261020-apache 293.1MB 2026-10-27 amd64,arm64 ← 本文实测 tag(7.x 当前最新)
7-apache / latest 293.1MB 2026-10-27 amd64,arm64 ← 浮动 tag,指向 7.x 最新 apache
7.7.0-261020-fpm 288.9MB 2026-10-27 amd64,arm64
7.7.0-261020-fpm-alpine 148.9MB 2026-10-27 amd64,arm64
7.5.1-261021-apache 292.5MB 2026-10-21 amd64,arm64
6.17.18-261021-apache 283.1MB 2026-10-21 amd64,arm64 ← 6.x 长尾维护线
选型要点:
- 生产环境建议锁定完整版本 tag(如
7.7.0-261020-apache)而非latest,保证升级可回退; - 三种变体:
apache(Apache + mod_php 一体)、fpm(PHP-FPM + 独立 Web 服务器)、fpm-alpine(最小体积); - 5.0 起
apache变体默认 rootless:容器内以www-data用户运行、Apache 监听 8080 而非 80——端口映射务必写宿主端口:8080,这是与常见「容器内 80」直觉不同的地方,也是排障高发点。
注意版本差:CE 源码下载页在查询日已标注 7.8.0,而镜像仓库 7.x 最新构建仍为 7.7.0-261020(镜像构建滞后于源码发布数日至数周属常态)。本文全部实测基于 7.7.0-261020-apache,对 7.x 后续小版本同样适用。
2.3 拉取镜像并核对
$ docker pull martialblog/limesurvey:7.7.0-261020-apache
7.7.0-261020-apache: Pulling from martialblog/limesurvey
Digest: sha256:...(节选)
Status: Downloaded newer image for martialblog/limesurvey:7.7.0-261020-apache
$ docker inspect martialblog/limesurvey:7.7.0-261020-apache --format '{{.Config.User}} | {{.Config.Entrypoint}} | {{.Config.Cmd}}'
www-data | [/usr/local/bin/docker-php-entrypoint /entrypoint.sh] [apache2-foreground]
$ docker exec limesurvey-7.7.0-app php -v | head -1
PHP 8.4.27 (cli) (built: ...)
镜像以 www-data 运行(rootless),入口链为 docker-php-entrypoint → entrypoint.sh,最终前台执行 apache2-foreground。entrypoint.sh 的完整行为在第四章拆解——它是理解本镜像「静默安装」机制的关键。
三、compose 编排
项目目录结构:
/opt/data/limesurvey/
├── docker-compose.yml
├── upload/ # 应用上传目录(须先初始化,见 3.2)
└── mariadb/data/ # 数据库数据目录(首启自动初始化)
3.1 docker-compose.yml 全文
name: limesurvey-7.7.0-stack
services:
db:
image: mariadb:10.11
container_name: limesurvey-7.7.0-db
restart: unless-stopped
environment:
MARIADB_ROOT_PASSWORD: q1w2e3r4
MARIADB_DATABASE: limesurvey
MARIADB_USER: limesurvey
MARIADB_PASSWORD: q1w2e3r4
volumes:
- ./mariadb/data:/var/lib/mysql
networks:
- limesurvey-net
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 10
app:
image: martialblog/limesurvey:7.7.0-261020-apache
container_name: limesurvey-7.7.0-app
restart: unless-stopped
depends_on:
db:
condition: service_healthy
environment:
DB_TYPE: mysql
DB_HOST: db
DB_PORT: "3306"
DB_NAME: limesurvey
DB_USERNAME: limesurvey
DB_PASSWORD: q1w2e3r4
DB_TABLE_PREFIX: lime_
DB_MYSQL_ENGINE: InnoDB
ADMIN_USER: admin
ADMIN_NAME: admin
ADMIN_EMAIL: admin@example.com
ADMIN_PASSWORD: q1w2e3r4
URL_FORMAT: path
ports:
- "8137:8080"
volumes:
- ./upload:/var/www/html/upload
networks:
- limesurvey-net
networks:
limesurvey-net:
driver: bridge
ipam:
config:
- subnet: 10.89.63.0/24
编排要点:
depends_on带condition: service_healthy:应用启动前必须等数据库健康检查通过;mariadb 镜像内置healthcheck.sh,这是官方推荐的等待方式,比轮询端口可靠;- 数据库凭据三处一致:
MARIADB_*(初始化库)与应用侧DB_*(连接库)必须成对,库名/用户名/密码任一不一致都会导致安装失败; DB_MYSQL_ENGINE: InnoDB:官方默认 MyISAM(历史原因),InnoDB 支持事务且崩溃恢复更可靠;镜像 entrypoint 同时接受INNODB大写形态(Web 向导的引擎下拉即大写值),效果一致;URL_FORMAT: path:7.x 强制 path 型 URL,由 entrypoint 写入config.php的urlManager段;restart: unless-stopped+ 显式name(limesurvey-7.7.0-stack)便于多套实例共存管理。
3.2 upload 目录必须先初始化(重要)
镜像内 /var/www/html/upload 不是空目录——它带有 themes/survey/ 目录骨架(问卷主题的安装目标)。用空目录做 bind mount 会把镜像内的目录骨架遮盖掉,应用启动后扫描主题目录时直接报错(实测踩坑,见第九章排障实录①)。正确姿势是先从镜像把初始内容拷出来再挂载:
$ mkdir -p upload
$ docker run --rm martialblog/limesurvey:7.7.0-261020-apache \
tar -C /var/www/html/upload -cf - . | tar -C upload -xf -
$ chown -R 33:33 upload # 33 = www-data,rootless 容器需要对上传目录可写
$ find upload -type d
upload
upload/themes
upload/themes/survey
官方镜像 README 对此有明确提示:upload 下包含 themes、plugins、survey uploads 等多类持久数据,要持久化就挂载整个 /var/www/html/upload,只挂载其中某个子目录的旧示例配置会导致容器重建时丢其余数据。
四、启动栈与静默安装机制
4.1 启动
$ docker compose up -d
[+] Running 3/3
✔ Network limesurvey-770-stack_limesurvey-net Created
✔ Container limesurvey-7.7.0-db Started
✔ Container limesurvey-7.7.0-app Started
$ docker compose ps
NAME IMAGE STATUS
limesurvey-7.7.0-app martialblog/limesurvey:7.7.0-261020-apache Up
limesurvey-7.7.0-db mariadb:10.11 Up (healthy)
4.2 entrypoint 的静默安装流程(读日志即读流程)
应用日志完整呈现了镜像的自动化安装链路:
$ docker logs limesurvey-7.7.0-app
Connection to db (10.89.63.3) 3306 port [tcp/*] succeeded!
Info: config.php already provisioned
Info: security.php already provisioned
Info: Check if database already provisioned. Nevermind the Stack trace.
no need update : DB is up-to-date
Info: Database already provisioned
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.89.63.2. Set the 'ServerName' directive globally to suppress this message
[Wed Oct 28 00:34:26.055077 2026] [mpm_prefork:notice] [pid 1:tid 1] AH00163: Apache/2.4.69 (Debian) PHP/8.4.27 configured -- resuming normal operations
逐行解读 entrypoint 逻辑(与镜像 entrypoint.sh 一一对应):
- 等数据库:
nc循环探测DB_HOST:DB_PORT,通为止(首启日志会有多条Waiting for database connection...); - 生成
application/config/config.php:若文件不存在,把DB_*环境变量拼装成 LimeSurvey 配置数组写入;已存在则跳过(config.php already provisioned); - 生成
application/config/security.php:若未提供ENCRYPT_*环境变量,会告警No encryption keys were provided并由应用首次运行时自建(该文件必须持久化,见第四章 4.4); - 数据库初始化判定:执行
php application/commands/console.php updatedb——库已初始化则输出no need update : DB is up-to-date(退出码 0);库为空则退出码非 0; - 静默安装:仅在库为空时执行
php application/commands/console.php install "$ADMIN_USER" "$ADMIN_PASSWORD" "$ADMIN_NAME" "$ADMIN_EMAIL"——用ADMIN_*四个变量直接创建管理员并初始化数据表,全程无需打开浏览器; - 前台启动 Apache(监听 8080)。
💡 说明:
ADMIN_*只在首次安装时生效——镜像 README 明确提示「Changing the ADMIN_* configuration has no effect after the initial configuration」。装完后改管理员密码请在应用内操作(后台改密或console.php resetpassword,见运维篇),改 compose 环境变量不会重置密码。
4.3 安装产物核对
安装完成后,部署目录内应能看到两处关键产物:
$ ls mariadb/data/ | head # 数据库数据目录(MariaDB 初始化产物)
aria_log.00000001 ib_buffer_pool ibdata1 ib_logfile0 limesurvey/ mysql/ ...
$ docker exec limesurvey-7.7.0-db mariadb -u limesurvey -pq1w2e3r4 limesurvey \
-e "SHOW TABLES;" | head -8
Tables_in_limesurvey
lime_answers
lime_assessments
lime_attribute_maps
lime_attributes
lime_boxed_numbers
lime_conditions
lime_defaultvalues
lime_directinjections
数据表以 lime_ 前缀(DB_TABLE_PREFIX)创建,覆盖问卷定义、答卷数据、令牌、权限等 160+ 张表。此时打开 http://<服务器>:8137/ 即可看到 LimeSurvey 首页。
五、Web 图形向导安装路径(第二实例实录)
静默安装适合自动化,但「图形向导逐步安装」是官方手册的标准叙事,也适合需要确认每一步的场景。本章用第二个实例完整实测 Web 向导路径,并给出它与 Docker 镜像自动化机制冲突时的正确做法。
5.1 向导路径的触发条件(关键认知)
LimeSurvey 7.x 的安装向导触发条件是:application/config/config.php 不存在。访问站点根路径时,应用检测无配置文件即 302 重定向到 /index.php/installer:
$ curl -s -o /dev/null -w '%{http_code} -> %{redirect_url}\n' http://localhost:8138/
302 -> http://localhost:8138/index.php/installer
这带来 Docker 形态下的一个矛盾:镜像 entrypoint 会自动生成 config.php 并静默安装——所以走 Web 向导必须绕过 entrypoint 的自动化。镜像 README 给出的做法:把服务的 entrypoint 覆盖为纯 Apache 启动命令,并自行准备一个可写的 config 目录。实测的向导实例编排(在主栈网络里追加):
services:
wizard:
image: martialblog/limesurvey:7.7.0-261020-apache
container_name: limesurvey-7.7.0-wizard
restart: unless-stopped
entrypoint: ["/usr/local/bin/apache2-foreground"] # 关键:绕过 entrypoint.sh
ports:
- "8138:80"
volumes:
- ./wizard-upload:/var/www/html/upload # 挂载已初始化的 upload 骨架
networks:
- limesurvey-net
向导模式下不提供 config.php(让向导生成它)、不动 ADMIN_*(向导最后一步自填管理员)。数据库侧提前建一个空库供向导填写(MariaDB 授权用户对库的建表权限由 MARIADB_DATABASE 初始化保证,新库需自行创建):
$ docker exec limesurvey-7.7.0-db mariadb -uroot -pq1w2e3r4 \
-e "CREATE DATABASE limesurvey_wizard CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; SHOW DATABASES;"
Database
information_schema
limesurvey
limesurvey_wizard
mysql
performance_schema
sys
5.2 七步向导实录
向导共 7 步,页面顶部有进度条。逐步实测记录如下(步骤进度为页面实测回显):
第 1 步 Welcome(进度 10%)——选择安装界面语言(100+ 语言可选,含简体中文),提交后进入许可页:
$ curl -s -L http://localhost:8138/index.php/installer | grep -o '<title>[^<]*</title>'
<title>LimeSurvey installer</title>
第 2 步 License(进度 15%)——展示 GPLv2 许可文本,点击接受。表单仅携带 YII_CSRF_TOKEN 防伪字段。
第 3 步 Pre-installation check(进度 20%)——环境自检:逐项列出 PHP 版本、必需扩展(mbstring/PDO 等)、目录写权限检查结果。本步无表单,「Next」按钮直接跳转 /index.php/installer/database。
第 4 步 Database configuration(进度 40%)——填写数据库连接。实测填入:
表单字段(InstallerConfigForm[...]) | 实测值 | 说明 |
|---|---|---|
dbtype | mysql | 下拉仅 MySQL / PostgreSQL 两项 |
dbengine | INNODB | 引擎下拉,值必须选 MyISAM/InnoDB(大写),见排障实录③ |
dblocation | db | 数据库主机名(compose 服务名) |
dbuser / dbpwd | limesurvey / q1w2e3r4 | 数据库账号 |
dbname | limesurvey_wizard | 第 5.1 节预建的空库 |
dbprefix | lime_ | 表前缀 |
第 5 步 Populate database(进度 60%)——向导汇总显示将执行的建表动作,确认表单(隐藏字段 createdbstep2)提交至 /index.php/installer/populatedb,执行数据表批量创建。
第 6 步 Administrator settings(进度 80%)——创建站点管理员(表单字段 adminLoginName / adminLoginPwd / confirmPwd / adminName / adminEmail / siteName / surveylang)。页面同时提示「这些设置可留空稍后在后台修改」。
第 7 步 完成(进度 100%)——安装成功页实测回显:
Success! LimeSurvey has been installed successfully.
Administrator credentials
Username: admin
Password: The password you have chosen at the optional settings step.
Administration
向导完成后 config.php 由向导自动写入 application/config/(含随机 sessionName 等配置),直接访问站点即可使用。注意:此模式下 config.php 落在容器可写层,重建容器即丢失——向导装完后应把生成的 config.php 拷出到宿主机并改为 bind mount(或改用第四章静默安装 + 配置目录挂载的生产形态)。
5.3 向导与静默安装如何选
| 路径 | 适用场景 | 关键动作 |
|---|---|---|
| 静默安装(entrypoint 自动) | 服务器自动化部署、IaC 流水线 | 提供 DB_* + ADMIN_* 即可,零浏览器操作 |
| Web 图形向导 | 首次部署想逐步确认、教学演示 | 覆盖 entrypoint + 不给 config.php + 预建空库 |
| 命令行安装(console.php install) | 已有 config.php 的裸机 tar.gz 部署 | 见本专栏运维实战篇 |
六、安装后验证
6.1 服务可达与管理入口
$ curl -s -o /dev/null -w '%{http_code}\n' http://localhost:8137/ # 站点首页
200
$ curl -s -o /dev/null -w '%{http_code}\n' http://localhost:8137/index.php/admin/authentication/sa/login
200
登录页 200 即后台入口正常,浏览器访问 http://<服务器>:8137/admin 用 admin / q1w2e3r4 登录。
6.2 RemoteControl API 探活
LimeSurvey 的 RPC 接口(RemoteControl)挂在 /index.php/admin/remotecontrol,用 get_session_key 验证管理员凭据与服务内部状态:
$ curl -s -X POST http://localhost:8137/index.php/admin/remotecontrol \
-H 'Content-Type: application/json' \
-d '{"method":"get_session_key","params":{"username":"admin","password":"q1w2e3r4"},"id":1}'
{"id":1,"result":"NzrmkQrbNI4kKLlrE46GcPnYAdrvsC5P","error":null}
返回 result 为会话密钥、error 为 null——应用、数据库、认证链路全部正常。API 的完整用法(问卷导入/激活/令牌/答卷)见本专栏运维实战篇。
6.3 数据库内管理员核对
$ docker exec limesurvey-7.7.0-db mariadb -u limesurvey -pq1w2e3r4 limesurvey \
-e "SELECT uid,username,full_name,email FROM lime_users;"
uid username full_name email
1 admin admin admin@example.com
七、业务最小验收
部署完成的最终验收是「一份问卷从创建到回收」的业务闭环。本节用 RemoteControl API 走最小闭环(步骤压缩版,逐条命令详解见运维实战篇):
- 导入问卷:准备一份
.lss问卷定义文件(LimeSurvey 标准交换格式),通过import_survey上传,返回问卷 ID(实测62831); - 激活问卷:
activate_survey把问卷从「草稿」转「运行」,数据库随之创建答卷数据表lime_survey_62831; - 作答:开放问卷用公开链接(
/index.php/<ID>),受控问卷先activate_tokens+add_participants生成令牌;本文实测经 APIadd_response直写一条答卷,返回答卷 ID1; - 统计核对:后台「结果」页可见答卷,或 API
get_fieldmap校验字段映射、export_responses导出数据:
$ curl -s -X POST http://localhost:8137/index.php/admin/remotecontrol \
-H 'Content-Type: application/json' \
-d '{"method":"get_fieldmap","params":{"sSessionKey":"<会话密钥>","iSurveyID":62831},"id":10}' | head -c 260
{"id": 10, "result": {"id": {"fieldname": "id", "sid": 62831, "type": "id", ...,
"question": "Response ID", ...}, "submitdate": {"fieldname": "submitdate", ...}}, "error": null}
字段映射含系统字段(id/submitdate/lastpage/startlanguage/seed)与题目字段,证明问卷结构与数据链路就绪。
八、升级与数据持久化
- 持久化清单:数据库(
./mariadb/data)+ 应用上传目录(./upload,含主题、插件、问卷附件)+application/config/security.php(应用加密密钥,丢失后已加密字段不可解密)。生产形态建议把 config 目录整体 bind mount; - 小版本升级路径:改 compose 中镜像 tag →
docker compose pull→docker compose up -d。entrypoint 启动时自动执行console.php updatedb(日志见DB is up-to-date或执行迁移),数据库结构由应用自行升级;升级前务必完成备份(mysqldump + upload 目录,见运维实战篇); - 跨大版本升级(如 6.x → 7.x):官方要求逐级升级并先在测试环境验证,同时注意 6.x 已于 2026-08-31 结束延长支持,安全修复窗口以官方 Roadmap 为准;
- 回退:锁定版本 tag 的意义就在于此——镜像与数据库结构版本要成对回退,跨级回退需恢复备份。
九、排障实录(实测踩坑沉淀)
9.1 ①空目录挂载 upload 导致 500(PHP warning opendir)
现象:向导实例把一个空目录 bind mount 到 /var/www/html/upload 后,访问任何页面均 500,错误页(debug=2 时)实测回显:
PHP warning
opendir(/var/www/html/upload/themes/survey): Failed to open directory:
No such file or directory
/var/www/html/application/helpers/SurveyThemeHelper.php(94)
根因:镜像内 /var/www/html/upload/themes/survey/ 是随镜像分发的目录骨架;空 bind mount 遮盖后该路径消失,主题扫描函数 opendir 直接抛错。这是 bind mount 的通病——挂载点会遮盖镜像内原有内容。
处置:挂载前按 3.2 节从镜像拷出 upload 初始骨架并对宿主目录 chown 33:33。官方镜像 README 同样强调 upload 的多子目录持久化要求。实测修复后向导与服务全部正常。
9.2 ②config.php 存在但库为空 → CDbException(向导不出现)
现象:预置了一个指向空库的 config.php(只读挂载),预期「访问站点自动进安装向导」,实际得到 500,debug=2 错误页实测:
CDbException
LimeSurvey table settings_global not found in database
/var/www/html/application/core/LSYii_Application.php(214)
根因:7.x 应用启动即检查核心表 settings_global 是否存在,无表时抛异常终止(源码注释明确「No table settings_global : not installable or updatable」)。安装向导只在 config.php 不存在时触发,而不是在「库为空」时触发。
处置:要走 Web 向导就不要提供 config.php(见 5.1);config.php 已存在时改走 console.php install 或 updatedb 完成初始化。
9.3 ③向导数据库引擎校验:值必须大写
现象:向导第 4 步提交后页面报错(实测回显):
Please fix the following input errors:
The database engine type must be set to MariaDB/MySQL
根因:引擎下拉选项值为大写枚举 MYISAM / INNODB,提交 InnoDB(首字母大写)不会被接受。脚本化驱动向导时尤其容易踩(浏览器下拉点选无此问题)。实测以 INNODB 提交后校验通过。
9.4 ④RemoteControl 调用返回空响应或 TypeError
现象一:向导实例调用 /index.php/admin/remotecontrol 返回 HTTP 200 但响应体 0 字节——检查该实例处于 debug=2 且安装刚由向导完成,session/插件初始化不完整;改用静默安装实例后同一调用正常返回。RPC 端点出现「200 空响应」时优先检查实例安装完整性与 debug 设置。
现象二:调用不存在的方法名(实测拼写错误触发)返回 500,debug=2 错误页:
TypeError
call_user_func(): Argument #1 ($callback) must be a valid callback,
class RemoteControl does not have a method "getDescription"
/var/www/html/application/libraries/PluginManager/PluginManager.php(649)
RemoteControl 以插件机制注册,方法分发前插件管理器会读取插件描述;无效方法名在该链路表现为 500 而非规范的 JSON error。排障动作:核对方法名与官方 RemoteControl API 清单,debug=0 生产环境只会看到通用 500 页,定位时可临时开 debug。
9.5 ⑤Apache ServerName 告警
日志中的 AH00558: Could not reliably determine the server's fully qualified domain name 为无碍告警(容器内无 FQDN 所致),不影响服务;介意的话可在自定义 Apache 配置(挂载 /etc/apache2/sites-available/000-default.conf,镜像 README 提供)中加入 ServerName localhost。
十、参考链接
- 镜像仓库与 README(环境变量表、升级指南、upload 持久化提示):https://hub.docker.com/r/martialblog/limesurvey
- 镜像源码仓库:https://github.com/martialblog/docker-limesurvey
- Docker Hub tags API(tag 清单取证):https://hub.docker.com/v2/repositories/martialblog/limesurvey/tags
- LimeSurvey CE 官方安装手册(运行环境要求):https://manual.limesurvey.org/Installation_-_LimeSurvey_CE
- LimeSurvey 社区版下载页(版本口径):https://community.limesurvey.org/downloads/
- 官方 RemoteControl API 手册:https://manual.limesurvey.org/RemoteControl_2_API
- 本专栏关联篇目:《LimeSurvey 介绍与选型指南》(版本选型与 CE/商业版差异)、运维实战篇(console.php 命令行、API 全集与备份恢复)、配置参数详解篇(config.php 体系与环境变量覆盖)