前書き

Caddyは、使いやすさを考慮して作成された新しいWebサーバーです。 迅速な開発サーバーとして使用するのに十分なほどシンプルで、実稼働環境で使用するのに十分な堅牢性を備えています。

直感的な構成ファイル、HTTP / 2サポート、および自動TLS暗号化を備えています。 HTTP / 2は、複数のファイルの転送に単一の接続を使用し、他の機能間でヘッダー圧縮を行うことにより、Webサイトを高速化するHTTPプロトコルの新しいバージョンです。 TLSは、安全な接続を介して暗号化されたWebサイトを提供するために使用され、インターネットで広く採用されていますが、多くの場合、証明書を手動で取得してインストールするのは面倒です。

Caddyは、https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-centos-7 [Let’s Encrypt]と無料で提供する認証局と密接に統合します。 TLS / SSL証明書。必要に応じて証明書を自動的に取得および更新します。 つまり、Caddyが提供するすべてのWebサイトは、追加の構成やアクションを必要とせずに、安全な接続を介して自動的に提供できます。

このチュートリアルでは、Caddyをインストールして構成します。 このチュートリアルを実行すると、HTTP / 2と安全なTLS接続を使用して、簡単に機能するWebサイトが提供されます。

前提条件

このチュートリアルを実行するには、次のものが必要です。

  • https://www.digitalocean.com/community/tutorials/initial-server-setup-with-centos-7 [この初期サーバーセットアップチュートリアル]でセットアップされた1台のCentOS 7サーバー(sudo非ルートユーザーを含む)。

  • サーバーを指すように構成されたドメイン名。 これは、CaddyがWebサイトのSSL証明書を取得するために必要です。適切なドメイン名を使用しないと、TLS暗号化でWebサイトが安全に提供されません。 https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean [設定方法ホスト名とDigitalOcean]チュートリアル。

  • オプションで、 `+ sudo yum install nano `とともにインストールされる ` nano `テキストエディター。 CentOSにはデフォルトで ` vi `テキストエディタが付属していますが、 ` nano +`はよりユーザーフレンドリーです。

手順1-Caddyバイナリのインストール

Caddyプロジェクトは、Caddyサーバーのバイナリファイルを取得してインストールするインストールスクリプトを提供します。 実行するには、次を入力します。

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

スクリプトを表示するには、ブラウザで「+ https://getcaddy.com+」にアクセスするか、実行する前に「+ wget」または「+ curl」でファイルをダウンロードします。

インストール中に、スクリプトは `+ sudo +`を使用してシステム全体のディレクトリにCaddyファイルを配置するための管理者権限を取得するため、パスワードの入力を求められる場合があります。

コマンド出力は次のようになります。

Caddy installation script outputDownloading Caddy for linux/amd64...
https://caddyserver.com/download/linux/amd64?plugins=
Extracting...
Putting caddy in /usr/local/bin (may require password)
[sudo] password for sammy:
Caddy 0.10.2
Successfully installed

スクリプトが終了すると、Caddyバイナリがサーバーにインストールされ、使用できる状態になります。 `+ which +`を使用して場所を確認することで、Caddyバイナリが適切に配置されたことを確認できます。

which caddy

コマンド出力には、Caddyバイナリが `+ / usr / local / bin / caddy +`にあると表示されます。

Caddyはインストール中にシステム全体の構成を作成せず、サービスとして自身をインストールしません。つまり、起動時に自動的に起動しません。 次のいくつかの手順では、Caddyで使用するユーザーアカウントを作成します。Caddyは、サービスファイルを機能させてインストールする必要があります。

手順2-Caddyのユーザーとグループの作成

最も人気のある2つのHTTPサーバーであるApacheとNginxは、システムパッケージからのインストール中に特権のないユーザーを作成しますが、Caddyはそれを行いません。 セキュリティ上の理由から、スーパーユーザーの `+ root `アカウントを使用して起動しないでください。 このステップでは、Caddyの実行とそのファイルへのアクセスにのみ使用される ` caddy +`という名前の専用ユーザーを作成します。

「+ caddy +」という名前のユーザーを作成するには、次のように入力します。

sudo adduser -r -d /var/www -s /sbin/nologin

