CentOS7でCaddyを使用してWebサイトをホストする方法

提供:Dev Guides
移動先:案内検索

序章

Caddy は、使いやすさを念頭に置いて作成された新しいWebサーバーです。 迅速な開発サーバーとして使用できるほどシンプルで、実稼働環境で使用できるほど堅牢です。

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

Caddyは、 Let's Encrypt と緊密に統合されています。これは、無料のTLS / SSL証明書を提供し、必要に応じて証明書を自動的に取得して更新する認証局です。 つまり、Caddyが提供するすべてのWebサイトは、追加の構成やアクションを必要とせずに、安全な接続を介して自動的に提供できます。

このチュートリアルでは、Caddyをインストールして構成します。 このチュートリアルに従うと、HTTP/2と安全なTLS接続を使用して提供されるシンプルなWebサイトができあがります。

前提条件

このチュートリアルに従うには、次のものが必要です。

  • この初期サーバーセットアップチュートリアルでセットアップされた1台のCentOS7サーバー(sudo非rootユーザーを含む)。
  • サーバーを指すように構成されたドメイン名。 これは、CaddyがWebサイトのSSL証明書を取得するために必要です。 適切なドメイン名を使用しないと、WebサイトはTLS暗号化で安全に提供されません。 DigitalOcean チュートリアルでホスト名を設定する方法に従って、ドメインをDigitalOceanドロップレットにポイントする方法を学ぶことができます。
  • オプションで、sudo yum install nanoとともにインストールされたnanoテキストエディタ。 CentOSにはデフォルトでviテキストエディタが付属していますが、nanoの方がユーザーフレンドリーです。

ステップ1—キャディバイナリのインストール

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を使用してキャディバイナリが配置されていることを確認するには、それらの場所を確認します。

which caddy

コマンド出力には、キャディバイナリが/usr/local/bin/caddyにあることが示されます。

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

ステップ2—キャディのユーザーとグループを作成する

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

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

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

-rスイッチは、新しく作成されたアカウントをいわゆるシステムアカウントにします。-dスイッチは、このユーザーのホームディレクトリを示します。この場合、/var/wwwになります。後で作成します。 権限のないユーザーは、システムシェルにログインしてアクセスできないようにする必要があります。これは、-sスイッチで目的のシェルを/sbin/nologinに設定することで確認できます。これは、システムログインを禁止するシステムコマンドです。 最後のパラメーターはユーザー名自体です。この場合はcaddyです。

これで、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'sEncryptから自動的に取得するSSL秘密鍵と証明書を保存するためにこれを必要とします。

sudo mkdir /etc/ssl/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はそれ自体をサービスとしてインストールしませんが、プロジェクトは公式のsystemdユニットファイルを提供します。 このファイルは、前の手順で設定したディレクトリ構造を想定しているため、構成が一致していることを確認してください。

公式の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またはお気に入りのテキストエディタでファイルを開きましょう( vi の簡単な紹介です)

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

そして、ユーザーアカウントとグループの指定を担当するフラグメントを見つけます。

/etc/systemd/system/caddy.service

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

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

/etc/systemd/system/caddy.service

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

ファイルを保存して閉じ、終了します。 これで、サービスファイルをインストールで使用できるようになりました。 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: loaded (/etc/systemd/system/caddy.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: https://caddyserver.com/docs

具体的には、サービスがロードおよび有効であると表示されますが、まだ実行されていません。 構成がまだ不完全であるため、サーバーはまだ起動しません。

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

ステップ5— HTTPおよびHTTPS接続を許可する(オプション)

新しいCentOS7サーバーの追加の推奨手順チュートリアルも実行し、ファイアウォールを使用している場合は、インターネットトラフィックを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サイトを提供できるようになります。 次のステップでは、サンプルWebページを作成し、Caddyfileを更新して、Caddyのインストールをテストします。

ステップ6—テストWebページとCaddyfileを作成する

プレーンなHelloWorld!メッセージを表示する非常に単純なHTMLページを作成することから始めましょう。 このコマンドは、前に作成したWebサイトディレクトリにindex.htmlファイルを作成し、その中に1行のテキスト<h1>Hello World!</h1>を入れます。

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

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

アドレス定義protocol://host:portの形式で指定されます。 一部のフィールドを空白のままにすると、Caddyはそれ自体でいくつかのデフォルトを想定します。 たとえば、プロトコルを指定したがポートを指定しなかった場合、後者は自動的に導出されます(つまり、ポートは指定されません)。 ポート80はHTTPを想定しており、ポート443はHTTPSを想定しています)。 アドレス形式を管理する規則は、公式のCaddyfileドキュメントで詳細に説明されています。

viまたはお好みのテキストエディタを使用して、手順2で作成したCaddyfileを開きます。

sudo vi /etc/caddy/Caddyfile

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

/ etc / caddy / Caddyfile

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

次に、ファイルを保存して終了します。 この特定のCaddyfileが何をするかを説明しましょう。

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

サーバーブロックの中括弧の中には、次の2つのディレクティブがあります。

  • rootディレクティブは、Webサイトファイルの場所をCaddyに通知します。 この例では、テストページを作成したのは/var/wwwです。
  • gzipディレクティブは、Webサイトを高速化するためにGzip圧縮を使用するようにCaddyに指示します。 追加の構成は必要ありません。

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

sudo systemctl start caddy

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

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

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

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

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

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

  • キャディは、HTTPSのポート443に自分自身をバインドできる必要があり、インターネットから同じポートにアクセスできる必要があります。
  • プロトコルをHTTPに設定したり、ポートを80に設定したり、TLSを明示的にオフにしたり、他の設定でオーバーライドしたりしないでください(例: サーバーブロックのtlsディレクティブを使用)。
  • ホスト名は有効なドメイン名である必要があります。 空にしたり、localhostまたはIPアドレスに設定したりしないでください。 Let's Encryptは有効なドメイン名に対してのみ証明書を発行できるため、これが必要です。
  • Caddyは、Let'sEncryptを使用したキーの回復に使用できる電子メールアドレスを知っている必要があります。

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

これを修正するには、Caddyfileを開いて再度編集します。

sudo vi /etc/caddy/Caddyfile

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

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

/ etc / caddy / Caddyfile

example.com {
    root /var/www
    gzip
    tls [email protected]
}

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

sudo systemctl restart caddy

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

結論

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

これは、Caddyを使い始めるための簡単な例です。 CaddyfileのCaddy独自の機能と構成ディレクティブの詳細については、公式のCaddyドキュメントを参照してください。