Poweradmin v4.4.3 配置参数详解

两层配置体系、环境变量到配置键的全量映射与逐组参数详解:数据库、DNS 通路、DNSSEC、会话安全、界面、PowerDNS API 集成与 REST API 开关,关键参数均带修改-验证-恢复实测闭环。

PoweradminDNS服务器域名服务网络2026/10/26

Poweradmin v4.4.3 配置参数详解

目标:把 Poweradmin v4.4.3 的配置体系一次讲透——两层配置文件的覆盖顺序、各组参数的含义与默认值,以及对每个关键参数执行的「修改 → 验证 → 恢复」实测闭环。本文全部回显取自一台按《Poweradmin v4.4.3 Docker Compose 部署指南》部署好的服务器,配合源码与官方镜像内出厂配置交叉验证。

一、配置体系与实验环境

1.1 两层配置文件与覆盖顺序

Poweradmin 的配置由两层 PHP 文件构成,后者覆盖前者中的同名键:

层路径角色
出厂默认层/app/config/settings.defaults.php官方发布的全部参数默认值(v4.4.3 共 855 行,17 个分组)
用户覆盖层/app/config/settings.php传统部署时手工编辑的文件;官方部署形态下每次启动由环境变量自动重新生成

关键结论(决定排障思路):官方部署形态下 settings.php 是生成物——修改它而不改环境变量,重启后会被重新生成覆盖。持久生效的唯一途径是改环境变量。

1.2 实验环境

项目取值
操作系统Ubuntu 22.04(root 用户)
Poweradminv4.4.3(官方 poweradmin/poweradmin:4.4.3)
PowerDNS Authoritative4.9.18(gmysql 后端,api=yes,监听 8081)
数据库MariaDB 10.11
部署形态部署篇同款三服务 Compose 栈;Poweradmin Web 端口 8131
示例账号管理员 admin / q1w2e3r4
配置读取命令docker exec poweradmin-4.4.3-app cat /app/config/settings.php

1.3 验证方法

每个关键参数按两级验证,全部在上述服务器上执行:

  1. 文件级:修改环境变量并重建服务后,读取生成的 settings.php,确认键值;
  2. 行为级:用 curl 访问 Web 页面或 REST API,确认行为变化。

1.4 生成结果快照(本栈基线)

部署篇栈启动后生成的 settings.php 关键段实测(节选自 docker exec poweradmin-4.4.3-app cat /app/config/settings.php,下同):

'database' => [
    'type' => 'mysql',
    'host' => 'db',
    'port' => '3306',
    'user' => 'poweradmin',
    'password' => 'q1w2e3r4',
    'name' => 'powerdns',
    'file' => '/db/pdns.db',
    'pdns_db_name' => '',
    ...
],
'dns' => [
    'backend' => 'sql',
    'hostmaster' => 'hostmaster.example.com',
    'ns1' => 'ns1.example.com',
    'ns2' => 'ns2.example.com',
    ...
],
'misc' => [
    'display_stats' => false,
    'timezone' => 'Asia/Shanghai',
    ...
],

misc.timezone 取值 Asia/Shanghai 来自环境变量 PA_TIMEZONE;database.password 等来自 DB_PASS。环境变量 → 配置键的完整映射规则见第十节。

二、数据库连接参数(database 组)

2.1 参数总表

环境变量配置键默认值说明
DB_TYPEdatabase.type无(必填)mysql / pgsql / sqlite
DB_HOSTdatabase.host空MySQL/PostgreSQL 必填;localhost 走 socket,TCP 请用 IP
DB_PORTdatabase.port3306 / 5432SQLite 忽略
DB_USER / DB_PASSdatabase.user / password空SQLite 忽略
DB_NAMEdatabase.name空库必须预先存在
DB_FILEdatabase.file/db/pdns.db仅 SQLite 使用
DB_CHARSETdatabase.charsetlatin1建 Poweradmin 表所用字符集,可选 utf8
PA_PDNS_DB_NAMEdatabase.pdns_db_name空Poweradmin 表与 PowerDNS 表分库时指定 PowerDNS 库名(仅 MySQL)
DB_SSL / DB_SSL_VERIFY / DB_SSL_CA / DB_SSL_KEY / DB_SSL_CERTdatabase.ssl*false / false / 空连接加密(4.1.0 引入)
PDNS_VERSION—49PowerDNS 库 schema 版本(45-49),灌表时使用

