JoeZhao

跨出界

Hey, I’m JoeZhao, a software engineer, and a gamer.

Caddy インストール設定ガイド(LCMP)

0. Caddy とは#

Caddy サーバーは、オープンソースで Golang で書かれた、HTTP/2 をサポートする Web サーバーです。Golang の標準ライブラリを使用して HTTP 機能を提供します。Caddy の顕著な特徴は、デフォルトで HTTPS が有効になっていることです。追加の設定なしで HTTPS 機能を提供する最初の Web サーバーです。

以下は Ubuntu 18.04 に基づくインストール手順です:

1. インストール#

Download Caddyから直接ダウンロードできます。自分のプラットフォームとプラグインを選択すれば、すぐにダウンロードして実行できます。

もちろん、私が推奨するのは、https://getcaddy.com/ のスクリプトを使用する方法です。
公式はroot権限で Caddy をインストールして実行することを推奨していないので、普通のユーザー権限で以下のコマンドを実行すれば大丈夫です。

$ curl https://getcaddy.com | bash -s personal

Caddy には個人ライセンスと商業ライセンスがあり、一般的には個人使用の場合は個人ライセンス版を使用すれば問題ありません。商業ライセンスは有料です。プラグインをインストールする必要がある場合、構文は以下のようになります:

$ bash -s [personal|commercial] [plugin1,plugin2,...] [accessCode1,accessCode2...]

私が必要とするhttp.filemanager / http.authz / http.login / http.minify / tls.dns.dnspodの場合、コマンドと実行結果は以下の通りです:

$ curl https://getcaddy.com | bash -s personal http.filemanager,http.authz,http.login,http.minify,tls.dns.dnspod
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  7380  100  7380    0     0  12058      0 --:--:-- --:--:-- --:--:-- 12058
Downloading Caddy for linux/amd64 (personal license)...
Download verification OK
Extracting...
Backing up /usr/local/bin/caddy to /usr/local/bin/caddy_old
(Password may be required.)
Putting caddy in /usr/local/bin (may require password)
Caddy 0.11.0 (non-commercial use only)
Successfully installed

プラグインに関する説明はCaddy User Guideを参照してください。

2. 実行#

ターミナルスクリプトでcaddyコマンドを直接実行すると、デフォルトでスクリプトの現在のディレクトリが Web ルートのディレクトリとして使用され、2015ポートのリクエストを自動的にリッスンします。以下のように:

$ cd ~/home
$ caddy

ブラウザでhttp://localhost:2015/を実行すると、ユーザーディレクトリ内のファイルにアクセスできます。

3. 設定#

3.1 一時サーバー#

Caddy の設定ファイルは Caddyfile と呼ばれ、Caddy は設定ファイルを特定のフォルダーに置くことを強制しません。デフォルトでは、Caddyfile を現在のディレクトリに置くだけで実行できます。以下のように:

$ echo 'localhost:8888' >> Caddyfile
$ echo 'gzip' >> Caddyfile
$ echo 'browse' >> Caddyfile
$ caddy

3.2 本番環境設定#

本番環境で使用する際は、設定ファイルを現在のディレクトリに置くのはあまりにも雑です。一般的には/etc/caddyに置きます。

$ sudo mkdir /etc/caddy
$ sudo touch /etc/caddy/Caddyfile
$ sudo chown -R root:www-data /etc/caddy

設定ファイルの他に、Caddy は自動的に SSL 証明書を生成します。SSL 証明書を置くためのフォルダーが必要です。

$ sudo mkdir /etc/ssl/caddy
$ sudo chown -R www-data:root /etc/ssl/caddy
$ sudo chmod 0770 /etc/ssl/caddy

SSL フォルダーには秘密鍵が置かれるため、アクセスを禁止するために権限を 770 に設定します。
最後に、ウェブサイトファイルを置くためのディレクトリを作成します。すでに存在する場合は作成する必要はありません。

$ sudo mkdir /var/www
$ sudo chown www-data:www-data /var/www

これらのファイルとディレクトリを作成した後、Caddy をサービスとして設定する必要があります。これにより、起動時に自動的に実行され、管理が容易になります。現在ほとんどのディストリビューションは systemd を使用しているため、ここでは systemd の設定方法について説明しますが、Caddy は元の sysvinit サービスとして設定することもサポートしています。具体的な方法はこちらを参照してください。

$ sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service   # githubからsystemd設定ファイルをダウンロード
$ sudo systemctl daemon-reload        # systemd設定を再読み込み
$ sudo systemctl enable caddy.service # Caddyサービスを自動起動に設定
$ sudo systemctl status caddy.service # Caddyの状態を確認

4. Caddyfile#

基本的なインストール設定が完了したら、最も重要なのは Caddyfile の書き方です。直接vim /etc/caddy/Caddyfileで Caddyfile を編集することもできますし、自分のコンピュータで編集してから rsync でサーバーに送ることもできます。Caddyfile を変更しても効果がない場合は、sudo systemctl restart caddy.serviceを実行して Caddy を再起動する必要があります。

4.1 Caddyfile の形式#

Caddyfile の形式は比較的シンプルで、最初の行は必ずウェブサイトのアドレスである必要があります。例えば:

localhost:8080

または

example.com

