Skip to main content

Linux

Let's Encrypt / Certbot 運用チートシート

HTTPS 対応サイトを運用していると、「証明書が増えてきた」「更新テストをしたい」「自動更新の設定が合っているか不安」といった場面が定期的にやってくる。 この記事では、Certbot の日常運用でよく使う操作を一か所にまとめた。セットアップ手順ではなく、運用フェーズで実際に使うコマンドと設定に絞っている。 1. 証明書の確認・削除 # まず現状把握から。取得済みの証明書は一覧で確認できる。 sudo certbot certificates 有効期限・ドメイン・証明書名が表示されるので、不要なものがあれば削除する。 # 対話形式で選択 sudo certbot delete # 証明書名を直接指定 sudo certbot delete --cert-name example.com 削除すると /etc/letsencrypt/live/・archive/・renewal/ 配下のファイルが一括で消え、自動更新の対象からも外れる。 2. dry-run で事前テスト # 証明書の取得・更新に失敗し続けると Let’s Encrypt のレート制限に引っかかる。本番実行の前に dry-run でテストしておくのが鉄則だ。 dry-run ではステージング環境が使われるため、レート制限の心配なく何度でも試せる。 新規取得のテスト # sudo certbot certonly --dry-run --webroot \ -w /var/www/acme-challenge \ -d example.com 既存証明書の更新テスト(推奨) # 既存の .conf 設定(authenticator = webroot など)を読み込んで実行される。

git push で本番サーバへの自動同期を実現する

前回の記事では git commit をトリガーに Ansible でローカルの Hugo を自動更新する仕組みを構築した。今回はその続きで、git push のタイミングで本番サーバへの同期も自動化した話を紹介する。 やりたいこと # これまでは本番反映を手動で実行していたが、git push に統合し、push するだけで本番まで反映されるようにしたかった。 git に post-push フックはない # git には post-commit のように「push 後」に処理を実行する post-push フックが存在しない。 代わりに pre-push フックを使う。これは push が実行される直前に呼ばれるフックで、処理が失敗(exit 1)すると push 自体を中止できる。 本番同期に失敗したまま GitHub へ push されるのを防げるため、むしろ都合がいい。 実装 # .githooks/pre-push に本番同期の処理を記述し、実行権限を付与してコミットする。

git commit で Hugo ローカルサーバへの自動デプロイを実現する

このブログは Hugo で構築している。記事作成時は Ansible でローカルの Hugo を更新してプレビューし、確認後に本番へアップロードするフローで運用している。 これまではコミット後に ansible-playbook コマンドを手動で実行していたが、コミットしたら自動で Hugo が更新されプレビューに集中できる環境を作りたかった。 この記事では、git の post-commit hook と Ansible を組み合わせた自動デプロイの仕組みを紹介する。 構成の概要 # このブログは以下の構成で運用している。 役割 内容 記事管理 git リポジトリの files/*.md ローカルデプロイ Ansible Playbook (ansible_connection=local) プレビュー ローカルの Hugo サーバ 自動化の対象は「コミット → Ansible 実行」の部分だ。 なぜ git hook を選んだか # git hook にした理由は以下の通りだ。

apt update の警告: PPA への接続タイムアウトが出たときの対処法

sudo apt update を実行すると、次のような警告が表示されることがあります。 W: Failed to fetch https://ppa.launchpadcontent.net/gns3/ppa/ubuntu/dists/... connection timed out 警告の原因 # 追加済みの PPA(Personal Package Archive)リポジトリへの接続がタイムアウトしたことを示しています。 W: プレフィックスは Warning(警告) であり、エラー(E:)ではありません。パッケージのインストールや更新など、通常の apt 操作への影響は軽微です。ただし、apt update のたびに表示されるため、放置すると煩わしくなります。 タイムアウトが発生する主な原因は次の2つです。 Launchpad サーバー側の一時的な障害・メンテナンス PPA を追加したままにしており、サーバーへの疎通が取れなくなっている 対処法 # 一時的な問題の場合 # 時間をおいてから再度 sudo apt update を実行してください。サーバー側の問題であれば自然に解消されます。

メールサーバー(Postfix / Dovecot / Roundcube)

Ubuntu 24.04 / Postfix / Dovecot / Roundcube / SpamAssassin による受信専用メールサーバー 1. 要件 # 機能要件 # 項目 内容 メールドメイン blackratel.com 受信 外部メールサーバーから SMTP port 25 で受信 メール閲覧 IMAP port 143(localhost のみ)/ Roundcube WebUI スパムフィルタ SpamAssassin(content_filter 方式) 送信 対象外(受信専用) 認証 Dovecot 認証(IMAP・Roundcube ログイン) メールボックス形式 Maildir ユーザー管理 バーチャルユーザー(OS ユーザーと分離) 非機能要件 # 項目 内容 OS Ubuntu 24.04 LTS TLS 証明書 Postfix(port 25 STARTTLS)と Apache(HTTPS)のみ使用。Dovecot は localhost のみのため SSL 不要 パスワード保存 ARGON2ID ハッシュ ホスティング OCI Free Tier(アウトバウンド port 25 はブロックのため送信不可) スコープ外 # メール送信(OCI Free Tier のためアウトバウンド port 25 が利用不可) SPF / DKIM / DMARC 設定(送信しないため不要) 2. 環境・構成情報 # ミドルウェア # ソフトウェア 役割 Postfix MTA(外部からの受信) Dovecot MDA + MRA(メール保存・IMAP 提供) SpamAssassin スパムフィルタ(content_filter 方式) Roundcube WebUI(ブラウザでのメール閲覧) Apache2 Roundcube のリバースプロキシ ポート構成 # ポート プロトコル 用途 接続元 25 SMTP 外部メールサーバーからの受信 外部(OCI Security List + UFW で開放) 143 IMAP Roundcube → Dovecot(メール取得) localhost のみ 443 HTTPS Roundcube WebUI 外部 port 110 / 465 / 587 / 993 / 995 は無効化。