2.2 两个 schema 的初始化

DB_NAME 库里会同时容纳两类表:Poweradmin 自身的 17 张表(users、perm_items、perm_templ、api_keys、log_api、log_zones 等)与 PowerDNS 的 7 张表(domains、records、cryptokeys、domain_metadata、comments、supermasters、tsigkeys)。部署篇实测:首次启动时 Poweradmin 自动灌入自己的表;设置 PA_INIT_PDNS_SCHEMA=true 后还会顺带灌入 PowerDNS 的 gmysql 表(合计 24 张,SHOW TABLES 回显见部署篇 3.2 节)。PA_INIT_PDNS_SCHEMA 在设置了 PA_PDNS_DB_NAME 时自动跳过(此时 PowerDNS 库由 PowerDNS 自己初始化)。

2.3 密码字符限制(实测坑)

出厂配置 settings.defaults.php 对 database.password 的注释原文:

'password' => 'your_password',  // AVOID: quotes, backslashes, line breaks

单引号、双引号、反斜杠、换行会导致启动时的配置文件生成失败。本栈示例密码 q1w2e3r4 即刻意避开了全部特殊字符。LDAP 绑定密码(PA_LDAP_BIND_PASSWORD)有同样的限制。

三、DNS 数据通路参数(dns 组)

3.1 dns.backend:两种数据通路

环境变量配置键默认取值
PA_DNS_BACKENDdns.backendsqlsql=直连 PowerDNS 数据库读写 domains/records 表;api=全部变更经 PowerDNS REST API 下发(4.3.0 引入)

sql 模式下 Poweradmin 仍需要 PowerDNS API 连接用于 DNSSEC 操作(见第六节);api 模式下 Poweradmin 自身表仍需要一个数据库(用户、权限模板存在本地库),但 zone 数据不再直连。

3.2 新建 zone 的默认值

这组参数决定「新建 zone」表单与自动生成 SOA 的初始值,全部被部署篇的 example.com 实测覆盖(创建后 SOA 回显 ns1.example.com hostmaster.example.com ...):

环境变量配置键默认值
DNS_NS1 / DNS_NS2 / DNS_NS3 / DNS_NS4dns.ns1-ns4ns1.example.com / ns2.example.com / 空
DNS_HOSTMASTERdns.hostmasterhostmaster.example.com
PA_DNS_TTLdns.ttl86400
PA_DNS_TTL_REVERSEdns.ttl_reverse空(回落到 dns.ttl)
PA_DNS_SOA_REFRESH / PA_DNS_SOA_RETRY / PA_DNS_SOA_EXPIRE / PA_DNS_SOA_MINIMUMdns.soa_*28800 / 7200 / 604800 / 86400
PA_DNS_ZONE_TYPE_DEFAULTdns.zone_type_defaultMASTER(可选 NATIVE)

注意部署篇实测坑:zone 类型下拉提交的是大写 MASTER/NATIVE,小写会被 Invalid or unexpected input given. 拒绝——PA_DNS_ZONE_TYPE_DEFAULT 同样必须写大写。

3.3 输入校验类参数

配置键环境变量默认说明
strict_tld_checkPA_DNS_STRICT_TLD_CHECKfalse严格校验 TLD 合法性
top_level_tld_checkPA_DNS_TOP_LEVEL_TLD_CHECKfalse禁止创建顶级域 zone
third_level_checkPA_DNS_THIRD_LEVEL_CHECKfalse禁止创建三级域 zone
txt_auto_quotePA_DNS_TXT_AUTO_QUOTEfalse自动为 TXT 内容补引号
prevent_duplicate_ptrPA_DNS_PREVENT_DUPLICATE_PTRtrue批量操作中禁止同 IP 重复 PTR
custom_tldsPA_DNS_CUSTOM_TLDS[]允许 CNAME 指向的自定义 TLD(如 dn42,home,internal)

