<feed xmlns='http://www.w3.org/2005/Atom'>
<title>hetzner-infra/mail/entrypoint.sh, branch master</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/'/>
<entry>
<title>Switch mail container from SES relay to direct delivery</title>
<updated>2026-06-08T16:34:02+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-08T16:34:02+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=733ae6e5c4362aa85d54cb7b0674483d3f6862cd'/>
<id>733ae6e5c4362aa85d54cb7b0674483d3f6862cd</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Configure Amazon SES relay for Postfix (port 25 blocked by Hetzner)</title>
<updated>2026-06-01T12:42:57+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-01T12:42:57+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=1b3eded34ae693b8662487b9c54a21e4fec1b07f'/>
<id>1b3eded34ae693b8662487b9c54a21e4fec1b07f</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>entrypoint: copy resolv.conf etc into Postfix chroot before start</title>
<updated>2026-06-01T12:33:02+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-01T12:33:02+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=72799dd59da44269107fe3e651e7566042002709'/>
<id>72799dd59da44269107fe3e651e7566042002709</id>
<content type='text'>
smtp プロセスは chroot 環境で動くため /etc/resolv.conf が見えず
MX ルックアップが失敗していた。chroot (/var/spool/postfix/etc/) に
resolv.conf / hosts / services / nsswitch.conf をコピーして解決。

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
smtp プロセスは chroot 環境で動くため /etc/resolv.conf が見えず
MX ルックアップが失敗していた。chroot (/var/spool/postfix/etc/) に
resolv.conf / hosts / services / nsswitch.conf をコピーして解決。

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>entrypoint: fix DNS via cat-to-bind-mount (no python3/sed needed)</title>
<updated>2026-06-01T12:30:03+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-01T12:30:03+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=15e286a5a8490960d0f94a0c22bba67912f1cdb6'/>
<id>15e286a5a8490960d0f94a0c22bba67912f1cdb6</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>entrypoint: use python3 for resolv.conf edit (sed -i fails on bind mount)</title>
<updated>2026-06-01T12:28:55+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-01T12:28:55+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=e95b343d694acba88cc08fb8e7092d54b3ee6cd3'/>
<id>e95b343d694acba88cc08fb8e7092d54b3ee6cd3</id>
<content type='text'>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>entrypoint: replace Docker embedded DNS with external resolvers</title>
<updated>2026-06-01T12:27:47+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-01T12:27:47+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=665f6a7d34643aee0b2aefe00fdd7ca1c5ff593d'/>
<id>665f6a7d34643aee0b2aefe00fdd7ca1c5ff593d</id>
<content type='text'>
127.0.0.11 は MX クエリを正しく処理できないため 8.8.8.8/1.1.1.1 に差し替える。
メールコンテナはコンテナ名解決が不要なため問題なし。

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
127.0.0.11 は MX クエリを正しく処理できないため 8.8.8.8/1.1.1.1 に差し替える。
メールコンテナはコンテナ名解決が不要なため問題なし。

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix entrypoint: remove chmod on read-only mount, run opendkim as root</title>
<updated>2026-06-01T12:21:44+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-01T12:21:44+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=647d10c68785bc53453d5054d324a7f69ff3ee2b'/>
<id>647d10c68785bc53453d5054d324a7f69ff3ee2b</id>
<content type='text'>
/etc/opendkim が :ro マウントのため chmod/chown が失敗していた問題を修正。
opendkim.conf で UserID root に変更しコンテナ内でルートとして実行する。

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
/etc/opendkim が :ro マウントのため chmod/chown が失敗していた問題を修正。
opendkim.conf で UserID root に変更しコンテナ内でルートとして実行する。

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add Postfix+OpenDKIM MTA with txt-based domain management</title>
<updated>2026-06-01T12:14:58+00:00</updated>
<author>
<name>yyamashita</name>
<email>yyamashita@hetzner.yyamashita.com</email>
</author>
<published>2026-06-01T12:14:58+00:00</published>
<link rel='alternate' type='text/html' href='http://git.yyamashita.com/hetzner-infra/commit/?id=c55ae2d5daf229b12556d6283ba4e5e8161a5eb5'/>
<id>c55ae2d5daf229b12556d6283ba4e5e8161a5eb5</id>
<content type='text'>
- 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 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- 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 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
