<feed xmlns='http://www.w3.org/2005/Atom'>
<title>hetzner-infra/mail/dns, branch master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<id>http://git.yyamashita.com/hetzner-infra/atom/mail/dns?h=master</id>
<link rel='self' href='http://git.yyamashita.com/hetzner-infra/atom/mail/dns?h=master'/>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/'/>
<updated>2026-11-01T00:12:32Z</updated>
<entry>
<title>studio.yyamashita.com を公開</title>
<updated>2026-11-01T00:12:32Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-11-01T00:12:32Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=f7cfad7883556def4f1c277704a13620642c7dbc'/>
<id>urn:sha1:f7cfad7883556def4f1c277704a13620642c7dbc</id>
<content type='text'>
Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Consolidate status pages into status.yyamashita.com</title>
<updated>2026-10-31T10:28:45Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-10-31T10:28:45Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=ff39e864a0b7e9a98340bf564a7a4bf566958a77'/>
<id>urn:sha1:ff39e864a0b7e9a98340bf564a7a4bf566958a77</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add status pages, ntfy alerts, and license-slot-checker repo</title>
<updated>2026-10-31T04:20:27Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-10-31T04:20:27Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=b4ecef96fae14a92d12279927986e69c2e223180'/>
<id>urn:sha1:b4ecef96fae14a92d12279927986e69c2e223180</id>
<content type='text'>
- 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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add todo service: Caddyfile, repos.txt, hook, DNS entry</title>
<updated>2026-08-22T10:21:18Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-08-22T10:21:18Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=5a55c7893615c5a64856ecca681325a609d1fac0'/>
<id>urn:sha1:5a55c7893615c5a64856ecca681325a609d1fac0</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Move forward proxy from Squid to Caddy (port 80/443)</title>
<updated>2026-07-02T14:08:58Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-07-02T14:08:58Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=1a7b5adf8484ec0f2b6feb350b578142e186ab26'/>
<id>urn:sha1:1a7b5adf8484ec0f2b6feb350b578142e186ab26</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add strongSwan IKEv2 VPN service</title>
<updated>2026-06-30T13:29:07Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-30T13:29:07Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=58f7917662ff92a3712289acccff8310c8f1baff'/>
<id>urn:sha1:58f7917662ff92a3712289acccff8310c8f1baff</id>
<content type='text'>
- 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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Add microblog service</title>
<updated>2026-06-19T06:19:00Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-19T06:19:00Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=6e41cc1b7a6769608cacb456bae21aa0d7704f59'/>
<id>urn:sha1:6e41cc1b7a6769608cacb456bae21aa0d7704f59</id>
<content type='text'>
- 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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Rename hetzner-admin domain and use CNAME for web subdomains</title>
<updated>2026-06-19T05:03:22Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-19T05:03:22Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=6af7cd1d8c32b138a77f9c835df4a3d4624cf69a'/>
<id>urn:sha1:6af7cd1d8c32b138a77f9c835df4a3d4624cf69a</id>
<content type='text'>
- 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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>setup-route53: apply records individually, skip CNAME conflicts</title>
<updated>2026-06-01T12:23:34Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-01T12:23:34Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=ec01cb68e0915175edd3185323efe9185d279b25'/>
<id>urn:sha1:ec01cb68e0915175edd3185323efe9185d279b25</id>
<content type='text'>
CNAME が既に存在するドメインへの TXT 追加は競合エラーになるため、
レコードを1件ずつ適用し、競合は SKIP してその他は継続する。

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Fix DKIM key generation: use host opendkim-tools instead of Docker</title>
<updated>2026-06-01T12:19:05Z</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-01T12:19:05Z</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=ed78863260dedd56152976ebc630229461e2b0a2'/>
<id>urn:sha1:ed78863260dedd56152976ebc630229461e2b0a2</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