+ -r +`スイッチは、新しく作成されたアカウントをいわゆるシステムアカウントにします。+ -d + スイッチは、このユーザーのホームディレクトリを示します。この場合、作成するのは + / var / www + `です。後で。 特権のないユーザーは、システムシェルにログインしてアクセスすることはできません。これは、システムのログインを許可しないシステムコマンドである「+ / sbin / nologin 」に目的のシェルを設定する「 -s 」スイッチで確認します。 最後のパラメーターはユーザー名そのものです-この例では、 `+`です。

これで、Caddy Webサーバーのユーザーが利用可能になったら、次のステップでCaddy構成ファイルを保存するために必要なディレクトリを構成できます。

ステップ3-必要なディレクトリの設定

Caddyの自動TLSサポートとユニットファイル(次のステップでインストールします)は、特定のディレクトリとファイルが特定の権限で存在することを想定しています。 これらはすべてこのステップで作成します。

最初に、メインの `+ Caddyfile +`を格納するディレクトリを作成します。これは、CaddyにどのWebサイトをどのように配信するかを伝える設定ファイルです。

sudo mkdir /etc/caddy

このディレクトリの所有者を* root ユーザーに、グループを www-data *に変更して、Caddyが読み取れるようにします。

sudo chown -R root:caddy /etc/caddy

このディレクトリで、後で編集する空の `+ Caddyfile +`を作成します。

sudo touch /etc/caddy/Caddyfile

`+ / etc / ssl +`に別のディレクトリを作成します。 Caddyは、Let’s Encryptから自動的に取得するSSL秘密鍵と証明書を保存するためにこれを必要とします。

sudo mkdir /etc/ssl/caddy

Caddyは、証明書を取得するときにこのディレクトリに書き込むことができる必要があるため、所有者を* caddy ユーザーにします。 デフォルトのままで、グループを root *のままにしておくことができます。

sudo chown -R caddy:root /etc/ssl/caddy

次に、他のユーザーのアクセス権をすべて削除して、他のユーザーがそれらのファイルを読み取れないようにします。

sudo chmod 0770 /etc/ssl/caddy

作成する必要がある最終ディレクトリは、Webサイト自体が公開されるディレクトリです。 `+ / var / www +`を使用します。これは慣例であり、ApacheやNginxなどの他のWebサーバーを使用する場合のデフォルトパスでもあります。

sudo mkdir /var/www

このディレクトリは、* caddy *が完全に所有する必要があります。

sudo chown caddy:caddy /var/www

これで、Caddyを実行するために必要な環境を準備できました。 次のステップでは、Caddyをシステムサービスとして設定して、システムの起動時に起動し、 `+ systemctl +`で管理できるようにします。

手順4-Caddyをシステムサービスとしてインストールする

Caddyはサービスとしてそれ自体をインストールしませんが、プロジェクトは公式のhttps://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files [+ systemd + unit file]を提供します。 このファイルは、前の手順で設定したディレクトリ構造を想定しているため、設定が一致することを確認してください。

公式のCaddyリポジトリからファイルをダウンロードします。 `+ curl `コマンドに追加された ` -o `パラメータは、ファイルを ` / etc / systemd / system / `ディレクトリに保存し、 ` systemd +`から見えるようにします。

sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service

先に進む前に、ファイルを少し変更して、権限のない「+ caddy +」ユーザーを使用してサーバーを実行する必要があります。

+ vi +`またはお気に入りのテキストエディターでファイルを開きましょう(https://www.digitalocean.com/community/tutorials/installing-and-using-the-vim-text-editor-on-a-cloud -server#modal-editing [+ vi +`の簡単な紹介])

sudo vi /etc/systemd/system/caddy.service

ユーザーアカウントとグループを指定するフラグメントを見つけます。

/etc/systemd/system/caddy.service

; User and group the process will run as.
User=
Group=

次のように両方の値を「+ caddy +」に変更します。

/etc/systemd/system/caddy.service

; User and group the process will run as.
User=
Group=

ファイルを保存して閉じ、終了します。 これで、インストールでサービスファイルを使用する準備ができました。 `+ systemd +`に新しいサービスファイルを認識させます。

sudo systemctl daemon-reload