txt_auto_quote 默认关闭,与部署篇实测坑 4 直接相关:TXT 内容必须自带双引号,否则报 TXT record content must be enclosed in quotes.。内网环境批量录 TXT 时可设 PA_DNS_TXT_AUTO_QUOTE=true 免去手工引号。

3.4 实测闭环:TTL 与 zone 类型默认值

修改环境变量(节选):

      PA_DNS_TTL: "3600"
      PA_DNS_ZONE_TYPE_DEFAULT: NATIVE

重建后读取生成结果(实测回显):

        'ttl' => 3600,
        'zone_type_default' => 'NATIVE',

验证通过后已恢复为默认值 86400 / MASTER。

四、DNSSEC 参数(dnssec 组)

4.1 dnssec.enabled 与环境变量名

环境变量配置键默认
PA_DNSSEC_ENABLEDdnssec.enabledfalse

4.2 排障实录:PA_DNSSEC 是无效变量

第一轮实验把变量写成 PA_DNSSEC: "true",重建后读生成结果(实测回显):

    'dnssec' => [
        'enabled' => false,
    ],

服务不报任何错,变量被静默忽略。查官方镜像内启动脚本 /usr/local/bin/docker-entrypoint.sh 第 807 行:

    dnssec_enabled=$(to_php_bool "${PA_DNSSEC_ENABLED:-false}")

正确变量名是 PA_DNSSEC_ENABLED。改为该名后重建(实测回显):

    'dnssec' => [
        'enabled' => true,
    ],

4.3 行为验证:界面入口变化

dnssec.enabled=false 时,zone 编辑页(/zones/1/edit)没有任何 DNSSEC 区块。设为 true 后同一页面渲染出 DNSSEC 区块(HTML 实测节选):

<!-- DNSSEC -->
<div class="col-md-4">
    <h6 class="text-muted mb-3">DNSSEC</h6>
    <form method="post" action="" class="d-inline">
        <input type="hidden" name="_token" value="...">
        <button class="btn btn-outline-success btn-sm" type="submit" name="sign_zone">
            <i class="bi bi-shield-check me-1 text-success"></i>Sign zone
        </button>
    </form>
</div>

源码依据:/app/templates/default/edit.html 以 {% if pdnssec_use %} 控制该区块,控制器传入 'pdnssec_use' => $isDnsSecEnabled(取自 dnssec.enabled)。另经 OpenAPI 规范核验:Poweradmin 自身 REST API(v2)没有 DNSSEC 端点,签名操作只能在 Web 界面完成,或直接调用 PowerDNS 的 API(见第六节与 API 使用篇)。

实验后已把 PA_DNSSEC_ENABLED 移除,恢复默认关闭。

五、会话与安全参数(security 组)

5.1 security.session_key:最关键的安全项

环境变量配置键出厂默认
PA_SESSION_KEYsecurity.session_keychange_this_key(历史默认 p0w3r4dm1n)

该 key 用于会话数据加密与密码恢复令牌派生,必须改为 ≥32 字符的随机串。出厂默认值在源码里被显式列入黑名单(/app/lib/BaseController.php):

private const MIN_SESSION_KEY_LENGTH = 32;
...
if (!is_string($key) || in_array($key, ['p0w3r4dm1n', 'change_this_key'], true)) {
    return _('Default session encryption key is used, please set it in your configuration file.');
}
if (strlen($key) < self::MIN_SESSION_KEY_LENGTH) {
    return _('Session encryption key is too short, please set a longer one in your configuration file.');
}

实测闭环:把 PA_SESSION_KEY 设为 12 字符的 pa-short-key 后重建。服务照常启动、启动日志显示 Configuration loaded successfully——短 key 不阻断启动。用 admin 登录后,页面头部渲染出告警横幅(实测回显):

Session encryption key is too short, please set a longer one in your configuration file.

该告警仅对管理员可见(源码:'session_key_error' => $perm_is_godlike ? ... : false)。恢复 37 字符 key 后横幅消失。结论:生产部署若忘记改 key,唯一的暴露面就是管理员登录后的横幅,务必在上线检查清单里加入此项。

5.2 密码策略(password_policy)

