#!/usr/bin/env bash set -euo pipefail cd "$(dirname "$0")" DOMAIN="vpn.yyamashita.com" CADDY_DIR="/app/infra/caddy" CADDY_CERT_BASE="/data/caddy/certificates/acme-v02.api.letsencrypt.org-directory/${DOMAIN}/${DOMAIN}" echo "証明書を更新中..." mkdir -p certs if ! docker compose -f "$CADDY_DIR/docker-compose.yml" exec -T caddy \ cat "${CADDY_CERT_BASE}.crt" > certs/server.crt; then echo "Error: 証明書の取得に失敗しました。Caddyfile に ${DOMAIN} が設定されているか確認してください。" exit 1 fi docker compose -f "$CADDY_DIR/docker-compose.yml" exec -T caddy \ cat "${CADDY_CERT_BASE}.key" > certs/server.key chmod 600 certs/server.key # チェーン分割: 1枚目=リーフ、残り=中間CA awk '/BEGIN CERTIFICATE/{n++} n==1' certs/server.crt > certs/server-leaf.crt awk '/BEGIN CERTIFICATE/{n++} n>1' certs/server.crt > certs/server-chain.crt mv certs/server-leaf.crt certs/server.crt # 中間 CA 証明書を Caddy で配信(クライアントが手動インストールする場合に使用) awk '/BEGIN CERTIFICATE/{n++} n==1' certs/server-chain.crt > "$CADDY_DIR/ca.pem" echo "証明書を更新しました。" bash "$(pwd)/deploy.sh"