
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
一个支持配置热重载的Varnish设置,可直接用于Kubernetes和Docker化环境,无需复杂操作即可部署和运行。
SIGHUP信号进行配置重载9131与其他Kubernetes Varnish操作器的区别:
shdocker build -t livingdocs/varnish .
为简单起见,支持最常见的参数。注意,配置文件中的参数始终覆盖这些CLI参数。
--config-source /etc/varnish/source:配置和模板目录
--config-output /etc/varnish:Varnish VCL文件的目标目录
--backend example.com:声明config.clusters[0].addresses: [example.com]
-p default_ttl=60:声明config.parameters.default_ttl: 60或其他任何Varnish参数
--storage default,512m:Varnish存储配置
CONFIG_YAML或CONFIG_JSON环境变量:支持传递整个配置对象
sh# 例如使用请求微缓存,TTL设为1 docker run --rm -it -p 8080:8080 --name varnish docker.xuanyuan.run/livingdocs/varnish --backend host.docker.internal:8081 -p default_ttl=1 -p default_grace=60
shecho ' listenAddress: 0.0.0.0:8080 watchFiles: true watchDns: false clusters: - name: delivery address: host.docker.internal:8081 ' > config.yaml docker run --rm -it -v $PWD:/etc/varnish/source -p 8080:8080 --name varnish docker.xuanyuan.run/livingdocs/varnish
shecho ' { "listenAddress": "0.0.0.0:8080", "watchFiles": true, "watchDns": false, "clusters": [{"name": "delivery", "address": "host.docker.internal:8081"}] } ' > config.json docker run --rm -it -v $PWD:/etc/varnish/source -p 8080:8080 --name varnish docker.xuanyuan.run/livingdocs/varnish
支持YAML和JSON配置文件。选择YAML的原因是它支持多行字符串,便于嵌入配置。
配置文件必须位于Varnish配置源目录中。默认目录为/etc/varnish/source,可通过--config-source CLI选项覆盖。请勿将此目录更改为/etc/varnish,否则文件监视器会陷入无限更新循环。
注意,在Kubernetes中,无法在挂载配置映射的目录中写入任何文件。
配置文件更改会被监视并触发Varnish内的重载。注意,如果文件所有者不是varnish,文件通知可能无法正常工作。
也可通过向主进程发送SIGHUP信号重载配置。
整个配置对象会传递给VCL模板,因此可添加自定义变量并传递给模板渲染器。
yaml# /etc/varnish/source/config.yaml # 静态配置 # # 支持任何Varnish监听选项 listenAddress: 0.0.0.0:8080,HTTP adminListenAddress: 0.0.0.0:2000 prometheusListenAddress: 0.0.0.0:9131 # 直接传递给进程的命令参数 # 例如,要添加次要监听地址,可传递选项 varnishRuntimeParameters: [-a, /path/to/listen.sock] # Varnish存储配置 storage: default,512m # 为管理端口定义自定义密钥 # 默认情况下会生成一个密钥并写入密钥文件 # 如果密钥文件已包含值,则优先使用该值 adminSecret: null adminSecretFile: /etc/varnish/secret # 启用HTTP访问日志输出到stdout varnishAccessLogs: true # 关闭期间,Varnish会在/_health上返回503错误 shutdownDelay: 5s # 动态配置 # # 可显式禁用触发配置重载的文件监视 # 向运行中的进程发送'kill -SIGHUP 1'也会重载配置 watchFiles: true watchDns: true # Varnish通过X-Served-By头响应请求 # 可在此自定义,{{hostname}}会自动替换 xServedBy: "{{hostname}}" # 可声明多个VCL并在加载的顶级VCL配置中引用它们 vcl: - name: default # 配置相对于配置文件的路径 # 即/etc/varnish/source/default.vcl.ejs # 仅监视/etc/varnish/source中的文件变化,建议保持此路径 src: default.vcl.ejs # 最终文件的目标路径默认为 # '/etc/varnish'目录中不带ejs扩展名的模板名 dest: default.vcl # 如有多个VCL,在主VCL上声明此标志,以便知道哪个设为活动状态 top: true - name: secondary src: secondary.vcl.ejs # 可在cluster.probe配置中引用的探针 probes: # 仅name为必填项,其余为默认值 # 在VCL中,探针名称为probe_delivery(Varnish需要唯一名称) - name: probe_delivery url: /status interval: 5s timeout: 4s window: 3 threshold: 2 initial: null acl: # 默认VCL配置中需要清除ACL - name: acl_purge entries: - "# localhost" - localhost - 127.0.0.1 - ::1 - "# 私有网络" - 10.0.0.0/8 - 172.16.0.0/12 - 192.168.0.0/16 clusters: # 为集群命名,名称用于轮询调度器 # 请勿使用'backend'或'default',这些是保留关键字 - name: delivery # 单个主机名 # 自动创建指向A记录后所有IP地址的轮询调度器 # 调度器名称为cluster.name,此处为'delivery' address: host.docker.internal:8081 # 或多个主机名 addresses: [host.docker.internal:8081] # 配置根级声明的探针 probe: probe_delivery # 为集群中的每个后端定义后端参数 # 未声明则使用Varnish默认值 maxConnections: null firstByteTimeout: null betweenBytesTimeout: null connectTimeout: null # 启用请求失败时的后台获取 # 默认启用(值为1) fetchRetries: 1 # 在请求哈希并发送到后端前始终删除所有查询字符串 stripQueryString: false, # 启动和文件更改时加载的任何Varnish参数 # 如未提供parameter对象,则使用以下默认值 parameters: feature: +http2,+esi_disable_xml_check default_grace: 86400 default_keep: 3600 default_ttl: 60 backend_idle_timeout: 65 timeout_idle: 60 syslog_cli_traffic: off # 无需完全自定义镜像内置的VCL # 可使用这些钩子,它们会放置在特定位置 hooks: # 也可使用多行字符串 import: | import accept; global: "" vclInit: "" vclRecvStart: "" vclRecvBackendHint: "" vclRecvEnd: "" vclHash: "" vclDeliverStart: "" vclDeliverEnd: "" vclSynthStart: "" vclSynthEnd: ""
使用EJS模板生成Varnish VCL文件。所有配置应存储在/etc/varnish/source目录中,该目录会被监视并在更改时触发重载。
config.json或config.yaml文件以及VCL模板应位于/etc/varnish/source/目录中。构建时,VCL文件会写入/etc/varnish目录(例如/etc/varnish/varnish.vcl)。
yamlvcl: - name: varnish src: varnish.vcl.ejs
在VCL模板中,可完全访问config对象:
<%= config.something || '' %>
支持以下特定包含文件:
探针:
<% for (const probe of config.probes) { %><%- include('probe', probe) %><% } -%>
后端:
<% for (const cluster of config.clusters) { %><%- include('backend', cluster) %><% } -%>
ACL:
<% for (const acl of config.acl) { %><%- include('acl', {"name": "purge", "entries:}) %><% } -%> // 或 <%- include('acl', {"name": "purge", "entries": ["127.0.0.1"]}) %>
调度器:
<% for (const cluster of config.clusters) { %><%- include('director', cluster) -%><% } %>
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务