环境变量配置键默认
PA_PASSWORD_RULES_ENABLEDsecurity.password_policy.enable_password_rulestrue
PA_PASSWORD_MIN_LENGTHsecurity.password_policy.min_length6
PA_PASSWORD_REQUIRE_UPPERCASE / ..._LOWERCASE / ..._NUMBERS / ..._SPECIAL同名键true / true / true / false
PA_PASSWORD_ENCRYPTIONsecurity.password_encryptionbcrypt(可选 argon2i、argon2id;md5 已在 4.3.0 移除)
PA_PASSWORD_COSTsecurity.password_cost12

实测闭环:设 PA_PASSWORD_MIN_LENGTH: "10" 后重建(实测回显):

            'min_length' => 10,

注意部署篇管理员 q1w2e3r4(8 位)创建于该参数变更之前;策略只约束改密/新建用户时的输入,不追溯已有口令。

5.3 登录表单令牌:脚本化访问的前置条件

配置键环境变量默认
security.login_token_validationPA_LOGIN_TOKEN_VALIDATIONtrue
security.global_token_validationPA_GLOBAL_TOKEN_VALIDATIONtrue

两者默认开启(3.9.0 引入):登录表单和全部后台表单都要求一次性 CSRF 令牌。部署篇实测坑的直接原因即此——不先取令牌直接 POST 登录,一律被 302 打回登录页。脚本化登录的正确三步:

$ curl -s -c cookies.txt http://127.0.0.1:8131/login | grep -o 'name="_token" value="[^"]*"' | head -1 | sed 's/.*value="//;s/"//'
NM5M3TyMhTKS80fPm6I0--6gZv_xcjPGf-1sjgPL
$ curl -s -b cookies.txt -c cookies.txt -o /dev/null -X POST http://127.0.0.1:8131/login \
    --data-urlencode "_token=NM5M3TyMhTKS80fPm6I0--6gZv_xcjPGf-1sjgPL" \
    --data-urlencode "query_string=" --data-urlencode "userlang=en_EN" \
    --data-urlencode "username=admin" --data-urlencode "password=q1w2e3r4" \
    --data-urlencode "authenticate=Sign in"
$ curl -s -b cookies.txt -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8131/
200

生产环境不建议关闭这两项;仅在内网自动化测试且网络受控时考虑 PA_LOGIN_TOKEN_VALIDATION=false。

5.4 账户锁定(account_lockout)

环境变量配置键默认
PA_LOCKOUT_ENABLEDsecurity.account_lockout.enable_lockoutfalse
PA_LOCKOUT_ATTEMPTSsecurity.account_lockout.lockout_attempts5
PA_LOCKOUT_DURATIONsecurity.account_lockout.lockout_duration15(分钟)
PA_LOCKOUT_TRACK_IPsecurity.account_lockout.track_ip_addresstrue
PA_LOCKOUT_CLEAR_ON_SUCCESSsecurity.account_lockout.clear_attempts_on_successtrue

公网可达的实例建议 PA_LOCKOUT_ENABLED=true。默认关闭,本轮未实测修改。

5.5 会话有效期

环境变量配置键默认
PA_SESSION_TIMEOUTinterface.session_timeout1800(30 分钟,单位秒)

闲置超过该时长后需要重新登录。

六、PowerDNS API 集成参数(pdns_api 组)

环境变量配置键默认说明
PA_PDNS_API_URLpdns_api.url空如 http://pdns:8081(3.7.0 引入)
PA_PDNS_API_KEYpdns_api.key空与 PowerDNS pdns.conf 的 api-key 一致
PA_PDNS_SERVER_NAMEpdns_api.server_namelocalhostPowerDNS API 路径中的 server id
PA_PDNS_API_TIMEOUTpdns_api.timeout10请求超时秒数(4.4.0 引入)
PA_PDNS_WEBSERVER_USERNAME / ..._PASSWORDpdns_api.webserver_*空PowerDNS webserver Basic Auth(抓取 /metrics 用)

本栈实测取值(生成结果):

'pdns_api' => [
    'display_name' => 'PowerDNS',
    'url' => 'http://pdns:8081',
    'key' => 'pa-pdns-api-key-4.4.3',
    'server_name' => 'localhost',
    'timeout' => 10,
    ...
],

