LimeSurvey 7.7 Docker Compose 部署实战

LimeSurvey 7.7 Docker Compose 部署实战:martialblog 官方镜像取证与 tag 选型、MariaDB 编排、静默安装与 Web 图形向导双路径实录、业务最小验收、升级与排障五实录,基于 7.7.0-261020-apache 实测。

LimeSurveyLimeSurveyDocker Compose问卷调查2026/10/28

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 一一对应):

  1. 等数据库:nc 循环探测 DB_HOST:DB_PORT,通为止(首启日志会有多条 Waiting for database connection...);
  2. 生成 application/config/config.php:若文件不存在,把 DB_* 环境变量拼装成 LimeSurvey 配置数组写入;已存在则跳过(config.php already provisioned);
  3. 生成 application/config/security.php:若未提供 ENCRYPT_* 环境变量,会告警 No encryption keys were provided 并由应用首次运行时自建(该文件必须持久化,见第四章 4.4);
  4. 数据库初始化判定:执行 php application/commands/console.php updatedb——库已初始化则输出 no need update : DB is up-to-date(退出码 0);库为空则退出码非 0;
  5. 静默安装:仅在库为空时执行 php application/commands/console.php install "$ADMIN_USER" "$ADMIN_PASSWORD" "$ADMIN_NAME" "$ADMIN_EMAIL"——用 ADMIN_* 四个变量直接创建管理员并初始化数据表,全程无需打开浏览器;
  6. 前台启动 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[...])实测值说明
dbtypemysql下拉仅 MySQL / PostgreSQL 两项
dbengineINNODB引擎下拉,值必须选 MyISAM/InnoDB(大写),见排障实录③
dblocationdb数据库主机名(compose 服务名)
dbuser / dbpwdlimesurvey / q1w2e3r4数据库账号
dbnamelimesurvey_wizard第 5.1 节预建的空库
dbprefixlime_表前缀

第 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 走最小闭环(步骤压缩版,逐条命令详解见运维实战篇):

  1. 导入问卷:准备一份 .lss 问卷定义文件(LimeSurvey 标准交换格式),通过 import_survey 上传,返回问卷 ID(实测 62831);
  2. 激活问卷:activate_survey 把问卷从「草稿」转「运行」,数据库随之创建答卷数据表 lime_survey_62831;
  3. 作答:开放问卷用公开链接(/index.php/<ID>),受控问卷先 activate_tokens + add_participants 生成令牌;本文实测经 API add_response 直写一条答卷,返回答卷 ID 1;
  4. 统计核对:后台「结果」页可见答卷,或 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。

十、参考链接