ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Puter 自托管如何用 certbot DNS-01 获取通配符证书并接入 Caddy 的 443 配置?

Puter 自托管如何用 certbot DNS-01 获取通配符证书并接入 Caddy 的 443 配置? Puter 自托管如何用 certbot DNS-01 获取通配符证书并接入 Caddy 的 443 配置【免费下载链接】puter The Internet Computer! Free, Open-Source, and Self-Hostable.项目地址: https://gitcode.com/GitHub_Trending/pu/puterPuter 自托管栈面向公网时浏览器里会同时出现api.domain、site.domain、app.domain以及每个用户站点/应用运行时才生成的name.site.domain、name.app.domain。子域是动态出现的普通按主机名签发的证书盖不住它们所以 doc/self-hosting.md 的默认 TLS 路径是用certbot走 DNS-01 挑战签一张通配符证书把fullchain.pem/privkey.pem放进./puter/tls/再手工把 Caddy 接到 443。本文覆盖这条完整路径拿证、放证书、改 Caddyfile、docker-compose.yml、.env、config.json最后验证。适用前提Docker 带compose插件已按 doc/self-hosting.md 完成 Step 1.envputer/config/config.json和 Step 4docker-compose.yml、caddy/Caddyfile与.env同级docker compose up -d可正常跑起来。仓库自带一行安装脚本curl ... install.sh | sh它会自动生成上述文件手动流程则是把这两个文件从仓库里拷出来。一个你有 DNS 管理权限的域名。为什么不用 Caddy 自带的自动 HTTPScaddy/Caddyfile 顶部全局块里写着auto_https off这不是疏忽Caddy 自己签证书只针对它事先知道的主机名且 stock 的caddy:2.11-alpine镜像只走 HTTP-01Puter 的每个用户站点/应用都挂在运行时才发明的子域上只有通配符证书能覆盖通配符必须走 DNS-01而 DNS-01 需要一个 DNS provider 插件stock 镜像里没有。所以文档的结论是Caddy 不签证书由你用certbot签好后供它加载。想反过来让 Caddy 自己管理证书的可选分支见文末。第 1 步确保 DNS 里已有通配符记录certbot 的 DNS-01 验证依赖你能改 DNS同时 Puter 本身也要求通配符 A 记录存在否则子域根本不解析。在 DNS 服务商处添加主域加上 Puter 和 Caddy 实际路由的子域api.*、site.*、app.*、s3.*文档示例如下把puter.localhost系列换成你的域名A puter.localhost → your servers public IP A *.puter.localhost → your servers public IP A site.puter.localhost → your servers public IP A *.site.puter.localhost → your servers public IP A host.puter.localhost → your servers public IP A *.host.puter.localhost → your servers public IP A app.puter.localhost → your servers public IP A *.app.puter.localhost → your servers public IP A dev.puter.localhost → your servers public IP A *.dev.puter.localhost → your servers public IP其中your servers public IP是文档原文占位符替换为你的服务器公网 IP。通配符记录是必须的Puter 靠子域路由Caddy 还要把s3.domain的浏览器流量转给 RustFS。改完后可以用dig puter.localhost和dig api.puter.localhost确认返回你的服务器 IPDNS 生效慢时按文档提示等 5–60 分钟。第 2 步用 certbot DNS-01 获取通配符证书文档给出的命令是--manual模式加--preferred-challenges dns即由你在 DNS 里手动完成 DNS-01 验证。示例域名替换为你的主域名和各托管子域puter.localhost→ 你的主域site./host./app./dev.前缀对应 config.json 里配置的托管子域sudo certbot certonly --manual --preferred-challenges dns \ -d puter.localhost -d *.puter.localhost \ -d site.puter.localhost -d *.site.puter.localhost \ -d host.puter.localhost -d *.host.puter.localhost \ -d app.puter.localhost -d *.app.puter.localhost \ -d dev.puter.localhost -d *.dev.puter.localhost两个硬性要求证书必须覆盖*.puter.你的主域这样s3.puter.主域浏览器直连的 S3 端点和 Puter 自己的api.*/app.*子域才能全部通过验证通配符域名不能省-d puter.localhost这种裸主域单独签是没有用的。第 3 步把证书放进./puter/tls/命令成功后会产出fullchain.pem和privkey.pem把这两个文件放进./puter/tls/与.env同级的puter目录下Step 1 的mkdir -p puter/tls或安装脚本已经建好这个目录。docker-compose.yml 里 caddy 服务已经有对应的只读挂载改完证书文件不用动 composevolumes: - ./caddy/Caddyfile:/etc/caddy/Caddyfile:ro,z # TLS certs (wildcard fullchain.pem privkey.pem). Read-only inside. - ./puter/tls:/etc/caddy/tls:ro,z注意 caddy/Caddyfile 是:ro只读挂载且 Docker 会在路径缺失时把它建成一个目录导致puter-caddy以 not a directory 挂掉——改配置前先确认caddy/Caddyfile文件存在。第 4 步修改 Caddyfile、docker-compose.yml、.env、config.json**1. 打开 caddy/Caddyfile取消文件底部# :443 { … }块的注释。**取消注释后的内容:443 { tls /etc/caddy/tls/fullchain.pem /etc/caddy/tls/privkey.pem import puter_routes }/etc/caddy/tls/是容器内路径对应的就是上一步的./puter/tls/。import puter_routes复用与:80相同的转发逻辑RustFS 走s3.子域、其余全部 Host 转发给puter:4100保证 HTTPS 与 HTTP 两条路径不漂移。2.可选但推荐把:80 { import puter_routes }换成文档旁边给出的redir版本强制全站 HTTPS:80 { redir https://{host}{uri} permanent }3. 在 docker-compose.yml 的caddy服务下取消443:443端口映射的注释ports: - ${HTTP_PORT:-80}:80 - ${HTTPS_PORT:-443}:4434. 在.env中取消HTTPS_PORT443的注释Step 1 生成的.env里它默认是注释状态。5. 修改puter/config/config.json切换协议和端口{ protocol: https, pub_port: 443 }同时把 S3 的浏览器端点从http://s3.puter.localhost换成 https文档示例s3: { s3Config: { publicEndpoint: https://s3.puter.local, ... } }publicEndpoint是发给浏览器的预签名 URL 端点必须换成https://s3.你的域名否则开启 TLS 后会产生混合内容问题。如果走的是安装脚本它还会做一道检查PUTER_PROTOCOLhttps但./puter/tls/fullchain.pem不存在时install.sh 会明确警告“The bundled Caddy is still serving plain HTTP”提示你把通配符证书放进puter/tls并取消 Caddyfile 中:443块的注释或改用自己的代理终结 TLS。第 5 步启动并验证docker compose up -d docker compose logs -f puter首次启动约 30 秒等 MariaDB 初始化、Puter 应用 schema。文档给出的健康启动日志示例“文档示例”输出你的行内容会略有差异[config] override from /etc/puter/config.json [mysql] running migrations from /opt/puter/dist/src/backend/clients/database/migrations/mysql: 2 file(s) [mysql] applied mysql_mig_1.sql (...) [mysql] applied mysql_mig_2.sql (9 statements)然后浏览器访问https://puter.localhost换成你的主域。首次登录用admin临时密码在 puter 容器日志里打印一次docker compose logs puter | grep tmp_password登录进去后在 Settings 里改掉密码。如果站点能打开但 Caddy 返回 502 / Bad Gateway说明 puter 容器没起来docker compose logs puter会指出是哪个依赖拒了它——文档指出的最常见原因是.env与config.json里的 MariaDB 密码不一致。若docker compose up卡在 waiting for service to be healthy用docker compose ps看哪个容器 unhealthy再logs service查原因MariaDB 冷启动需要 20–30 秒其余服务都小于 5 秒。可选分支让 Caddy 自己签发通配符证书如果不想每次手动跑 certbot文档给出的替代方案是自建一个带 DNS provider 插件的 Caddy 镜像xcaddy build --with github.com/caddy-dns/provider然后把 Caddyfile 里的tls行换成tls { dns provider … }块。此时 stock 镜像不再适用compose 里的caddy:2.11-alpine要换成你的自建镜像其余接入步骤证书文件、443 端口、config.json协议切换不受影响。至此auto_https off下 Caddy 从./puter/tls/读取你签发的通配符证书80 端口按配置保留或全部 301 到 443api.*、site.*、app.*、s3.*以及用户运行时生成的子域全部落在同一张证书覆盖范围内。后续如果要换证书重复第 2、3 步把新的fullchain.pem/privkey.pem覆盖进./puter/tls/即可。【免费下载链接】puter The Internet Computer! Free, Open-Source, and Self-Hostable.项目地址: https://gitcode.com/GitHub_Trending/pu/puter创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表