| Age | Commit message (Collapse) | Author | Lines |
|
- run-command.sh: services / stop <name> / start <name> for app and infra
stacks (not caddy, hetzner-admin, status). Stopped names go to
status/stopped.txt (gitignored).
- status: a stopped service that does not respond is STOPPED (gray),
excluded from uptime and DOWN alerts. If it responds it is UP as usual.
- Infra deploy.sh skips stopped stacks; app repo pushes clear the flag.
- claude-code@.service: Restart=on-failure, and restart-sessions.sh restarts
one unit at a time, to avoid the tmux "server exited unexpectedly" race.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01N5eS3U54gzjRXzm65Np1RS
|
|
Drop Uptime Kuma (uptime.yyamashita.com) and the hetzner-admin /status
page; status-app + ntfy alerts is the single status site. hetzner-admin
now just links to it.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
- status/: lightweight status checker (status.yyamashita.com, /api/status)
with ntfy DOWN/recovered alerts after consecutive failures
- uptime-kuma/: Uptime Kuma at uptime.yyamashita.com
- hetzner-admin: authenticated /status page (status-app results + docker ps -a)
- ntfy/: self-hosted ntfy at ntfy.yyamashita.com (deny-all auth, install.sh
creates admin user and status-app token)
- Caddyfile, DNS, post-receive hook, tests/check.sh, docs updated
- license-slot-checker: add to repos.txt, hook, and Claude sessions
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Replace standalone Squid container with caddy-forwardproxy plugin so the
proxy shares Caddy's existing ports and TLS. HTTP on :80 and HTTPS on :443.
Auth is read from the same vpn/users.conf at Caddy startup via entrypoint.sh.
DNS: add proxy to setup-route53.py WEB_SUBDOMAINS.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- vpn/: Dockerfile, docker-compose.yml, swanctl.conf.tpl, entrypoint.sh
- install.sh: Caddy 証明書流用 + コンテナ起動
- renew-cert.sh: 証明書更新 + swanctl ホットリロード
- caddy/Caddyfile: vpn.yyamashita.com 追加(Let's Encrypt 証明書取得用)
- post-receive: vpn/deploy.sh を追加
- setup-route53.py: WEB_SUBDOMAINS に vpn を追加
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- Caddy: route blog.yyamashita.com → microblog-app:3000
- git: add microblog post-receive hook and update work tree path to /app/microblog
- DNS: add blog subdomain to Route 53 WEB_SUBDOMAINS
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- caddy/Caddyfile: admin.yyamashita.com → hetzner-admin.yyamashita.com
- mail/dns/setup-route53.py: add A record for primary, CNAME records for
all web service subdomains pointing to hetzner.yyamashita.com
- CLAUDE.md: update access URL
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Port 25 outbound is no longer blocked on Hetzner, so SES relay is
unnecessary. Remove relayhost, SASL auth config, and libsasl2-modules.
Postfix now delivers directly to recipient MX; inet_protocols=ipv4
already present to avoid IPv6 PTR issues.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Required for smtp_sasl_auth_enable with Amazon SES.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
SES credentials are injected via .env file (not committed). entrypoint.sh
creates sasl_passwd at runtime from SES_ACCESS_KEY_ID / SES_SMTP_PASSWORD.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
smtp プロセスは chroot 環境で動くため /etc/resolv.conf が見えず
MX ルックアップが失敗していた。chroot (/var/spool/postfix/etc/) に
resolv.conf / hosts / services / nsswitch.conf をコピーして解決。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
127.0.0.11 は MX クエリを正しく処理できないため 8.8.8.8/1.1.1.1 に差し替える。
メールコンテナはコンテナ名解決が不要なため問題なし。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- opendkim.conf / main.cf: localhost → 127.0.0.1 (getent がIPv6を優先し
Postfix の inet_protocols=ipv4 と競合していた)
- docker-compose.yml: dns: 8.8.8.8/1.1.1.1 を追加 (Docker embedded DNS が
MX クエリを解決できなかった)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
CNAME が既に存在するドメインへの TXT 追加は競合エラーになるため、
レコードを1件ずつ適用し、競合は SKIP してその他は継続する。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
/etc/opendkim が :ro マウントのため chmod/chown が失敗していた問題を修正。
opendkim.conf で UserID root に変更しコンテナ内でルートとして実行する。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
Ubuntu 24.04 ホストに直接 apt install して opendkim-genkey を実行する。
Debian Bookworm の Docker 内では OpenSSL 3.x 互換性問題で失敗するため。
setup-route53.py: ホストゾーン自動検出・SERVER_IP 自動取得を追加。
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|
|
- mail/ ディレクトリ追加: Postfix + OpenDKIM の Docker コンテナ
- mail/domains.txt で送信ドメインを管理(現在: golive.yyamashita.com)
- install.sh が domains.txt から KeyTable/SigningTable を動的生成
- setup-route53.py で SPF/DKIM/DMARC を Route 53 に一括設定
- post-receive フックに mail/deploy.sh を追加
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
|