慣例
Caddyのエコシステムは、プラットフォーム全体で一貫性と直感性を保つために、いくつかの慣例に従っています。
ネットワークアドレス
接続またはバインドするネットワークアドレスを指定する場合、Caddyは次の形式の文字列を受け入れます。
network/address
ネットワーク部分はオプション(デフォルトはtcp)で、Goのnet.Dial関数が認識するものであれば何でもかまいません。ネットワークが指定されている場合は、ネットワーク部分とアドレス部分を1つのスラッシュ/で区切る必要があります。
ネットワークには、以下のいずれかを指定できます。4または6の接尾辞が付いているものは、それぞれIPv4またはIPv6のみです。
- TCP:
tcp、tcp4、tcp6 - UDP:
udp、udp4、udp6 - IP:
ip、ip4、ip6 - Unix:
unix、unixgram、unixpacket
アドレス部分は、次のいずれかの形式になります。
ホストホスト:ポート:ポート/path/to/unix/socket/path/to/unix/socket|0200
ホストは、任意のホスト名、解決可能なドメイン名、またはIPアドレスにすることができます。
ポートは、単一の値(:8080)または包含範囲(:8080-8085)にすることができます。ポート範囲は、単一のアドレスに拡張されます。すべての設定フィールドがポート範囲を受け入れるわけではありません。特別なポート:0は、利用可能な任意のポートを意味します。
unixソケットパスは、unix*ネットワークタイプを使用する場合にのみ使用できます。ネットワークとアドレスを区切るスラッシュは、パスの一部とはみなされません。
unixソケットがバインドアドレスとして使用される場合、パスの後にパイプ|で区切って、オプションでファイル権限モードを指定できます。デフォルトは0200(8進数)、つまりu=w,g=,o=(シンボリック)です。先頭の0はオプションです。
有効な例
:8080
127.0.0.1:8080
localhost:8080
localhost:8080-8085
tcp/localhost:8080
tcp/localhost:8080-8085
udp/localhost:9005
unix//path/to/socket
unix//path/to/socket|0200
プレースホルダー
Caddyの構成は、プレースホルダー(変数)の使用をサポートしています。プレースホルダーを使用すると、静的な構成に動的な値を簡単に注入できます。
プレースホルダーは、中括弧{ }で両側が囲まれ、内側に変数名が含まれます。たとえば、{foo.bar}のようになります。プレースホルダーの中括弧はエスケープできます。\{このように\}。通常、変数名は、モジュール間での衝突を避けるためにドットで名前空間が指定されます。
どのプレースホルダーが利用できるかは、コンテキストによって異なります。すべてのプレースホルダーが構成のすべての部分で利用できるわけではありません。たとえば、HTTPアプリは、 HTTPリクエストの処理に関連する構成の領域でのみ利用可能なプレースホルダーを設定します。
以下のプレースホルダーは常に利用可能です。
| プレースホルダー | 説明 |
|---|---|
{env.*} |
環境変数(例:{env.HOME}) |
{system.hostname} |
システムのローカルホスト名 |
{system.slash} |
システムのファイルパス区切り文字 |
{system.os} |
システムのOS |
{system.arch} |
システムのアーキテクチャ |
{system.wd} |
現在の作業ディレクトリ |
{time.now} |
Go Time構造体としての現在時刻 |
{time.now.http} |
HTTPヘッダー |
{time.now.unix} |
秒単位のunixタイムスタンプとしての現在時刻 |
{time.now.unix_ms} |
ミリ秒単位のunixタイムスタンプとしての現在時刻 |
{time.now.common_log} |
Common Log Formatでの現在時刻 |
{time.now.year} |
YYYY形式での現在の年 |
すべての構成フィールドがプレースホルダーをサポートしているわけではありませんが、ほとんどの場所で期待どおりにサポートされています。
ファイルの場所
このセクションには、さまざまなファイルの場所に関する情報が含まれています。ここで説明されているファイルとディレクトリのパスは、せいぜいデフォルトです。一部は上書きできます。
構成ファイル
構成ファイルを配置するための単一の慣例的な場所はありません。最も意味のある場所に配置してください。
デフォルトの構成ファイルが付属するディストリビューションは、パッケージ/ディストリビューションのメンテナーにとって明白であっても、この構成ファイルがどこにあるかをドキュメントに記載する必要があります。ほとんどのLinuxインストールでは、Caddyfileは/etc/caddy/Caddyfileにあります。
データディレクトリ
Caddyは、TLS証明書やその他の重要なアセットをデータディレクトリに保存します。データディレクトリは、構成済みのストレージモジュール(デフォルト:ローカルファイルシステム)によってバックアップされます。
XDG_DATA_HOME環境変数が設定されている場合、$XDG_DATA_HOME/caddyになります。
それ以外の場合は、パスはプラットフォームによって異なり、OSの慣例に従います。
| OS | データディレクトリパス |
|---|---|
| Linux、BSD | $HOME/.local/share/caddy |
| Windows | %AppData%\Caddy |
| macOS | $HOME/Library/Application Support/Caddy |
| Plan 9 | $HOME/lib/caddy |
| Android | $HOME/caddy(または/sdcard/caddy) |
その他すべてのOSは、Linux/BSDのディレクトリパスを使用します。
データディレクトリをキャッシュとして扱わないでください。その内容は、一時的なものでも、単にパフォーマンスを向上させるためのものでもありません。Caddyは、TLS証明書、秘密鍵、OCSPステープル、その他の必要な情報をデータディレクトリに保存します。その影響を理解せずに削除しないでください。
このディレクトリが永続的であり、Caddyが書き込み可能であることが重要です。
構成ディレクトリ
これは、Caddyが特定の構成をディスクに保存する場所です。特に、caddy run --resumeを使用して後で簡単に再開できるように、最後にアクティブだった構成(デフォルト)をこのフォルダーに永続化します。
XDG_CONFIG_HOME環境変数が設定されている場合、$XDG_CONFIG_HOME/caddyになります。
それ以外の場合は、パスはプラットフォームによって異なり、OSの慣例に従います。
| OS | 構成ディレクトリパス |
|---|---|
| Linux、BSD | $HOME/.config/caddy |
| Windows | %AppData%\Caddy |
| macOS | $HOME/Library/Application Support/Caddy |
| Plan 9 | $HOME/lib/caddy |
その他すべてのOSは、Linux/BSDのディレクトリパスを使用します。
このディレクトリが永続的であり、Caddyが書き込み可能であることが重要です。
期間
期間文字列は、Caddyの構成全体でよく使用されます。これらは、Goのtime.ParseDuration構文と同じ形式になります。ただし、day(1日=24時間と単純に想定)の場合はdも使用できます。有効な単位は次のとおりです。
ns(ナノ秒)us/µs(マイクロ秒)ms(ミリ秒)s(秒)m(分)h(時間)d(日)
例
250ms5s1.5h2h45m90d
JSON構成では、期間値はナノ秒を表す整数にもできます。