资讯详情 DDNS 环境变量配置完全指南:DDNS_ 前缀参数解析、优先级机制与 Docker 实战
📅 2026/10/13 1:47:55
网络CLI【免费下载链接】DDNS自动更新域名解析到本机IP,支持dnspod,阿里DNS,CloudFlare,华为云,DNSCOM...项目地址https://gitcode.com/gh_mirrors/dd/DDNS点击查看免费下载本篇指南面向 DDNS 项目的环境变量配置体系系统讲解所有DDNS_前缀环境变量的格式、取值与默认值结合ddns/config/env.py、ddns/config/config.py等源码揭示数组解析、特殊前缀保护与命令行 JSON 环境变量的优先级合并机制并给出 Docker 容器、日志、代理、缓存的完整可复制配置示例。读完后你可以不依赖 JSON 配置文件仅用环境变量完成 DDNS 的全量配置并理解每个参数在源码中的实际作用点。配置来源与优先级环境变量处于第三层DDNS 的配置由三个来源合并而成优先级为命令行参数 JSON 配置文件 环境变量参见 env.md、cli.md、json.md。从源码看入口在 load_configs()它依次加载 CLI 配置load_cli_config与环境变量配置load_env_config即ddns/config/env.py中的load_config()再用split_array_string(cli_config.get(config, env_config.get(config, [])))解析配置文件路径列表最后为每个 JSON 配置对象构造一个Config。真正的逐字段合并发生在 Config._get()def _get(self, key, defaultNone): value self._cli_config.get(key) ... if value is None: value self._json_config.get(key, self._env_config.get(key, default)) if is_false(value): return False # 处理数组参数 if key in SIMPLE_ARRAY_PARAMS: return split_array_string(value, key in (index4, index6)) return value即先取 CLI 值CLI 未设置时取 JSON 值JSON 未设置时才回落到环境变量再未命中才使用代码内置默认值。由此可以验证文档中给出的优先级示例# 环境变量设置 export DDNS_TTL600{ ttl: 300 }# 命令行参数 ddns --ttl 900最终生效ttl900去掉命令行参数则为ttl300两者都没有则使用环境变量的ttl600。另一个细节JSON 配置文件中显式写为null的字段会覆盖环境变量。因为_get()中self._json_config.get(key, ...)对None值仍然命中了 key返回值不再是环境变量而是None等价于未设置该值随后按各字段的默认值处理。环境变量基础规则DDNS_ 前缀与键名归一化所有环境变量以DDNS_为前缀后跟参数名推荐全大写对象和属性分隔符用_分割# export 命令作用于当前主机 export DDNS_XXXxxx # docker run -e 作用于容器内 docker run -e DDNS_XXXxxxload_config() 实现了若干隐性规则这些规则在 tests/test_config_env.py 中都有对应的测试用例大小写兼容ddns_dns、DDNS_DNS、Ddns_Dns均可识别。源码对键做了lower()后与prefix.lower()比较test_case_insensitive_prefix_matching。点号转下划线DDNS_LOG.LEVELDEBUG会映射为log_leveltest_dot_to_underscore_conversion这与 JSON 中log.level展开后的扁平键保持一致。值两侧空格自动去除 value 会被 strip 为valuetest_whitespace_stripping。token与http_token不做数组解析普通值以[开头时会尝试按 JSON/Python 字面量解析为数组但DDNS_TOKEN、DDNS_HTTP_TOKEN这类密钥字段会被原样保留为字符串即使值以方括号开头也不会向 stderr 输出解析错误对应测试test_token_values_are_never_array_parsed_or_logged源码见 env.py L75-L77。标准环境变量别名PYTHONHTTPSVERIFY会映射为ssl配置项但DDNS_SSL优先级更高test_pythonhttpsverify_values、test_ddns_variables_override_standard_vars。extra 扩展字段DDNS_EXTRA_XXX形式的变量进入extra字段随配置透传给服务商 API可用于传递id/token之外的服务商专属参数见 config.py 的_process_extra_from_source()。环境变量完整参数列表环境变量参数格式描述示例DDNS_CONFIG文件路径支持逗号或分号分隔多个路径支持远程 HTTP(S) URL指定配置文件路径支持多个配置文件和远程配置DDNS_CONFIGconfig.json或DDNS_CONFIGcloudflare.json,dnspod.jsonDDNS_CONFIGhttps://ddns.newfuture.cc/tests/config/debug.jsonDDNS_DNS服务商标识如cloudflare、alidns、dnspodDNS 服务商完整列表见 docs/providers/DDNS_DNScloudflareDDNS_ID依 DNS 服务商而定API 账号或 IDDDNS_IDuserexample.comDDNS_TOKEN依 DNS 服务商而定API 授权令牌或 SecretDDNS_TOKENabcdef123456DDNS_ENDPOINTURLhttp 或 https 协议自定义 API 地址DDNS_ENDPOINThttps://api.dns.cnDDNS_IPV4域名数组或逗号分隔字符串IPv4 域名列表DDNS_IPV4[t.com,4.t.com]DDNS_IPV6域名数组或逗号分隔字符串IPv6 域名列表DDNS_IPV6t.com,6.t.comDDNS_INDEX4数字、default、public、url:、regex:、cmd:、shell:可为数组IPv4 获取方式DDNS_INDEX4[0,regex:192.168.*]DDNS_INDEX6数字、default、public、url:、regex:、cmd:、shell:可为数组IPv6 获取方式DDNS_INDEX6publicDDNS_TTL整数单位秒依服务商而定设置 DNS TTLDDNS_TTL600DDNS_LINE依服务商而定如电信、移动DNS 解析线路DDNS_LINE电信DDNS_PROXYhttp://host:port或 DIRECT支持多代理数组或分号分隔HTTP 代理设置DDNS_PROXYhttp://127.0.0.1:1080;DIRECTDDNS_CACHEtrue、false 或文件路径启用缓存或指定缓存文件路径DDNS_CACHE/tmp/cacheDDNS_CACHE_MAX_AGE非负整数秒缓存文件最大有效期默认 2592000 表示每次运行清空已有缓存DDNS_CACHE_MAX_AGE86400DDNS_HTTP_HOST监听地址Web 与 HTTP MCP 共享监听地址DDNS_HTTP_HOST127.0.0.1DDNS_HTTP_PORT0–65535 的整数Web 与 HTTP MCP 共享端口DDNS_HTTP_PORT9876DDNS_HTTP_TOKEN无空格的可见 ASCII 字符串Web API 与 HTTP MCP 共享 tokenDDNS_HTTP_TOKENsecretDDNS_HTTP_ORIGINSJSON 数组或逗号/分号分隔列表允许跨源访问/mcp的精确 originDDNS_HTTP_ORIGINS[https://ddns.example.com]DDNS_SSLtrue、false、auto 或文件路径设置 SSL 验证方式或指定证书路径DDNS_SSLfalseDDNS_SSL/path/ca.crtDDNS_CRONCron 表达式格式字符串仅 Docker 环境有效Docker 容器内定时任务周期DDNS_CRON*/10 * * * *DDNS_LOG_LEVELDEBUG、INFO、WARNING、ERROR、CRITICAL设置日志等级DDNS_LOG_LEVELDEBUGDDNS_LOG_FILE文件路径设置日志输出文件默认输出到终端DDNS_LOG_FILE/tmp/ddns.logDDNS_LOG_FORMATPython logging 格式模板设置日志格式DDNS_LOG_FORMAT%(message)sDDNS_LOG_DATEFMT日期时间格式字符串设置日志时间格式DDNS_LOG_DATEFMT%m-%d %H:%M注意数组参数务必确认引号正确可以先用echo $DDNS_IPV4之类命令打印出来查看实际值。基础配置参数配置文件路径DDNS_CONFIG类型字符串必需否默认值按默认路径搜索config.json、~/.ddns/config.json等格式单个文件路径、多个文件路径用逗号或分号分隔、或远程 HTTP(S) URL说明指定配置文件路径支持多个配置文件同时使用和远程配置文件# 单个配置文件 export DDNS_CONFIGconfig.json export DDNS_CONFIG/path/to/ddns.json # 远程配置文件 export DDNS_CONFIGhttps://ddns.newfuture.cc/tests/config/debug.json export DDNS_CONFIGhttps://user:passwordconfig.example.com/ddns.json # 多个配置文件 export DDNS_CONFIG/etc/ddns/cloudflare.json,./dnspod.json # 混合本地和远程配置 export DDNS_CONFIGlocal.json,https://remote.example.com/config.json默认搜索路径在 DEFAULT_CONFIG_PATHS 中定义为config.json、~/.ddns/config.json、~/.ddns.json、/etc/ddns/config.json、/etc/ddns.jsonload_configs() 会按顺序取第一个存在的文件。远程 URL 的加载逻辑见 load_config()通过request(GET, config_path, proxiesproxy, verifyssl, retries3)拉取因此DDNS_PROXY与DDNS_SSL同样会影响远程配置的下载。若指定的本地路径不存在程序会提示Config file ... does not exist!并退出若完全没有任何配置无 CLI、无文件、无环境变量当前版本会自动生成默认配置config.json并提示使用ddns --new-config源码中已标注该行为将在未来版本弃用见 config/init.py L149-L156。DNS 服务商DDNS_DNS类型字符串必需否默认值文档中标注为dnspod从源码看Config中self.dns self._get(dns, )的内置默认值为空若三个来源最终都没有提供服务商_validate_configs()会以 exit code 2 报错退出因此实际部署时建议始终显式指定可选值51dns、alidns、aliesa、callback、cloudflare、debug、dnscom、dnspod、dnspod_com、edgeone、he、huaweidns、noip、tencentcloud等说明DNS 服务提供商export DDNS_DNSalidns # 阿里云 DNS export DDNS_DNSaliesa # 阿里云企业版 DNS export DDNS_DNScloudflare # CloudFlare export DDNS_DNSdnspod # DNSPod 国内版 export DDNS_DNSdnspod_com # DNSPod 国际版 export DDNS_DNSdnscom # DNS.COM export DDNS_DNS51dns # 51DNS (DNS.COM别名) export DDNS_DNShe # HE.net export DDNS_DNShuaweidns # 华为云 DNS export DDNS_DNSnoip # NoIP export DDNS_DNStencentcloud # 腾讯云 DNS export DDNS_DNSedgeone # 腾讯云 EdgeOne export DDNS_DNScallback # 自定义回调 export DDNS_DNSdebug # 调试模式需要注意的是当前仓库的--dns命令行参数 choices 列表见 cli.py L175-L194已扩展为 17 个取值在文档上表基础上还包括cloudns、edgeone_dns、namesilo、westddns/provider/目录下亦有对应的实现文件。使用环境变量时建议以当前版本的ddns -h输出为准。API 凭证DDNS_ID 与 DDNS_TOKENDDNS_ID为 API 账号、邮箱或 Access Key IDDDNS_TOKEN为 API 授权令牌或 Secret。两者格式依服务商而定。结合上文环境变量基础规则可知token在解析时被特殊对待永远按原始字符串处理、不做数组解析这是为了避免形如[secret]的密钥被误解析同时避免解析失败信息泄漏到 stderr。API 端点DDNS_ENDPOINT类型字符串必需否默认值无使用各 DNS 服务商的默认 API 端点说明API 端点 URL用于自定义或私有部署的 API 地址export DDNS_ENDPOINThttps://api.example.com # 自定义API端点 export DDNS_ENDPOINThttps://private.dns.com # 私有部署的DNS API export DDNS_ENDPOINT # 使用默认端点域名与 IP 获取方式DDNS_IPV4 / DDNS_IPV6域名列表类型数组支持 JSON 格式必需否默认值[]说明需要更新 IPv4 / IPv6 记录的域名列表# JSON 数组格式推荐 export DDNS_IPV4[example.com, sub.example.com] # 单个域名 export DDNS_IPV4example.com # 禁用 IPv4 更新 export DDNS_IPV4[]DDNS_INDEX4 / DDNS_INDEX6IP 获取方式类型字符串或数组必需否默认值[default]使用系统默认外网 IP说明IPv4/IPv6 地址获取方式。支持逗号,或分号;分隔的字符串格式特殊说明普通项会照常按逗号或分号分割当某一项以url:、regex:、cmd:或shell:开头时从该前缀起的剩余内容会作为一个完整配置项保留不再继续分割# 默认方式系统默认外网 IP export DDNS_INDEX4default # 公网 IP export DDNS_INDEX4public # 指定网卡第 0 个网卡 export DDNS_INDEX40 # 自定义 URL 获取 export DDNS_INDEX4url:http://ip.sb # 正则匹配注意转义- 不支持分割 export DDNS_INDEX4regex:192\\.168\\..* # 执行命令 - 不支持分割 export DDNS_INDEX4cmd:curl -s http://ipv4.icanhazip.com # Shell 命令 - 不支持分割 export DDNS_INDEX4shell:ip route get 8.8.8.8 | awk {print \$7} # 逗号分隔多种普通方式 export DDNS_INDEX4public,default # 普通回退项 内部包含逗号的特殊项 export DDNS_INDEX4public;url:https://example.com/ip?values1,2 # 包含逗号的正则表达式整体作为单一配置 export DDNS_INDEX4regex:192\\.168\\..*,10\\..* # 多种方式组合JSON 数组 export DDNS_INDEX4[public, regex:172\\..*] # 禁用 IPv4 获取 export DDNS_INDEX4false这一特殊前缀不分割规则由 split_array_string() 实现SIMPLE_ARRAY_PARAMS [ipv4, ipv6, proxy, index4, index6]中的值会经过该函数仅对index4/index6传入preserve_specialTrue函数先定位第一个特殊前缀SPECIAL_ARRAY_PREFIXES (url:, regex:, cmd:, shell:)出现且合法起始的位置前缀之前的内容按分隔符拆分而遇到特殊前缀项后从该项起把剩余所有片段用原分隔符重新拼接回一个完整项因此regex:或url:内部的逗号、分号不会被破坏。各取值在运行期的落点见 ddns/ip.pydefault通过无连接 UDPsocket.connect()探测默认出口网卡public按优先级轮询内置的公网 API 列表如https://api.ipify.org、https://ipv4.ddnsip.cn等见 PUBLIC_IPV4_APIS一个失败自动尝试下一个url:直接请求指定 URL 并用 IP 正则提取regex:对网卡地址做正则筛选cmd:/shell:执行本地命令解析输出。index4false会经由 Config 中的 is_false() 判定为禁用。网络配置代理设置DDNS_PROXY类型数组支持 JSON 格式或分号分隔必需否默认值无说明HTTP 代理设置支持多代理轮换DIRECT表示直连# 单个代理 export DDNS_PROXYhttp://127.0.0.1:1080 # 多个代理JSON 数组格式 export DDNS_PROXY[http://proxy1:8080, http://proxy2:8080, DIRECT] # 分号分隔格式 export DDNS_PROXYhttp://proxy1:8080;http://proxy2:8080;DIRECT # DIRECT 表示直连 export DDNS_PROXYDIRECT值得注意的是DDNS_PROXY在加载早期就会参与工作load_configs() 用split_array_string(..., preserve_specialFalse)解析代理列表后直接作为proxies传入远程配置文件的 HTTP 请求——也就是说拉取远程DDNS_CONFIG本身也可以走代理。SSL 证书验证DDNS_SSL类型字符串或布尔值必需否默认值auto说明SSL 证书验证方式控制 HTTPS 连接的证书验证行为可选值true强制验证 SSL 证书最安全false禁用 SSL 证书验证最不安全auto优先验证SSL 证书错误时自动降级不安全文件路径使用指定路径的自定义 CA 证书最安全export DDNS_SSLtrue # 强制验证SSL证书 export DDNS_SSLfalse # 禁用SSL验证不推荐 export DDNS_SSLauto # 自动降级模式 export DDNS_SSL/etc/ssl/certs/ca-certificates.crt # 自定义CA证书对应源码中Config初始化的self.ssl str_bool(self._get(ssl, auto))str_bool()cli.py L26-L42把yes/true/t/y/1归一为True、no/false/f/n/0归一为False其余如auto、证书路径原样保留传给 HTTP 层的verify参数。该设置同时作用于 DNS API 请求、公网 IP 探测和远程配置下载。系统配置缓存DDNS_CACHE 与 DDNS_CACHE_MAX_AGEDDNS_CACHE 类型布尔值或字符串必需否默认值true说明启用缓存以减少重复 API 请求# 启用缓存默认路径 export DDNS_CACHEtrue # 禁用缓存 export DDNS_CACHEfalse # 自定义缓存文件路径 export DDNS_CACHE/path/to/ddns.cacheDDNS_CACHE_MAX_AGE 类型非负整数秒默认值2592003 天说明控制整个缓存文件的有效期秒在下一次运行时按文件 mtime 判断边界值也算过期未来 mtime 也算过期它不是 DNS TTL缓存仍是扁平 JSON任何内容写入都会刷新整个文件并影响所有记录不进行迁移共享缓存限制不变export DDNS_CACHE_MAX_AGE86400实现上Cache.new() 处理三种取值false时返回None禁用true时使用临时目录下的ddns.hash.cache否则按给定路径创建缓存文件。有效期判定逻辑为expired cache.time now or now - cache.time cache_max_age——即文件时间戳在未来、或距今达到/超过cache_max_age秒含边界时清空缓存0则意味着每次运行都判定过期。配置侧的取值校验见 _get_cache_max_age()必须是非负整数否则抛出ValueError。Web 与 HTTP MCPDDNS_HTTP_HOST / PORT / TOKEN / ORIGINSDDNS_HTTP_HOST、DDNS_HTTP_PORT、DDNS_HTTP_TOKEN和DDNS_HTTP_ORIGINS对ddns web与ddns mcp --transport http同时生效。命令行参数和 JSON 顶层http对象会覆盖这些环境变量。环境变量默认值说明DDNS_HTTP_HOST127.0.0.1监听地址DDNS_HTTP_PORT9876监听端口0–65535DDNS_HTTP_TOKEN无Web API 与 HTTP MCP 共享 tokenDDNS_HTTP_ORIGINS空允许跨源访问/mcp的精确 origin 列表export DDNS_HTTP_HOST127.0.0.1 export DDNS_HTTP_PORT9876 export DDNS_HTTP_TOKENsecret export DDNS_HTTP_ORIGINS[https://ddns.example.com]默认值与校验规则见 ddns/http_config.pyDEFAULT_HTTP_HOST 127.0.0.1、DEFAULT_HTTP_PORT 9876resolve_http_settings() 明确实现了 CLI JSON environment defaults 的合并顺序其中环境变量键名映射为http_host、http_port、http_token、http_origins与DDNS_前缀去掉后的键一致。安全约束normalize_http_settings()回环监听127.x、::1、localhost未设置DDNS_HTTP_TOKEN时Web API 和/mcp均免认证非回环或通配监听必须设置非空 token否则抛出HttpConfigErrortoken 只允许无空格的可见 ASCII 字符控制字符、换行符会被拒绝origins 必须是精确的http(s)://host[:port]形式支持 JSON 数组或逗号/分号分隔列表默认端口80/443会被规范化省略DDNS 不内置 TLS局域网监听应由受信 HTTPS 反向代理保护。Docker 定时任务DDNS_CRON类型字符串必需否默认值*/5 * * * *每 5 分钟说明Docker 容器中定时任务的执行周期仅在 Docker 环境中有效使用标准 cron 表达式格式格式分钟 小时 日 月 星期# 每 10 分钟执行一次 export DDNS_CRON*/10 * * * * # 每小时执行一次 export DDNS_CRON0 * * * * # 每天凌晨 2 点执行一次 export DDNS_CRON0 2 * * * # 每 15 分钟执行一次 export DDNS_CRON*/15 * * * * # 每 2 小时执行一次 export DDNS_CRON0 */2 * * *Cron 表达式说明字段允许值允许的特殊字符分钟0-59*,-/小时0-23*,-/日1-31*,-/月1-12*,-/星期0-7*,-/常用表达式*/5 * * * *- 每 5 分钟默认*/10 * * * *- 每 10 分钟*/15 * * * *- 每 15 分钟0 * * * *- 每小时0 */2 * * *- 每 2 小时0 0 * * *- 每天午夜0 2 * * *- 每天凌晨 2 点0 0 * * 0- 每周日午夜注意此环境变量仅在 Docker 容器中生效不影响通过其他方式运行的 DDNS 程序。其实现非常直观见 docker/entrypoint.sh容器无参数启动时执行CRON_SCHEDULE${DDNS_CRON:-*/5 * * * *}把schedule cd /ddns /bin/ddns写入/etc/crontabs/root随后先跑一次ddns再exec crond -f常驻。因此DDNS_CRON直接决定容器内 cron 的触发频率若以参数方式启动容器以-开头的参数会转发给ddns本身则不走 cron 分支。日志配置DDNS_LOG_LEVEL类型字符串必需否默认值INFO可选值CRITICAL、FATAL、ERROR、WARN、WARNING、INFO、DEBUG、NOTSET说明日志级别export DDNS_LOG_LEVELDEBUG # 调试模式 export DDNS_LOG_LEVELINFO # 信息模式 export DDNS_LOG_LEVELERROR # 仅错误级别解析由 log_level() 完成内部使用logging.getLevelName(value.upper())因此WARNING/WARN这类别名都能被正确映射为整数级别。DDNS_LOG_FILE类型字符串必需否默认值无输出到控制台说明日志文件路径export DDNS_LOG_FILE/var/log/ddns.log export DDNS_LOG_FILE./ddns.log_setup_logging() 在写日志文件前会自动创建不存在的父目录os.makedirs(log_dir)因此无需手动预建/var/log之类目录。DDNS_LOG_FORMAT类型字符串必需否默认值%(asctime)s %(levelname)s [%(module)s]: %(message)s说明日志格式字符串参考 Python logging 模块的格式化语法# 默认格式含模块名 export DDNS_LOG_FORMAT%(asctime)s %(levelname)s [%(module)s]: %(message)s # 包含文件名和行号debug模式下默认格式 export DDNS_LOG_FORMAT%(asctime)s %(levelname)s [%(filename)s:%(lineno)d]: %(message)s # 简单格式 export DDNS_LOG_FORMAT%(levelname)s: %(message)s源码中的实际默认策略config/init.py L51-L61未显式设置DDNS_LOG_FORMAT时DEBUG 级会自动使用含函数名/文件名/行号的详细格式WARNING 及以上级别使用%(asctime)s %(levelname)s: %(message)sINFO 级使用含 logger 名的格式。DDNS_LOG_DATEFMT类型字符串必需否默认值%Y-%m-%dT%H:%M:%S说明日期时间格式字符串参考 Pythontime.strftime()的格式化语法# ISO 格式默认 export DDNS_LOG_DATEFMT%Y-%m-%dT%H:%M:%S # 简短格式 export DDNS_LOG_DATEFMT%m-%d %H:%M:%S # 标准格式 export DDNS_LOG_DATEFMT%Y-%m-%d %H:%M:%S实战示例Docker 环境变量示例docker run -d \ -e DDNS_DNSdnspod \ -e DDNS_ID12345 \ -e DDNS_TOKENyour_token_here \ -e DDNS_IPV4example.com \ -e DDNS_IPV6[ipv6.example.com,example.com] \ -e DDNS_INDEX4[public, 0] \ -e DDNS_INDEX6public \ -e DDNS_TTL600 \ -e DDNS_LOG_LEVELINFO \ -e DDNS_LOG_FORMAT%(asctime)s %(levelname)s [%(module)s]: %(message)s \ -e DDNS_LOG_DATEFMT%Y-%m-%dT%H:%M:%S \ --network host \ newfuture/ddns在容器场景下还可以追加-e DDNS_CRON*/10 * * * *调整定时周期结合 docker/entrypoint.sh 的行为可知容器启动时会把printenv快照写入/etc/environment--network host模式下DDNS_INDEX4default更容易直接取到真实出口 IP。复杂配置示例#!/bin/bash # 阿里云 DNS 高级配置 export DDNS_DNSalidns export DDNS_IDyour_access_key_id export DDNS_TOKENyour_access_key_secret # 多域名配置 export DDNS_IPV4[ddns.example.com, home.example.com, server.example.com] export DDNS_IPV6[ipv6.example.com] # 多种 IP 获取方式 export DDNS_INDEX4[public, regex:192\\.168\\.1\\..*, cmd:curl -s ipv4.icanhazip.com] export DDNS_INDEX6public # 代理和缓存配置 export DDNS_PROXY[http://proxy.example.com:8080, DIRECT] export DDNS_CACHE/home/user/.ddns_cache # 日志配置 export DDNS_LOG_LEVELDEBUG export DDNS_LOG_FILE/var/log/ddns.log export DDNS_LOG_FORMAT%(asctime)s %(levelname)s [%(filename)s:%(lineno)d]: %(message)s export DDNS_LOG_DATEFMT%Y-%m-%d %H:%M:%S # TTL 设置 export DDNS_TTL300 # 运行 ddns注意事项与最佳实践数组参数格式index4、index6、ipv4、ipv6、proxy等数组参数支持两种格式JSON 数组格式[item1, item2]推荐解析路径为literal_eval见 env.py 的_try_parse_array()逗号分隔格式item1,item2特殊前缀规则对于index4和index6参数普通项仍按逗号或分号分割遇到以url:、regex:、cmd:或shell:开头的项后从该前缀起的剩余内容作为一个完整配置项保留。例如regex:192\\.168\\..*,10\\..*会被视为一个完整的正则表达式而不是两个配置项因为这类前缀的值内部可能包含逗号或分号分割会破坏配置的完整性。配置优先级和字段覆盖关系命令行参数 JSON 配置文件 环境变量。命令行参数覆盖 JSON 与环境变量的相同设置JSON 配置覆盖环境变量环境变量在两者都未设置时生效。另外JSON 配置中显式设置为null的值会覆盖环境变量设置相当于未设置该值前文的ttl三层示例即演示了这一点。大小写兼容环境变量名支持大写、小写或混合大小写如ddns_dns与DDNS_DNS等价键中的点号会被转换为下划线DDNS_LOG.LEVEL→log_level。安全提醒请妥善保管DDNS_TOKEN等敏感信息在脚本中使用时避免明文存储考虑使用.env文件或密钥管理系统需要对外提供 Web/MCP 服务时务必遵循非回环监听必须设置DDNS_HTTP_TOKEN的约束。调试建议出现问题时可设置DDNS_LOG_LEVELDEBUG获取详细日志信息此时日志格式会自动包含文件名与行号便于定位。以上机制均有可执行的验证路径环境变量解析行为可对照 tests/test_config_env.py 中的测试用例逐条理解配置合并行为见 tests/test_config_config.py如需进一步了解各参数的 CLI 等价形式可参考 docs/config/cli.mdJSON 配置的字段级说明见 docs/config/json.md。赞分享网络CLI【免费下载链接】DDNS自动更新域名解析到本机IP,支持dnspod,阿里DNS,CloudFlare,华为云,DNSCOM...项目地址https://gitcode.com/gh_mirrors/dd/DDNS点击查看免费下载相关推荐pnpr 环境变量配置指南PNPR_ 前缀参数注入、优先级规则与布尔取值全解析pnpr 环境变量配置指南 PNPR_ 前缀参数注入、优先级规则与布尔取值全解析 pnpr pnpm compatible npm registry ser包管理器开发工具CLILocal Deep Research 配置完全指南LDR_ 环境变量、优先级机制与全量配置项参考Local Deep Research 配置完全指南LDR_ 环境变量、优先级机制与全量配置项参考 Local Deep ResearchLDR的所有配置AI应用人工智能大模型RAGAI Agent深度研究本地部署后端前端Redmine RESTful API 实战5 步打通建单、改状态与批量同步Redmine RESTful API 实战5 步打通建单、改状态与批量同步 你有没有过这种需求CI 跑挂了想让 Redmine 里自动多一张缺陷单或者后端企业应用项目管理缺陷追踪研发协作上一篇OpenCore Legacy Patcher终极指南让老旧Mac焕发新生的完整教程下一篇TDengine用户自定义函数(UDF)开发指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考