与部署篇 pdns.conf 中 api-key=pa-pdns-api-key-4.4.3 对应。用途分两种场景:dns.backend='sql' 时仅 DNSSEC 签名/rectify 操作走该 API;dns.backend='api' 时它是唯一数据通路,此组参数变成必填。

七、REST API 开关参数(api 组)

7.1 api.enabled:总开关

环境变量配置键默认
PA_API_ENABLEDapi.enabledfalse
PA_API_DOCS_ENABLEDapi.docs_enabledfalse
PA_API_MAX_KEYS_PER_USERapi.max_keys_per_user5(管理员不限)
PA_API_BASIC_AUTH_ENABLED / PA_API_BASIC_AUTH_REALMapi.basic_auth_*false / Poweradmin API

API key 的签发入口在 Web 界面「账户 → API Keys」(管理员可为自己或他人签发,pwa_ 前缀 64 位十六进制串)。注意 api.enabled 默认 false——部署篇与 API 使用篇能调通 /api/v2/* 的前提都是显式设了 PA_API_ENABLED=true。

实测闭环:把 PA_API_ENABLED 改为 "false" 重建后,携带有效 key 请求(实测回显):

$ curl -s -w '\nHTTP:%{http_code}\n' -H "X-API-Key: pwa_a5b5...(略)" http://127.0.0.1:8131/api/v2/zones
{"error":true,"message":"The API feature is disabled in the system configuration."}
HTTP:403

同一时刻 /api/docs 仍返回 200、Web 界面正常——docs_enabled 与 enabled 相互独立。恢复 "true" 后带 key 请求回到 200:

{"success":true,"data":{"zones":[{"id":1,"name":"example.com","type":"MASTER","created_at":null}]},"message":"Zones retrieved successfully","meta":{"timestamp":"2026-10-26 15:10:59"}}

7.2 排障对照表

现象原因处置
带 key 请求 401key 缺失/错误,或 API 未签发界面重新签发,请求头用 X-API-Key
带 key 请求 403 The API feature is disabled...PA_API_ENABLED=false设 true 并重建服务
请求 /api/docs 404PA_API_DOCS_ENABLED=false设 true 并重建服务
PATCH /api/v2/... 返回 405路由不支持该方法按第九节方法表改用 PUT/DELETE

八、界面显示参数(interface 组)

8.1 标题与品牌

环境变量配置键默认
PA_APP_TITLEinterface.titlePoweradmin(2.1.5 引入)
PA_FAVICON_PATH / PA_LOGO_PATHinterface.favicon_path / logo_path空(用内置资源,4.4.0 引入)
PA_THEME / PA_STYLEinterface.theme / styledefault / light(4.0.0 引入)
PA_BASE_URL_PREFIXinterface.base_url_prefix空(子路径部署如 /poweradmin,4.1.0 引入)
PA_APPLICATION_URLinterface.application_url空(邮件里绝对链接的基础地址,密码重置/OIDC/SAML 必需)

实测闭环:设 PA_APP_TITLE: PA-Lab 重建后,生成结果与页面双验证(实测回显):

        'title' => 'PA-Lab',
<title>PA-Lab</title>

多套环境(生产/演练)共用同一套部署模板时,改标题是最快的区分手段。实验后已恢复默认。

8.2 语言与时区

环境变量配置键默认说明
PA_DEFAULT_LANGUAGEinterface.languageen_EN界面默认语言
PA_ENABLED_LANGUAGESinterface.enabled_languages27 种语言串zh_CN 在默认列表内
PA_TIMEZONEmisc.timezoneUTC注意落在 misc 组(见 1.4 生成快照),影响界面时间显示与日志时间戳

8.3 列表与记录表单开关(节选)

环境变量配置键默认说明
PA_ROWS_PER_PAGEinterface.rows_per_page10列表分页大小
PA_SHOW_RECORD_IDinterface.show_record_idfalse编辑页显示记录 ID 列
PA_SHOW_ADD_RECORD_FORMinterface.show_add_record_formfalse常驻显示加记录表单
PA_SHOW_RECORD_EDIT_BUTTON / PA_SHOW_RECORD_DELETE_BUTTON同名键false每行独立的编辑/删除按钮
PA_SHOW_ZONE_COMMENTSinterface.show_zone_commentstrue显示 zone 备注
PA_SHOW_PDNS_STATUSinterface.show_pdns_statusfalse仪表盘显示 PowerDNS 状态卡片
PA_DISPLAY_HOSTNAME_ONLYinterface.display_hostname_onlyfalse记录名只显示主机名部分
PA_ENABLE_CONSISTENCY_CHECKSinterface.enable_consistency_checksfalse开放数据库一致性检查页

实测闭环:设 PA_ROWS_PER_PAGE: "25" 后(实测回显):

        'rows_per_page' => 25,

九、Poweradmin REST API 一览(配合 api 组)

api.enabled=true 且签发 key 后可用的全部端点(实查自本实例 /api/docs/v2/json 返回的 OpenAPI 规范,Poweradmin API V2 / 2.0.0,共 13 组资源):

/v2/zones                          get post
/v2/zones/{id}                     delete get put
/v2/zones/{id}/metadata            get
/v2/zones/{id}/metadata/{kind}     delete get put
/v2/zones/{id}/owners              get post
/v2/zones/{id}/owners/{user_id}    delete
/v2/zones/{id}/records             get post
/v2/zones/{id}/records/bulk        post
/v2/zones/{id}/records/{recordId}  delete get put
/v2/zones/{id}/rrsets              get patch post put
/v2/zones/{id}/rrsets/{name}/{type}  delete get
/v2/users  /v2/groups  /v2/permissions  /v2/permission-templates
/v2/zone-templates(含 /records 子资源)

鉴权统一走 X-API-Key 请求头;zone 的增删改查、记录与 rrsets 批量操作、用户/组/权限模板管理全部 API 化。完整的请求/响应实测与 curl 脚本见《Poweradmin v4.4.3 API 使用详解》。

十、其余分组参数速览

以下分组本轮未逐项实测修改,默认值实查自官方镜像内 settings.defaults.php(855 行,v4.4.3),标注「引入版本」便于评估升级影响:

10.1 logging 组(审计与诊断两套日志)

配置键环境变量默认说明
logging.type / levelPA_LOGGING_TYPE / PA_LOGGING_LEVELnull / info诊断日志(错误排查):null 关闭 / native 写 PHP error_log
logging.database_enabledPA_LOGGING_DATABASE_ENABLEDfalse审计日志入库(log_users/log_zones/log_groups 表)
logging.syslog_enabled / syslog_identity / syslog_facilityPA_LOGGING_SYSLOG_*false / poweradmin / LOG_USER审计日志发 syslog

审计与诊断是两套独立系统:前者记录「谁改了什么」(增删改、登录登出),后者记录应用错误。合规要求留操作痕迹的部署开 database_enabled 或 syslog_enabled。

10.2 mail 组(密码重置/通知依赖)

配置键环境变量默认
mail.enabledPA_MAIL_ENABLEDtrue
mail.transportPA_MAIL_TRANSPORTphp(可选 smtp/sendmail/logger)
mail.from / from_name / return_pathPA_MAIL_FROM 等poweradmin@example.com
mail.host / port / username / password / encryption / authPA_SMTP_*空 / 587 / 空 / 空 / tls / false

密码重置(security.password_reset.enabled,默认 false)与用户名找回依赖邮件通路;transport=logger 时邮件内容写 error_log,是调试重置流程的免 SMTP 手段。

10.3 认证扩展:LDAP / OIDC / SAML

组总开关环境变量默认关键子项
ldapPA_LDAP_ENABLEDfalsePA_LDAP_URI、PA_LDAP_BASE_DN、PA_LDAP_BIND_DN、PA_LDAP_BIND_PASSWORD、PA_LDAP_USER_ATTRIBUTE(OpenLDAP 用 uid,AD 用 sAMAccountName)
oidcPA_OIDC_ENABLEDfalse内置 azure/google/generic 提供商变量(PA_OIDC_AZURE_* 等 40+ 个),PA_OIDC_AUTO_PROVISION 默认 true,新用户默认挂 Guest 权限模板
samlPA_SAML_ENABLEDfalse内置 azure/okta/auth0/keycloak/generic 提供商变量,PA_SAML_GENERIC_ALLOW_IDP_INITIATED 等(4.4.3 新增该键)

三家默认全关;双因子认证 security.mfa.enabled(PA_MFA_ENABLED)同样默认 false,app_enabled/email_enabled 子开关默认 true。

10.4 modules 组与通知

配置键环境变量默认说明
modules.csv_export.enabledPA_MODULE_CSV_EXPORT_ENABLEDtrue记录列表 CSV 导出
modules.zone_import_export.*PA_MODULE_ZONE_IMPORT_EXPORT_*falsezone 文件导入导出(单文件上限 1MB、自动 TTL 300)
modules.whois.* / modules.rdap.*PA_MODULE_WHOIS_* / PA_MODULE_RDAP_*falseWHOIS/RDAP 查询(默认仅管理员可用)
modules.dns_wizards.*PA_MODULE_DNS_WIZARDS_*falseDMARC/SPF/DKIM/CAA 等记录向导
modules.email_previews.*PA_MODULE_EMAIL_PREVIEWS_*false邮件模板预览
notifications.zone_access_enabledPA_NOTIFICATION_ZONE_ACCESSfalsezone 访问变更通知

十一、环境变量全量清单与无效变量排障

11.1 全量变量从哪里核对

官方镜像内 /usr/local/bin/docker-entrypoint.sh 是环境变量的唯一权威来源(官方文档站的环境变量表由 master 分支生成,包含 4.4.3 尚不存在的变量)。4.4.3 消费的 PA_* 变量共 180+ 个,提取命令与分组计数(实测):

$ docker exec poweradmin-4.4.3-app grep -o 'PA_[A-Z_0-9]*' /usr/local/bin/docker-entrypoint.sh | sort -u | wc -l
183

按前缀分组:数据库 DB_*(12 个)与 DNS 默认值 DNS_*(5 个);PA_DNS_* 22 个;安全 PA_PASSWORD_*/PA_LOCKOUT_*/PA_MFA_*/PA_PASSWORD_RESET_* 等 30+ 个;界面 PA_SHOW_*/PA_DISPLAY_*/PA_POSITION_* 等 20+ 个;认证 PA_LDAP_*/PA_OIDC_*/PA_SAML_* 合计 90+ 个;模块 PA_MODULE_* 18 个;API PA_API_* 5 个;PowerDNS 集成 PA_PDNS_* 8 个;邮件 PA_MAIL_*/PA_SMTP_* 12 个;管理员种子 PA_CREATE_ADMIN/PA_ADMIN_* 4 个。