次に、Caddyを有効にして起動時に実行します。

sudo systemctl enable caddy.service

サービスのステータスを確認することで、サービスが適切にロードされ、起動時に開始できるようになっていることを確認できます。

sudo systemctl status caddy.service

出力は次のようになります。

Caddy service status output● caddy.service - Caddy HTTP/2 web server
  Loaded:  (/etc/systemd/system/caddy.service; ; vendor preset: disabled)
  Active: inactive (dead)
    Docs: https://caddyserver.com/docs

具体的には、サービスは* load および enabled *ですが、まだ実行されていません。 設定がまだ不完全であるため、まだサーバーを起動しません。

これで、Caddyをシステムサービスとして構成しました。Caddyは、手動で実行する必要なく、ブート時に自動的に開始されます。 次に、ファイアウォールを通過するWebトラフィックを許可します。

ステップ5-HTTPおよびHTTPS接続の許可(オプション)

https://www.digitalocean.com/community/tutorials/additional-recommended-steps-for-new-centos-7-servers [新しいCentOS 7サーバーの追加の推奨手順]チュートリアルにも従い、使用している場合ファイアウォール、ファイアウォールのルールを手動で追加して、インターネットトラフィックをCaddyに渡す必要があります。

CaddyはHTTPおよびHTTPSプロトコルを使用してWebサイトにサービスを提供するため、Caddyをインターネットから利用できるようにするには、適切なポートへのアクセスを許可する必要があります。

sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

3つのコマンドをすべて実行すると、次の成功メッセージが出力されます。

firewall-cmd outputsuccess

これにより、CaddyはWebサイトを訪問者に自由に提供できます。 次のステップでは、Caddyのインストールをテストするために、サンプルWebページを作成し、 `+ Caddyfile +`を更新して提供します。

手順6-テストWebページとCaddyfileの作成

まず、単純な* Hello World!*メッセージを表示する非常に単純なHTMLページを作成します。 このコマンドは、先ほど作成したウェブサイトディレクトリに、「+ <h1> Hello World!</ h1> + `」という1行のテキストだけで、「+ index.html +」ファイルを作成します。

echo '<h1>Hello World!</h1>' | sudo tee /var/www/index.html

次に、「+ Caddyfile 」に入力します。 ` Caddyfile +`は、その最も単純な形式で、1つのWebサイトの構成をそれぞれ定義する1つ以上の_server blocks_で構成されます。 サーバーブロックはアドレス定義で始まり、中括弧が続きます。 中括弧内に、そのWebサイトに適用する構成ディレクティブを含めることができます。

_アドレス定義_は、 `://:`の形式で指定されます。 一部のフィールドを空白のままにすると、Caddyは自動的にデフォルトを想定します。 たとえば、ポートを指定せずにプロトコルを指定すると、ポートは自動的に導出されます(つまり、 HTTPではポート「80」が想定され、HTTPSではポート「443」が想定されます)。 アドレス形式を管理する規則は、https://caddyserver.com/docs/caddyfile [公式Caddyfileドキュメント]で詳細に説明されています。

`+ vi `またはお気に入りのテキストエディタを使用して、手順2で作成した ` Caddyfile +`を開きます。

sudo vi /etc/caddy/Caddyfile

次の内容を貼り付けます。

/ etc / caddy / Caddyfile

http:// {
   root /var/www
   gzip
}

次に、ファイルを保存して終了します。 この特定の `+ Caddyfile +`の機能を説明しましょう。

ここでは、アドレス定義に「:// +」を使用しています。 これは、サーバーへの接続に使用されるドメイン名に関係なく、ポート ` 80 +`にバインドし、プレーンHTTPプロトコル(TLS暗号化なし)を使用してすべてのリクエストを処理する必要があることをCaddyに伝えます。 これにより、サーバーのIPアドレスを使用してCaddyがホストしているWebサイトにアクセスできます。

サーバーブロックの中かっこ内には、2つのディレクティブがあります。

  • `+ root `ディレクティブはCaddyにWebサイトのファイルの場所を伝えます。 この例では、テストページを作成した「 / var / www +」です。

  • `+ gzip +`ディレクティブは、Gzip圧縮を使用してWebサイトを高速化するようにCaddyに指示します。 追加の構成は必要ありません。

