あいさつ
どうも、Caruです。
皆さん、Webサーバーは何を使っていますか? 古き良きApache?それともデファクトスタンダードのNginx?
私は長らくNginxを使ってきましたが、最近CaddyというWebサーバーに完全に乗り換えました。 これがもう、便利すぎて戻れないんです。
今回は、そんなCaddyの魅力と、簡単な使い方を紹介したいと思います。
Caddyのここがすごい
1. HTTPS化が全自動
これが最大の魅力です。 NginxでHTTPS化しようとすると、Certbotを入れて、証明書を発行して、cronで更新設定をして...と結構手間ですよね。
Caddyなら、設定ファイルにドメインを書くだけで、Let's Encryptから証明書を自動で取得・更新してくれます。 本当にこれだけです。SSLの存在を忘れてしまうくらいです。
2. 設定ファイルがシンプルすぎる
Nginxのnginx.conf、書くの辛くないですか?
私は、直してはnginx -tでまたエラーを無限に繰り返してましたね(笑)
Caddyの設定ファイル(Caddyfile)は、人間が読み書きしやすいように設計されています。
例えば、example.comへのアクセスをローカルの3000番ポートに流す(リバースプロキシ)設定はこれだけ。
example.com {
reverse_proxy localhost:3000
}さらに、X-Forwarded-For、X-Forwarded-Proto、X-Forwarded-Hostといった、リバースプロキシでバックエンドに渡すべきヘッダーを自動で適切に設定してくれます。
デフォルトで外部からのこれらのヘッダーを無視して上書きしてくれるので、スプーフィング対策もバッチリです。
嘘みたいにシンプルですが、これでHTTPS化まで完了しています。
3. バイナリ一つで動く
CaddyはGo言語で書かれており、1つのバイナリファイルとして提供されています。 依存関係地獄に悩まされることもありません。ポータビリティ最高。
簡単な使い方
インストール
公式サイトの手順に従うのが一番ですが、Ubuntuならこんな感じでサクッと入ります。
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静的サイトを公開する
カレントディレクトリにあるHTMLファイルを公開したいなら、コマンド一発です。
caddy file-server --listen :8080これで http://localhost:8080 にアクセスすれば見れます。
リバースプロキシとして使う
Webアプリ開発者ならこれが一番多い用途でしょう。
Caddyfile という名前のファイルを作成し、以下のように記述します。
my-app.example.com {
reverse_proxy localhost:8000
}そして実行。
caddy runこれだけで、https://my-app.example.com にアクセスすると、自動的に証明書が取得され、localhost:8000 に転送されます。
開発環境でも本番環境でも、この手軽さは変わりません。
Dockerで使う
「環境を汚したくない」という方はDockerを使うのがおすすめです。
公式イメージが用意されているので、docker-compose.ymlを書くだけで起動できます。
version: "3.7"
services:
caddy:
image: caddy:latest
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:これだけで、ホスト側のCaddyfileを読み込んで起動してくれます。
データの永続化もボリュームで行っているので安心です。
まとめ
Caddy、いかがでしたか? 「Nginxの設定ファイルと格闘する時間」を「開発する時間」に変えられる、本当に素晴らしいツールです。
パフォーマンスもGo製なので非常に高速ですし、HTTP/3にもデフォルトで対応しています。 食わず嫌いせずに、ぜひ一度試してみてください。きっと気に入るはずです。
それでは、快適なサーバーライフを!
あいさつ
どうも、Caruです。
皆さん、Webサーバーは何を使っていますか? 古き良きApache?それともデファクトスタンダードのNginx?
私は長らくNginxを使ってきましたが、最近CaddyというWebサーバーに完全に乗り換えました。 これがもう、便利すぎて戻れないんです。
今回は、そんなCaddyの魅力と、簡単な使い方を紹介したいと思います。
Caddyのここがすごい
1. HTTPS化が全自動
これが最大の魅力です。 NginxでHTTPS化しようとすると、Certbotを入れて、証明書を発行して、cronで更新設定をして...と結構手間ですよね。
Caddyなら、設定ファイルにドメインを書くだけで、Let's Encryptから証明書を自動で取得・更新してくれます。 本当にこれだけです。SSLの存在を忘れてしまうくらいです。
2. 設定ファイルがシンプルすぎる
Nginxのnginx.conf、書くの辛くないですか?
私は、直してはnginx -tでまたエラーを無限に繰り返してましたね(笑)
Caddyの設定ファイル(Caddyfile)は、人間が読み書きしやすいように設計されています。
例えば、example.comへのアクセスをローカルの3000番ポートに流す(リバースプロキシ)設定はこれだけ。
example.com {
reverse_proxy localhost:3000
}さらに、X-Forwarded-For、X-Forwarded-Proto、X-Forwarded-Hostといった、リバースプロキシでバックエンドに渡すべきヘッダーを自動で適切に設定してくれます。
デフォルトで外部からのこれらのヘッダーを無視して上書きしてくれるので、スプーフィング対策もバッチリです。
嘘みたいにシンプルですが、これでHTTPS化まで完了しています。
3. バイナリ一つで動く
CaddyはGo言語で書かれており、1つのバイナリファイルとして提供されています。 依存関係地獄に悩まされることもありません。ポータビリティ最高。
簡単な使い方
インストール
公式サイトの手順に従うのが一番ですが、Ubuntuならこんな感じでサクッと入ります。
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静的サイトを公開する
カレントディレクトリにあるHTMLファイルを公開したいなら、コマンド一発です。
caddy file-server --listen :8080これで http://localhost:8080 にアクセスすれば見れます。
リバースプロキシとして使う
Webアプリ開発者ならこれが一番多い用途でしょう。
Caddyfile という名前のファイルを作成し、以下のように記述します。
my-app.example.com {
reverse_proxy localhost:8000
}そして実行。
caddy runこれだけで、https://my-app.example.com にアクセスすると、自動的に証明書が取得され、localhost:8000 に転送されます。
開発環境でも本番環境でも、この手軽さは変わりません。
Dockerで使う
「環境を汚したくない」という方はDockerを使うのがおすすめです。
公式イメージが用意されているので、docker-compose.ymlを書くだけで起動できます。
version: "3.7"
services:
caddy:
image: caddy:latest
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
volumes:
caddy_data:
caddy_config:これだけで、ホスト側のCaddyfileを読み込んで起動してくれます。
データの永続化もボリュームで行っているので安心です。
まとめ
Caddy、いかがでしたか? 「Nginxの設定ファイルと格闘する時間」を「開発する時間」に変えられる、本当に素晴らしいツールです。
パフォーマンスもGo製なので非常に高速ですし、HTTP/3にもデフォルトで対応しています。 食わず嫌いせずに、ぜひ一度試してみてください。きっと気に入るはずです。
それでは、快適なサーバーライフを!