CentOS7でCaddyを使用してWebサイトをホストする方法
序章
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ドロップレットにポイントする方法を学ぶことができます。
- オプションで、
nano
でインストールされたテキストエディタsudo yum install nano
. CentOSにはvi
デフォルトではテキストエディタですが、nano
よりユーザーフレンドリーにすることができます。
ステップ1—キャディバイナリのインストール
Caddyプロジェクトは、Caddyサーバーのバイナリファイルを取得してインストールするインストールスクリプトを提供します。 実行するには、次のように入力します。
- curl -s https://getcaddy.com | bash
スクリプトを表示するには、次のWebサイトにアクセスしてください。 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
コマンド出力には、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
The -r
スイッチは、新しく作成されたアカウントをいわゆるシステムアカウントにします。 -d
switchは、このユーザーのホームディレクトリを示します。この場合は、 /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リポジトリからファイルをダウンロードします。 追加 -o
のパラメータ curl
コマンドはファイルをに保存します /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
そして、ユーザーアカウントとグループの指定を担当するフラグメントを見つけます。
; User and group the process will run as.
User=www-data
Group=www-data
両方の値をに変更します caddy
次のように:
; 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
キャディのインストールをテストするためにそれを提供します。
ステップ6—テストWebページとCaddyfileを作成する
プレーンなHelloWorld!メッセージを表示する非常に単純なHTMLページを作成することから始めましょう。 このコマンドは、 index.html
以前に作成したWebサイトディレクトリのファイルに、1行のテキストだけを追加します。 <h1>Hello World!</h1>
、 中身。
- echo '<h1>Hello World!</h1>' | sudo tee /var/www/index.html
次に、 Caddyfile
. The Caddyfile
、最も単純な形式では、1つ以上のサーバーブロックで構成され、それぞれが単一のWebサイトの構成を定義します。 サーバーブロックはアドレス定義で始まり、中括弧が続きます。 中括弧の中に、そのWebサイトに適用する構成ディレクティブを含めることができます。
アドレス定義は次の形式で指定されます protocol://host:port
. 一部のフィールドを空白のままにすると、Caddyはそれ自体でいくつかのデフォルトを想定します。 たとえば、プロトコルを指定したがポートを指定しなかった場合、後者は自動的に導出されます(つまり、ポートは指定されません)。 ポート 80
HTTPに想定され、ポート 443
HTTPSを想定しています)。 アドレス形式を管理する規則は、公式のCaddyfileドキュメントで詳細に説明されています。
を開きます Caddyfile
手順2で作成した vi
またはお気に入りのテキストエディタ。
- sudo vi /etc/caddy/Caddyfile
次の内容を貼り付けます。
http:// {
root /var/www
gzip
}
次に、ファイルを保存して終了します。 これが具体的に何であるかを説明しましょう Caddyfile
します。
ここでは、 http://
アドレス定義用。 これは、Caddyにポートにバインドする必要があることを通知します 80
サーバーへの接続に使用されるドメイン名に関係なく、プレーンHTTPプロトコル(TLS暗号化なし)を使用してすべての要求を処理します。 これにより、サーバーのIPアドレスを使用してCaddyがホストしているWebサイトにアクセスできるようになります。
サーバーブロックの中括弧の中には、次の2つのディレクティブがあります。
- The
root
ディレクティブは、Webサイトファイルの場所をCaddyに通知します。 この例では、/var/www
、テストページを作成しました。 - The
gzip
ディレクティブは、Webサイトを高速化するためにGzip圧縮を使用するようにCaddyに指示します。 追加の構成は必要ありません。
構成ファイルの準備ができたら、Caddyサービスを開始します。
- sudo systemctl start caddy
これで、Webサイトが機能するかどうかをテストできます。 このために、サーバーのパブリックIPアドレスを使用します。 サーバーのIPアドレスがわからない場合は、 curl -4 icanhazip.com
. あなたがそれを手に入れたら、訪問してください http://your_server_ip
お気に入りのブラウザでHelloWorld!のWebサイトを表示します。
これは、Caddyのインストールが正しく機能していることを意味します。 次のステップでは、Caddyの自動TLSサポートを使用してWebサイトへの安全な接続を有効にします。
ステップ7—自動TLSの構成
Caddyを他のWebサーバーと区別する主な機能の1つは、無料の認証局(CA)であるLet’sEncryptからTLS証明書を自動的に要求および更新する機能です。 さらに、安全な接続を介してWebサイトに自動的にサービスを提供するようにCaddyを設定すると、 Caddyfile
.
Caddyは、構成されたすべてのサーバーブロックに対して安全なHTTPS接続を有効にし、サーバーブロックの構成によっていくつかの要件が満たされていることを前提として、必要な証明書を自動的に取得します。
TLSが機能するには、次の要件を満たす必要があります。
- キャディは自分自身をポートにバインドできる必要があります
443
HTTPSの場合、インターネットから同じポートにアクセスできる必要があります。 - プロトコルを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
サーバーブロック内のディレクティブ。
変更された 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を使い始めるための簡単な例です。 Caddyの独自の機能と構成ディレクティブの詳細については、 Caddyfile
公式キャディドキュメントにあります。