11.2 排障实录:PA_WEB_ENABLED 在 4.4.3 无效

曾按官方文档站(master 分支生成)尝试 PA_WEB_ENABLED: "false" 以关闭 Web 界面、只留 API。重建后实测:GET / 照旧 302 到 /login、/login 200、带 key 的 /api/v2/zones 200——一切照常,变量无任何效果。回到 11.1 的提取清单核对:4.4.3 的 entrypoint 不消费 PA_WEB_ENABLED(它是后续 4.5+ 版本的特性)。结论:4.4.3 的 Web 界面无法用环境变量单独关闭;确有「仅 API」需求时,请升级版本或用反向代理在入口层封禁非 /api/ 路径。这也是「配置变量先查目标版本 entrypoint、再查文档站」的实证理由。

11.3 参数速查:五个高频坑

坑现象正确姿势
改 settings.php 手工文件重启后被重新生成,改动丢失官方部署形态下只改环境变量
PA_DNSSEC(无 _ENABLED)DNSSEC 悄悄不开用 PA_DNSSEC_ENABLED(4.2 实测)
PA_WEB_ENABLED4.4.3 无效该开关属 4.5+(11.2 实测)
数据库密码含引号/反斜杠启动时配置生成失败密码只用字母数字与基础符号(2.3)
会话 key 过短/未改管理员登录后页面横幅告警≥32 字符随机串(5.1 实测)

十二、参考链接