構成ファイルの準備ができたら、Caddyサービスを開始します。

sudo systemctl start caddy

これで、Webサイトが機能するかどうかをテストできます。 これには、サーバーのパブリックIPアドレスを使用します。 サーバーのIPアドレスがわからない場合は、 `+ curl -4 icanhazip.com `で取得できます。 入手したら、お気に入りのブラウザーで「 http:// +」にアクセスして、* Hello World!* Webサイトを表示します。

これは、Caddyインストールが正常に機能していることを意味します。 次のステップでは、Caddyの自動TLSサポートを使用して、ウェブサイトへの安全な接続を有効にします。

ステップ7-自動TLSの構成

Caddyを他のウェブサーバーと区別する主な機能の1つは、無料の認証局(CA)であるLet’s EncryptからTLS証明書を自動的に要求および更新する機能です。 さらに、安全な接続を介してWebサイトを自動的に提供するようにCaddyを設定するには、 `+ Caddyfile +`を1行変更するだけです。

Caddyは、構成されたすべてのサーバーブロックに対して安全なHTTPS接続を有効にし、一部の要件がサーバーブロックの構成で満たされていることを前提として、必要な証明書を自動的に取得します。

TLSが機能するためには、次の要件を満たす必要があります。

  • CaddyはHTTPSのポート「443」に自分自身をバインドできなければならず、インターネットから同じポートにアクセスできる必要があります。

  • プロトコルをHTTPに設定しないでください。ポートを「80」に設定しないでください。また、TLSを明示的にオフにしたり、他の設定でオーバーライドしたりしないでください(例: サーバーブロックで `+ tls +`ディレクティブを使用して)。

  • ホスト名は有効なドメイン名でなければなりません。空にしたり、「+ localhost +」またはIPアドレスに設定したりしないでください。 Let’s Encryptは有効なドメイン名に対してのみ証明書を発行できるため、これが必要です。

  • キャディーは、Let’s Encryptを使用したキー回復に使用できるメールアドレスを知っている必要があります。

このチュートリアルに従っている場合、最初の要件はすでに満たされています。 ただし、現在のサーバーブロックアドレスは単純に「+:// +」として構成され、暗号化もドメイン名も使用しないプレーンなHTTPスキームを定義します。 また、証明書を要求するときにLet’s Encryptが必要とする電子メールアドレスをCaddyに提供していません。 アドレスが構成で指定されていない場合、Caddyは起動時にアドレスを要求します。 ただし、Caddyはシステムサービスとしてインストールされているため、起動中に質問をすることはできず、結果として正しく起動しません。

これを修正するには、編集のために `+ Caddyfile +`を再度開きます。

sudo vi /etc/caddy/Caddyfile

最初に、 `+ http:// `のアドレス定義をドメインに置き換えます。 これにより、HTTPによって強制された安全でない接続が削除され、TLS証明書のドメイン名が提供されます。 次に、サーバーブロック内で ` tls +`ディレクティブを使用して、Caddyに電子メールアドレスを提供します。

変更された `+ Caddyfile +`は次のようになり、ドメインとメールアドレスが次のように置き換えられます。

/ etc / caddy / Caddyfile

{
   root /var/www
   gzip

}

ファイルを保存し、エディターを終了します。 変更を適用するには、Caddyを再起動します。

sudo systemctl restart caddy

次に、ブラウザを「+ https:// +」に移動して、変更が正しく適用されたかどうかを確認します。 その場合は、* Hello World!*ページがもう一度表示されます。 今回は、URLを確認するか、URLバーのロック記号を確認することで、WebサイトがHTTPSで提供されていることを確認できます。

結論

これで、安全なTLS接続を介してWebサイトを適切に提供するようにCaddyが構成されました。 Let’s Encryptから証明書を自動的に取得して更新し、新しいHTTP / 2プロトコルを使用して安全な接続でサイトを提供し、gzip圧縮を使用して読み込み時間を短縮します。

これは、Caddyを使い始めるための簡単な例です。 Caddyのユニークな機能と `+ Caddyfile +`の設定ディレクティブの詳細については、https://caddyserver.com/docs [Caddyの公式ドキュメント]をご覧ください。