2026年租用 Mac Mini 7×24 決策矩陣
certbot 憑證自動續期、launchd 健康探測與夜間靜默視窗參數清單
🔒💻 獨立開發者在租用 Mac Mini上七乘二十四跑閘道、反代與監控時,最怕 HTTPS 在無人值守時悄悄過期——certbot 續期日曆漂移、renew-hook誤殺行程、探針只看存活不看 notAfter。本文凍結決策矩陣、launchd/crontab 可執行片段與斷電恢復 FAQ。內鏈 首頁、launchd 與 pm2 行程守護對照、APFS 磁碟水位 FAQ;CTA 指向 購買頁。
⚡痛點拆解
- 挑戰漂移:遷移反代后八十埠關閉,HTTP-01 靜默失败;DNS-01 權杖只活在互動 shell,續期無人值守即断。
- 重載半徑:樸素
renew-hook重啟整機服務,夜批中 OpenClaw 閘道被連帶踢下線。 - 探測盲區:健康探測 只看行程 PID,不看憑證剩餘天數,監控全绿但瀏覽器报 ERR_CERT_DATE_INVALID。
HTTP-01 與 DNS-01:certbot 挑戰模式怎麼選
每個主機名只選一种主模式;泛網域必须 DNS-01;單 IP 反代且公網可達八十/四四三时常用 HTTP-01。
- HTTP-01:nginx 暴露
/.well-known/acme-challenge/,適合租機單公網 IP。 - DNS-01:Cloudflare/Route53 插件;適合
*.gateway.example.dev與上游封 eighty 口。 - 預發:除錯 plist 前先
certbot certonly --staging,避免 Let's Encrypt 限流。
# HTTP-01(nginx 插件示例)
sudo certbot certonly --nginx -d gateway.example.dev \
--deploy-hook /usr/local/bin/reload-proxy.sh
# DNS-01(權杖走鑰匙圈,勿提交倉庫)
export CF_DNS_API_TOKEN="$(security find-generic-password -s certbot-cf -w)"
sudo -E certbot certonly --dns-cloudflare \
-d gateway.example.dev -d '*.gateway.example.dev'
七乘二十四 certbot 與 launchd 決策矩陣
| 控制项 | 起步值 | 说明 |
|---|---|---|
| 挑戰模式 | HTTP-01 或 DNS-01 | 泛網域强制 DNS;埠矩陣寫入跑冊 |
| 續期日曆 | 本地 03:17、15:17 | 與備份、夜批窗錯峰 |
| 健康探測 | 60s curl + 7d 閘口 | 剩餘 <14 天且非靜默则页 |
| UTC 靜默带 | 22:00–06:00+30分 | 續期雜訊 Webhook 降級;P1 绕过 |
| 排程器 | launchd LaunchAgent | 實驗室可用 crontab 見下节 |
| renew-hook | 僅重載反代 | 禁止重啟 OpenClaw 守護 |
launchd 定時續期、renew-hook 與 crontab 備選
租機長跑優先 launchd StartCalendarInterval:日志路徑固定、重啟后仍載入。配对 renew-hook 先 nginx -t 再 HUP。
<?xml version="1.0" encoding="UTF-8"?>
<plist version="1.0"><dict>
<key>Label</key><string>com.runmini.certbot-renew</string>
<key>ProgramArguments</key><array>
<string>/opt/homebrew/bin/certbot</string>
<string>renew</string><string>--quiet</string>
<string>--deploy-hook</string>
<string>/usr/local/bin/reload-proxy.sh</string>
</array>
<key>StartCalendarInterval</key><array>
<dict><key>Hour</key><integer>3</integer><key>Minute</key><integer>17</integer></dict>
<dict><key>Hour</key><integer>15</integer><key>Minute</key><integer>17</integer></dict>
</array>
<key>StandardOutPath</key><string>/var/log/certbot-renew.log</string>
</dict></plist>
#!/bin/bash
# reload-proxy.sh — 僅反代,不碰 OpenClaw
nginx -t && kill -HUP "$(cat /usr/local/var/run/nginx.pid)"
17 3,15 * * * /opt/homebrew/bin/certbot renew -q \
--deploy-hook /usr/local/bin/reload-proxy.sh \
>> /var/log/certbot-renew.log 2>&1
載入:launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/com.runmini.certbot-renew.plist。Node 閘道疊部見 launchd 與 pm2 對照稿。
夜間靜默視窗、健康探測與告警路由
把 certbot 續期 放進 UTC 靜默窗,預期重載雜訊不叫醒值班;另起六十秒 健康探測 區分 TLS 與上游故障。
#!/bin/bash
# com.runmini.tls-health — 憑證天數 + /healthz
END=$(openssl s_client -connect 127.0.0.1:443 -servername gateway.example.dev 2>/dev/null \
| openssl x509 -noout -enddate | cut -d= -f2)
EPOCH=$(date -j -f "%b %e %T %Y %Z" "$END" "+%s")
DAYS=$(( (EPOCH - $(date +%s)) / 86400 ))
[ "$DAYS" -lt 14 ] && curl -fsS -X POST "$ALERT_URL" -d "{\"days_left\":$DAYS}"
curl -fsS --max-time 5 https://gateway.example.dev/healthz || exit 1
- 22:00–06:00 UTC 加三十分鐘緩衝:抑制
tls_renew非 P1。 - 剩餘 <7 天立即分頁;14 天內靜默外僅記 warning。
- 標籤區分
tls_renew與upstream_down,免 SSH 盲猜。
磁碟與日誌水位:續期前的 APFS 閘口
磁碟滿會導致 ACME 寫失敗與 certbot-renew.log 暴漲。對齊 APFS 水位 FAQ 再開無人值守 renew。
- 黃十五紅十:黃線暫停新 renew 并清輪轉日志;紅線停 certbot 立即分頁。
/var/log/certbot-renew.log:128MB×7 天 newsyslog。- 續期與深窗備份錯開,IO 公平見 launchd 節流專文。
落地步驟(六步)
可引用資訊
- 續期日曆:03:17、15:17 本地;探測週期 60s。
- 靜默:22:00–06:00 UTC +30min;憑證閘口 14d/7d。
- 磁碟:黄15% 红10%;certbot 日志 128MB×7。
斷電恢復 FAQ
問:續期會不會打斷 OpenClaw 夜批? 答:renew-hook 只 HUP 反代;閘道保持 127.0.0.1 迴圈,勿 systemctl 式全量重啟。
問:launchd 還是 crontab? 答:租機 7×24 託管 選 launchd;crontab 僅短期實驗。
問:斷電重啟後做什麼? 答:certbot certificates 核對有效期;APFS 高於黃線;冪等檢查點回放後再開告警。詳見 APFS FAQ。
把 certbot 續期、launchd 與健康探測寫進同一跑冊,閘道才能在租機上真正七乘二十四可稽核。回到 首頁 查看節點與套餐。
租用 Mac Mini:七乘二十四 TLS 與 launchd 續期
需要Apple Silicon長跑節點承载反代與閘道?先看 定價,經 免登入購買頁 下單;對照 launchd 與 pm2 對照稿;連線見 幫助中心 SSH/VNC。