Files
awoooi/scripts/ops/fix-188-registry-certbot-renewal.sh
Your Name cfb866d055
Some checks failed
Ansible Lint / lint (push) Successful in 35s
CD Pipeline / tests (push) Failing after 13s
CD Pipeline / build-and-deploy (push) Has been skipped
CD Pipeline / post-deploy-checks (push) Has been skipped
Code Review / ai-code-review (push) Failing after 11s
feat(governance): add agent market automation surfaces
2026-06-04 21:50:55 +08:00

85 lines
2.3 KiB
Bash

#!/usr/bin/env bash
# 修復 188 registry.wooo.work HTTP-01 renewal route 並強制更新憑證。
# 用法:在 188 主機以 root 執行:
# sudo bash /tmp/fix-188-registry-certbot-renewal.sh
set -euo pipefail
CONF_AVAILABLE="/etc/nginx/sites-available/internal-tools-https.conf"
CONF_ENABLED="/etc/nginx/sites-enabled/internal-tools-https.conf"
WEBROOT="/var/www/certbot"
DOMAIN="registry.wooo.work"
STAMP="$(date +%Y%m%d%H%M%S)"
if [ "$(id -u)" -ne 0 ]; then
echo "ERROR: 請在 188 主機用 root/sudo 執行。" >&2
exit 1
fi
if [ ! -f "$CONF_AVAILABLE" ]; then
echo "ERROR: 找不到 $CONF_AVAILABLE" >&2
exit 1
fi
cp "$CONF_AVAILABLE" "${CONF_AVAILABLE}.bak-${STAMP}-registry-http01"
mkdir -p "${WEBROOT}/.well-known/acme-challenge"
chmod 0755 "$WEBROOT" "${WEBROOT}/.well-known" "${WEBROOT}/.well-known/acme-challenge"
if ! grep -q "AWOOOI internal-tools HTTP-01 managed block" "$CONF_AVAILABLE"; then
tmp="$(mktemp)"
cat >"$tmp" <<'EOF'
# AWOOOI internal-tools HTTP-01 managed block
server {
listen 80;
server_name
gitea.wooo.work
sentry.wooo.work
langfuse.wooo.work
harbor.wooo.work
registry.wooo.work
stock.wooo.work;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
EOF
cat "$CONF_AVAILABLE" >>"$tmp"
install -o root -g root -m 0644 "$tmp" "$CONF_AVAILABLE"
rm -f "$tmp"
fi
ln -sfn "$CONF_AVAILABLE" "$CONF_ENABLED"
nginx -t
systemctl reload nginx
probe="awoooi-certbot-${STAMP}"
printf '%s\n' "$probe" >"${WEBROOT}/.well-known/acme-challenge/${probe}"
trap 'rm -f "${WEBROOT}/.well-known/acme-challenge/${probe}"' EXIT
body="$(curl -fsS --max-time 10 "http://${DOMAIN}/.well-known/acme-challenge/${probe}")"
if [ "$body" != "$probe" ]; then
echo "ERROR: HTTP-01 webroot probe failed for ${DOMAIN}" >&2
exit 1
fi
if [ -x /snap/bin/certbot ]; then
CERTBOT=/snap/bin/certbot
else
CERTBOT=/usr/bin/certbot
fi
"$CERTBOT" renew --cert-name "$DOMAIN" --force-renewal --deploy-hook "systemctl reload nginx"
systemctl reload nginx
systemctl reset-failed certbot.service snap.certbot.renew.service 2>/dev/null || true
echo | openssl s_client -servername "$DOMAIN" -connect "${DOMAIN}:443" 2>/dev/null \
| openssl x509 -noout -subject -issuer -dates
echo "REGISTRY_CERTBOT_RENEWAL_OK"