Loading...

2024-09-10(火) 11:00

☁️ Caddyで使用するCloudflareで管理している独自ドメインのSSL化を自動化するための手順

CaddyCloudflare
Caddyを使ったリバースプロキシでCloudflareで管理している独自ドメインを使い、SSL化を自動化するための手順を解説します。

目次

前提と注意事項

  • Caddy によるリバースプロキシが設定済みであることを前提としています。
  • SSL 自動取得のためにxcaddycaddy-dnsを使用します。
  • Cloudflare で管理している独自ドメインを持っている前提となります。

その他に以下の記事の内容を前提としています。

📱 Caddyで独自ドメインのワイルドカードSSL証明書に対応したリバースプロキシを構築する

社内・ホームネットワークやTailscaleやZeroTierを使ったVPN上で動作しているサービスに自分が持つ独自ドメインのサブドメインでアクセスするために、Caddyを使ったリバースプロキシを構築する手順を解説します。

ritaiz.com

この記事のゴール

Caddy によるリバースプロキシで、Cloudflare で管理している独自ドメインの SSL 化を自動化することがゴールです。

Cloudflare で API トークンを作成する

まずはじめに、Cloudflare の DNS ゾーンを外部から編集するための2つの API トークンを作成します。それぞれの手順を説明します。

DNS ゾーン編集用のトークンを作成する

以下のように、Cloudflare にログイン後、管理画面の右上にあるメニューから「マイプロフィール」をクリックします。

Cloudflareのマイプロフィールメニュー

「マイプロフィール」をクリックすると、画面左側のメニューに「API トークン」というメニューが表示されるのでそれをクリックします。「API トークン」をクリックすると以下のように「ユーザー API トークン」というページが表示されますので、その中にある「トークンを作成する」という青いボタンをクリックします。

CloudflareのAPIトークンページ

以下のようなページが表示されるので、「ゾーン DNS を編集する」という項目の「テンプレートを使用する」という青いボタンをクリックします。

ゾーンDNSを編集するテンプレートのトークン作成

「テンプレートを使用する」という青いボタンをクリックすると以下のようなページに遷移しますので、各項目を設定します。

ゾーンDNSを編集するトークン設定

設定内容は以下のようにします。

  • アクセス許可: 「ゾーン」、「DNS」、「編集」を指定します。
  • ゾーンリソース: 「含む」、「特定のゾーン」、「目的のドメイン」を指定します。

その他の項目についてはデフォルトのままで問題ありませんが、必要に応じて設定してください。 「概要に進む」という青いボタンををクリックします。すると以下のように設定内容が表示されます。 以下のように目的のドメインの設定内容が「DNS:編集」になっていることを確認して、「トークンを作成する」をクリックします。

ゾーンDNSを編集するトークン設定確認

「トークンを作成する」をクリックすると、以下のようにトークンが表示されます。このトークンは後で使うので、コピーして安全な場所に保存しておいてください。なお、このトークンは一度しか表示されないので、表示されたらすぐにコピーして保存してください。

ゾーンDNSを編集するトークン作成完了

以上で DNS 編集用のトークンの作成が完了しました。

DNS ゾーン読み取り用のトークンを作成する

続いて、同様の手順で「ゾーン DNS を編集する」という項目の「テンプレートを使用する」ボタンをクリックして、今度は以下のような内容を指定して「トークンを作成する」をクリックします。トークン名も以下では「ゾーン DNS を読み取る」としています。

ゾーンDNSを読み取るトークン作成

以下のように設定内容が表示されるので、ここで「ゾーン:読み取り」となっていることを確認して「トークンを作成する」をクリックします。

ゾーンDNSを読み取るトークン設定確認

以下のように、Cloudflare でゾーン DNS を読み取るためのトークンが表示されます。これもコピーして保存しておいてください。

ゾーンDNSを読み取るトークン作成完了

以上で DNS ゾーンを編集するためのトークンと、読み取るためのトークンの作成が完了しました。

Caddy をビルドして設定ファイルを修正する

以下のように適当なディレクトリを作成し、そこでxcaddyを使用してcaddy-dns/cloudflareを指定したものをビルドします。

ターミナル
$ mkdir ~/caddy-cloudflare
$ cd ~/caddy-cloudflare
$ xcaddy build --with github.com/caddy-dns/cloudflare

実行すると以下のようなメッセージが表示されます。

ターミナル
 xcaddy build --with github.com/caddy-dns/cloudflare
2024/09/08 21:13:29 [INFO] absolute output file path: /home/hisui/caddy-cloudflare/caddy
2024/09/08 21:13:29 [INFO] Temporary folder: /tmp/buildenv_2024-09-08-2113.3085560503
2024/09/08 21:13:29 [INFO] Writing main module: /tmp/buildenv_2024-09-08-2113.3085560503/main.go
package main
 
import (
        caddycmd "github.com/caddyserver/caddy/v2/cmd"
 
        // plug in Caddy modules here
        _ "github.com/caddyserver/caddy/v2/modules/standard"
        _ "github.com/caddy-dns/cloudflare"
)
 
func main() {
        caddycmd.Main()
}
2024/09/08 21:13:29 [INFO] Initializing Go module
 
# 省略
 
2024/09/08 21:14:31 [INFO] Build complete: ./caddy
2024/09/08 21:14:31 [INFO] Cleaning up temporary folder: /tmp/buildenv_2024-09-08-2113.3085560503
 
././caddy version
v2.8.4 h2:sksnikfajdfa/lsoujagniwentg8923nouasf

上記が正常に完了すると、caddy という実行ファイルが生成されます。試しにバージョンを確認します。

ターミナル
$ ./caddy version
v2.8.4 h2:sksnikfajdfa/lsoujagniwentg8923nouasf

上記のようにバージョンが表示されれば成功です。 これを使って Caddy を起動します。

Caddy の設定ファイルを修正する

以下のような内容で Caddyfile を作成します。zone_tokenには先ほど作成した DNS ゾーン読み取り用トークンを、api_tokenにはゾーン DNS 編集用トークンを指定します。なお、Caddyfileに直接トークンを書くのはセキュリティ上好ましくないため、実際には環境変数などを使ってトークンを渡すことをお勧めします。

Caddyfile
{
	acme_dns cloudflare {
		zone_token a9j20MyaASki7NZP76O9UqaNBZ0H67jk3sh7bh1
		api_token k6nao12pKqUmnbYATq698sk8J2a8Nv93jA7j3mv8
	}
}
 
# code-serverへのリバースプロキシ
code.example.com {
	reverse_proxy localhost:8080
}
 
# immichへのリバースプロキシ
immich.example.com {
	reverse_proxy localhost:2283
}
 
# その他の設定内容

以上 Caddy の設定ファイルの修正は完了です。

Caddy を起動する

あとは以下で Caddy を起動します。

Caddyを起動する
$ sudo ./caddy run

エラーがでないこと、ブラウザから設定ファイル内で設定したドメインにアクセスできることを確認してください。 問題なければ一度 Ctrl + C で Caddy を停止し、以下のようにstartコマンドを使うとバックグラウンドで動作します。

Caddyをバックグラウンドで起動する
$ sudo ./caddy start

停止する時はstopを使用します。

Caddyを停止する
$ sudo ./caddy stop

まとめ

Caddy で Cloudflare で管理している独自ドメインの SSL 化を自動化するための手順を解説しました。Caddy と Cloudflare で管理している独自ドメインを使うことで、SSL 化を自動化することができます。SSL の更新も自動で行われるため手間を減らすことができます。