アドレスにはポート番号を付けることができ、Caddy はそのポートでのみ HTTP サービスを開始し、HTTPS は開始しません。ポート番号を指定しない場合、Caddy はデフォルトで 80 と 443 ポートをバインドし、HTTP と HTTPS サービスを同時に起動します。
アドレスの後には、たくさんの指示(directive)を続けることができます。Caddyfile の基本形式は、ウェブサイトのアドレスと指示で構成されています。

4.2 指示#

指示の役割は、ウェブサイトに特定の機能を有効にすることです。指示の形式は 3 種類あります。最初に、パラメータなしの最もシンプルな指示を紹介します。例えば:

example.com
gzip

2 行目の gzip は指示で、gzip 圧縮機能を有効にすることを示します。これにより、ウェブサイトがウェブページを送信する際にトラフィックを削減できます。

2 番目の指示の形式は、単純なパラメータを持つ指示です:

example.com
gzip
log /var/log/caddy/example.com.access.log
tls admin@example.com
root /var/www/

3 行目の log 指示は、ウェブサイトにログ機能を有効にします。log 指示の後のパラメータは、Caddy にログファイルの保存場所を伝えます。4 行目の tls 指示は、Caddy にウェブサイトの HTTPS を有効にし、自動的に証明書を申請することを伝えます。後ろの email パラメータは、CA に申請者のメールアドレスを知らせるものです。(Caddy はデフォルトで Let's Encrypt を使用して証明書を申請し、更新します)

また、単純なパラメータが複数ある場合もあります。例えば、redir 指示:

example.com
gzip
log /var/log/caddy/example.com.access.log
tls admin@example.com
root /var/www/
redir / https://lengzzz.com/archive/{uri} 301

上記の redir 指示は 3 つのパラメータを持ち、すべてのリクエストを 301 でhttps://example.com/archive/xxxにリダイレクトすることを意味します。この指示は、ウェブサイトのドメイン名を変更する際に非常に便利です。また、tls 指示は、単に email パラメータを渡すのではなく、証明書と秘密鍵のパスをそれぞれ渡すように変更されました。これにより、Caddy は自動的に証明書を申請せず、指定されたパスの証明書を使用します。

この例では、{uri} のようなプレースホルダー(placeholder)も使用されています。詳細なリストはここで確認できます:https://caddyserver.com/docs/placeholders

最後の指示は、複雑なパラメータを持つ指示です。このような指示は、多くのパラメータを含む可能性があるため、一対の波括弧で包む必要があります。例えば header 指示:

example.com
gzip
log /var/log/caddy/example.com.access.log
tls admin@example.com
root /var/www/
header /api {
    Access-Control-Allow-Origin  *
    Access-Control-Allow-Methods "GET, POST, OPTIONS"
    -Server
}
fastcgi / 127.0.0.1:9000 php {
    index index.php
}
rewrite {
    to {path} {path}/ /index.php?{query}
}

6-10 行の header 指示は、すべての/api/xxxリクエストにAccess-Control-Allow-OriginAccess-Control-Allow-Methodsの 2 つのヘッダーを追加し、JavaScript のクロスオリジンアクセスをサポートします。9 行目は Server ヘッダーを削除し、他の人がサーバーの種類を確認できないようにします。

11-13 行では fastcgi 指示を使用し、リクエストを PHP、Ruby などのバックエンドプログラムに fastcgi を介して渡します。

14-15 行では rewrite 指示を使用しています。この指示の役割はサーバー内部のリダイレクトで、下のパラメータtoの後に 3 つのパラメータが続きます。この機能は nginx の try_files に似ています。Caddy に、まずウェブサイトのルートディレクトリ/var/www{path}に対応するファイルがあるか確認させ、なければ{path}に対応するディレクトリがあるか確認させ、どちらもなければindex.phpエントリファイルに転送するように指示します。この機能は一般的に PHP の MVC フレームワークで使用されます。

この Caddyfile を徐々に完成させていくことで、現在のバージョンの Caddyfile はウェブサイトで直接使用できるようになりました。

4.3 複数 HOST のウェブサイト#

先ほどは単一のドメインのウェブサイトについて説明しましたが、同じサーバー上に複数のドメインのウェブサイトをデプロイする場合はどうでしょうか?非常に簡単で、ドメインの後に波括弧で囲むだけです。以下のように:

example.com {
    gzip
    log /var/log/caddy/railgun_moe.log
    tls admin@example.com
    root /var/www/
    header /api {
        Access-Control-Allow-Origin  *
        Access-Control-Allow-Methods "GET, POST, OPTIONS"
        -Server
    }
    fastcgi / 127.0.0.1:9000 php {
        index index.php
    }
    rewrite {
        to {path} {path}/ /index.php?{query}
    }
}
assets.example.com {
    tls lengz@example.com
    log /var/log/caddy/assets.example.com.log
    redir / https://example.com/{uri} 301
}

これで Caddy サービスは正常に動作し、基本的な Caddy 設定はこれで完了です。詳細な内容については公式ドキュメントを参照して学習してください。

Caddy User Guide

バージョン更新#

Caddy のバージョンをアップグレードするのも非常に簡単で、Caddy をインストールするのと同じように行います。

$ curl https://getcaddy.com | bash -s personal

これで最新バージョンの Caddy に自動的に更新されます。更新が完了したら、sudo systemctl restart caddy.serviceを実行して Caddy を再起動することを忘れないでください。

—EOF—

引用と他の資料

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。