UbuntuにCaddyをインストール:爆速でリバースプロキシとHTTPSを自動化

Ubuntu tutorial - IT technology blog
Ubuntu tutorial - IT technology blog

なぜ私はNginxを卒業してCaddyに乗り換えたのか?

以前はサーバーを構築する際、迷わずNginxを選んでいました。しかし正直なところ、100行を超える設定ファイルと格闘したり、SSL証明書を維持するためだけにCertbotを導入してcronjobを設定したりするのは、時間の無駄だと感じていました。セミコロン一つ忘れただけでシステム全体がダウンしてしまうこともありました。

そんな時の救世主がCaddyでした。Nginxで30分かかっていた作業が、Caddyならわずか2分で「常時HTTPS化」が完了します。最大の魅力はGo言語で書かれているため非常に軽量で、Let’s EncryptやZeroSSLからの証明書発行・更新が100%自動化されている点です。外部ツールを追加でインストールする必要はなく、Caddyがすべてを完璧にこなしてくれます。

5分で完了するUbuntuへのCaddyデプロイ

開始する前に、UbuntuのVPS(22.04以降を推奨)を用意してください。Caddyが即座にSSL認証を行えるよう、あらかじめドメインのAレコードをサーバーのIPアドレスに向けておきましょう。

1. 公式リポジトリからのインストール

将来のアップデートを容易にするため、バイナリを手動でダウンロードするのではなく、リポジトリ経由でのインストールをお勧めします。

sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

2. サービスの確認

インストール後、Caddyは自動的に起動します。以下のコマンドでステータスを確認しましょう。

systemctl status caddy

3. 超シンプルなリバースプロキシ設定

ポート3000で動作しているNode.js APIがあると仮定しましょう。これをHTTPS対応の itfromzero.io で公開するには、設定ファイルを開きます。

sudo nano /etc/caddy/Caddyfile

内容を以下の短い3行に書き換えます:

itfromzero.io {
    reverse_proxy localhost:3000
}

保存して設定をリロードします:

sudo systemctl reload caddy

これだけです。Caddyが自動的にLet’s Encryptと通信し、証明書を取得してサーバーにインストールします。Nginxで同じことをしようとすると、20〜30行のコードが必要になることもあります。

Caddyfileの解剖:これまでにない簡単な設定

Caddyfileの構文は非常にモダンで読みやすいです。複雑な技術的障壁を取り除き、開発者が本当に必要とするものに集中させてくれます。

Ubuntuのパッケージシステムに慣れるには数日かかるかもしれませんが、Caddyfileなら15分で習得できます。一つのサーバーで複数のサイトを運営したい場合も、単に列挙するだけで完了します:

app1.itfromzero.io {
    reverse_proxy localhost:3000
}

app2.itfromzero.io {
    reverse_proxy localhost:4000
}

実践プロジェクト向けCaddyの最適化

本番環境では、単なるプロキシ以上の機能が求められます。サーバーの高速化セキュリティ向上のために私がよく使用する設定をいくつか紹介します。

静的ファイルの配信(React/VueなどのSPA)

ビルド済みのReactアプリをデプロイする場合、クライアントサイドのルーティングを処理するために以下の設定を使用します:

mysite.com {
    root * /var/www/mysite/dist
    file_server
    try_files {path} /index.html
}

ZstdとGzipによるデータ圧縮の有効化

ウェブサイトの読み込みを速くするために、圧縮を有効にしましょう。CaddyはZstdをサポートしています。これは最新ের圧縮アルゴリズムで、従来のGzipよりもファイルサイズを10〜20%効率的に削減できます:

itfromzero.io {
    encode zstd gzip
    reverse_proxy localhost:3000
}

プロフェッショナルなログ管理

ログをシステム全体に散乱させないようにしましょう。JSON形式でファイルに分離することで、データ分析ツールでの監視が容易になります:

itfromzero.io {
    log {
        output file /var/log/caddy/access.log
        format json
    }
    reverse_proxy localhost:3000
}

実体験から学んだいくつかのコツ

UbuntuでCaddyを使用する際、時間を無駄にしないために知っておくべきことが2つあります。1つ目は、リロード前に必ず caddy validate を実行して構文エラーによるサーバーダウンを防ぐこと。2つ目は、厳しいファイアウォール環境でHTTPチャレンジが使用できない場合、 xcaddy を使ってDNSチャレンジ(Cloudflareなど)をサポートするカスタム版をビルドすることです。

結論:CaddyとNginx、どちらを選ぶべきか?

毎秒数百万のリクエストを処理するような大規模スケールでは、Nginxが依然としてパフォーマンスの「王様」です。しかし、90%の中小規模プロジェクトにおいて、使い勝手の良さではCaddyが圧倒的に勝利します。SSLの管理から解放され、設定ファイルが簡潔になることで、開発者はアプリのコーディングに完全に集中できます。

Caddyはモダンでインテリジェントな印象を与えてくれます。SSL証明書の更新日を気にする生活に疲れたなら、今すぐUbuntuにCaddyをインストールしてみてください。個人プロジェクトで二度とNginxに戻りたくなくなるはずです!

Share: