Papiernik]によって作成されました。[寄付のために書く]の一環として200ドルの寄付を受け取りましたプログラム。前書きCaddyは、シンプルさとセキュリティを中心に設計されたWebサーバーであり、Webサイトのホスティングに役立つ多くの機能を備えています。2をサポートしたりできます。HTTPSは、ユーザーとサーバー間のトラフィックを保護するためのシステムであり、実稼働で実行されているWebサイトの基本的な期待になりつつあります。以前は、Caddyをインストールするための推奨される方法は、CaddyプロジェクトのWebサイトからビルド済みのバイナリをダウンロードすることでした。最近のCaddyのライセンスの仕組みの変更により、社内でCaddyを使用している場合でも、ライセンス料金を支払わない限り、これらの事前作成済みのバイナリを商用目的で使用することはできなくなります。幸いなことに、Caddyのソースコードはまだ完全にオープンソースであり、ライセンスの問題が発生するのを避けるためにCaddyを自分でビルドできます。このチュートリアルでは、Caddyをソースからビルドし、それを使用してHTTPSで保護されたWebサイトをホストします。+」を使用してCaddyを設定し、Caddyプラグインをインストールし、新しいバージョンがリリースされたときにインストールをアップグレードする方法を学習します。前提条件このガイドを開始する前に、次のものが必要です。SSH経由でサーバーに接続し、sudo特権を持つ非rootユーザーとしてログインし、UFWを使用してファイアウォールを設定できるようにする必要があります。DigitalOceanのDNS管理を使用するように設定されたドメイン名。任意のドメインレジストラからドメイン名を購入し、https://www.digitalocean.com/community/tutorials/how-to-point-to-digitalocean-nameservers-from-common-domain-registrarsのガイドに従ってください[ポインティングDigitalOceanネームサーバーへのドメイン]。DigitalOceanを介してDNSを管理します。ドメインからサーバーを指す「A」レコード、およびオプションで、IPv6を有効にする場合は「AAAA」レコード。DigitalOceanを使用したホスト名の設定のガイドでは、これを行う。サーバーにインストールされているhttps://golang.org/[Go言語]ツールチェーン。1.6のインストール方法のガイドに従ってGoをセットアップします。+`コマンドラインツールの機能についてもある程度理解している必要があります。Executables]のガイドに従ってください。ステップ1-キャディの作成この手順では、Caddyのソースコードを取得し、コンパイルできることを確認します。get`コマンドラインツールを使用します。`はGitを使用してGitHubからコードを複製します。Gitはバージョン管理システムです。変更を加えるとプロジェクトの状態が記録され、プロジェクトの履歴内の以前の状態に戻ることができます。+`コマンドはソースコードの最新バージョンをダウンロードしますが、リポジトリへの最新の追加ではなく、Caddyの最新の安定したリリースを使用することをお勧めします。未リリースのバージョンには、バグがあるか、実装が不完全で機能が壊れている可能性があります。最新の安定バージョンは、コンパイルして正しく実行される可能性が高くなります。+`コマンドを使用して、Caddyの以前のリリースをすべて表示します。tag次のような出力が表示されます。.Caddyの安定バージョンがリリースされるたびに、作成者はGitでタグを追加してこれを示します。Gitを使用して、コードを前回の安定版リリースの時点の状態に戻すことができます。出力で最も高いバージョン番号を見つけます。後でプラグインをインストールするためにソースを変更するので、新しい_branch_を作成して変更を保存します。Gitでは、ブランチは異なるバージョンのコードを同時に処理する方法です。これにより、個人的な変更を加えたコードのバージョンとコードの「公式」バージョンを切り替えることができます。`コマンドを使用します。``という名前の新しいブランチを作成するようGitに指示します。``を以前に特定した最新の安定バージョンに置き換えます。""これにより、Caddyソースコードのバージョンが最後の安定バージョンに戻り、コードへの変更を保持できる新しいブランチに移動します。Caddyを将来更新する場合、変更をこの新しいブランチにマージします。install`ツールを使用してソースコードをバイナリにコンパイルし、Caddyをビルドする準備が整いました。`コマンドを実行してサーバーを起動します。+`に設定する必要があることに注意してください。caddyこのコマンドは、次の出力を生成します。8192".Caddyで必要なさまざまな構成ファイルをセットアップするときに解決するため、当面はこの警告を無視できます。Caddyがソースからビルドされていることを実証するには、Caddyの実行時にテキストを印刷するためにCaddyソースコードに行を追加します。$GOPATH/src/github.com/mholt/caddy/caddy/caddymain/run.goこのファイルは、Caddyコマンドに渡されたオプションを処理し、Caddyを実行するときに最初に実行されるものの1つです。Run()+`関数を見つけ、強調表示されたテキストを中括弧内の最初の行として追加します。Caddy!」というテキストが出力されます。Run()+`関数に追加したメッセージが表示されます。8192".これで、Caddyをソースから正常にビルドできました。+`から削除できますが、削除する場合はコードを再コンパイルする必要があります。次の手順では、Caddyをサービスとしてインストールし、起動時に自動的に起動するようにします。その後、サーバーのセキュリティを確保するために所有権と権限の設定を調整します。[configureシステムの起動時にCaddyを自動的に起動できるようにするための_systemd_サービス]。Systemdは、Linuxでプロセスを管理するための包括的なソリューションです。caddy.service」ファイルがインストールされています。このサービスファイルは、Caddyが実行される環境についていくつかの仮定をしているので、インストールする前に変更したいことがいくつかあります。ユーザーに変更します。アカウントでCaddyを実行しないでください。Caddyに脆弱性がある場合、これは重大なセキュリティ問題になる可能性があるためです。*がバイナリを所有していると、設定する権限で他のアカウントがバイナリを変更できなくなります。これは、Caddyよりも低いアクセス許可を持つ別のプロセスが危険にさらされた場合、Caddyを変更してシステムをさらに制御することができないため、望ましい方法です。*に付与されますが、他のユーザーは読み取りと実行のみが可能になります。+(それぞれHTTPおよびHTTPSの標準ポート)へのバインドを防ぎます。Webで表示するには、Caddyをこれらのポートのいずれかにバインドする必要があります。それ以外の場合、ユーザーはブラウザでサーバーのURLに特定のポート番号を追加して、提供するコンテンツを表示する必要があります。*として実行せずに低いポートにバインドできます。`は、プロセスに完全なスーパーユーザー権限を与えずに特定の特権操作を実行できるようにするのに役立ちます。+`パーミッションを付与することを指定します。これにより、特権ポートへのバインドが可能になります。/usr/local/bin/caddyCaddyバイナリのアクセス許可を設定したら、Caddyの構成ファイルを保存するディレクトリを作成します。+」のサブディレクトリに保持する必要があります。Standardの推奨場所です。*は、Webサーバーを実行するための標準ユーザーアカウントであり、Caddyを実行するアカウントです。*として実行されるため)読み取りおよび書き込みが可能になります。他のユーザーはアクセスできません。+`ディレクトリ内のすべてのサブディレクトリとファイルの所有権を変更します。Encryptで自動TLSを有効にする方法について説明します。+`ディレクトリと同じ所有権ルールを付与します。/etc/ssl/caddyCaddyは、要求を暗号化するために、このディレクトリに証明書を書き込み、そこから読み取ることができる必要があります。*のみがアクセスできるようにします。/etc/ssl/caddy次に、Caddyがホストするファイルを保存するディレクトリを作成します。+`は、HTTP経由で提供されるファイルを格納するための事実上の標準の場所です。+`というファイルを介して設定されます。+`設定ディレクトリに似ていると考えると役立つ場合があります。Caddyfile`を作成します。することで、systemdがCaddyサービスを検出および制御できるようになります。*のみが変更できるようにします。+`コマンドラインツールを使用してsystemdをリロードします。これにより、systemdはCaddyサービスを検出しますが、まだ実行していません。status`を実行して、システムがCaddyサービスを検出したかどうかを確認します。https://caddyserver.com/docsこの同じ出力が表示される場合、Caddyはsystemdによって正しく検出されています。Caddyの構成を作成する前のこのインストールプロセスの最後の手順は、ファイアウォールを調整することです。サーバーの初期セットアップガイドで規定されているように、UFWを使用してファイアウォールを既に実行している必要があります。ファイアウォールは、サーバーのセキュリティを保護するための重要なツールです。これは、外部パーティが接続できるポートとアクセスから保護されるポートを公開できるように構成できるためです。サーバー上のポートを公開する他のプロセスがある場合、ファイアウォールはこれらへのアクセスを防ぎ、攻撃者が脆弱なソフトウェアを侵害する機会を減らします。+`のファイアウォールを無効にします。これにより、CaddyはそれぞれHTTPおよびHTTPSで通信できます。status」を使用して、変更が機能したかどうかを確認します。(v6)Caddyのインストールは完了しましたが、この時点では何もするように設定されていません。次に、このCaddyのクリーンインストールを実行して、Webサイトを提供するように構成する方法を見ていきます。ステップ3-キャディーの構成Caddyインストールを機能的なWebサーバーとして使用するには、いくつかの設定を変更する必要があります。+`設定の構文を検討し、いくつかの設定シナリオを調べ、HTTP経由でプレースホルダーページを提供します。Caddyの構成を開始するには、提供する基本的な_HTML_ファイルを作成します。HTMLはWebページのコンテンツを記述する言語であり、このファイルはCaddyでWebサイトをホストすることを示すプレースホルダーとして機能します。Caddyを使用して独自のWebサイトをホストする場合、このファイルをホストするコンテンツに置き換えます。`ディレクトリに配置します。+`という名前は重要です。これは、ほとんどのWebサーバーの「デフォルト」ページを指し、ドメインに移動するユーザーには最初にこのファイルが提供されるためです。/var/www/index.html任意のエディターで新しいファイルを開きます。/var/www/index.html次のコンテンツをファイルに追加します。</body></html>これにより、「このページはキャディー経由で配信されています」というテキストの見出しが表示されます。/etc/caddy/Caddyfileファイルを編集して、次のコンテンツを含めます。+`はサーバーのホスト名を設定します-Caddyではこれは_label_と呼ばれます。ホスト名は、Caddyがリクエストに応答するドメイン名です。この場合、サーバーのポート「:80+」を意味する「:80」に設定します。Caddyはこれを自動的に有効にしようとしますが、プラグインを介してこれを行いたいため、これにより、サーバーが現在HTTPS経由で実行されなくなります。EncryptからSSL証明書を取得しようとします。Caddyを使用して内部サービスを実行する場合、サーバーをパブリックインターネットに公開したくない場合があります。DNSチャレンジを使用できます。これには、CaddyがDNS「TXT」レコードを作成してサーバーの制御を証明し、外部のHTTP要求を受け入れる必要なく証明書を取得できるようにします。これにより、将来Caddyを実行するためのオプションが増えます。「:80」の後には、中括弧で囲まれた構成ブロックがあり、そこにサイトの構成が入ります。_directive_があります。ディレクティブはCaddyの実際の設定オプションであり、ディレクティブを追加すると、Webサイトを提供するときのCaddyの動作が変わります。ディレクティブには_arguments_を含めることができます。これは、ディレクティブを有効にする方法のオプションです。このディレクティブは、Caddyが提供するファイルがあるディレクトリを設定します。ディレクティブは引数を持つ必要はありません。+`ディレクティブを追加して、Webページをクライアントに送信する前に圧縮し、ロードを高速化できます。/var/www}ディレクティブは、追加機能を提供するサブディレクティブで構成できます。これらは、中括弧を使用して、独自の構成ブロックに配置されます。+`サブディレクティブを使用して圧縮のレベルを制御したりできます(1最低と9が最高)。gzip}Caddyには、多くのユースケース向けの膨大な数の異なるディレクティブがあります。+]ディレクティブは、PHPを有効にするのに役立ちます。+]ディレクティブを使用して、Markdownファイルを提供する前に自動的にHTMLに変換できます。これは、簡単なブログを作成するのに役立ちます。`を保存して閉じ、すべてが正常に機能していることをテストします。+`を使用してCaddyサービスを開始します。+`を実行して、Caddyサービスのステータスに関する情報を検索します。caddy以下が表示されます。http://ドメインを参照すると、Caddyが実行されていることがわかり、サンプルWebページが表示されます。+`を使用してCaddyサービスを停止します。caddyCaddyにはデフォルトで多くのディレクティブが含まれていますが、すべての可能なユースケースに対応できるわけではないため、サーバーにさらに機能を追加することができます。Caddyが期待どおりにコンテンツを提供していることがわかったので、プラグインを使用してCaddyの機能を拡張する方法について説明します。ステップ4-プラグインの使用プラグインは、Caddyの動作を変更する方法です。これらは通常、特定のユースケースにさらにディレクティブを追加するためにCaddyに挿入できる小さなコードスニペットです。プラグインを理解する最も簡単な方法は、すぐに飛び込んで試してみることです。+`プラグインをインストールします。このプラグインは、いくつかのファイルから余分な空白と冗長なコードを削除し、各ファイルのサイズを縮小します。読み込み時間の短縮に役立ちます。GoがCaddyのソースコードを保存した場所に戻ることから始めます。プラグインをインストールするには、これを変更する必要があります。+`ファイルを再度開きます。前述したように、これはCaddyの最初の実行部分の1つであり、プラグインがインストールされる場所です。import`宣言があります。一部のプラグインには若干の設定の微調整が必​​要な場合があるため、インストールするプラグインのドキュメントを必ずお読みください。+`プラグインのGitHubリポジトリはhttps://github.com/hacdias/caddy-minify[hacdias/caddy-minify]であるため、インポート宣言の下部に次を追加します。(imported))新しい更新をマージするときにそれらの変更が失われないように、コードを変更するときにコードをコミットする必要があります。このサーバーで以前にコードをコミットしたことがない場合は、ログでGitがユーザーを特定できるように、名前とメールを設定する必要があります。+-global`フラグは将来作業する可能性のあるリポジトリにそれらを適用します。GitHubなどの公開リポジトリにコードをプッシュしない限り、これらの詳細は公開されません。""ユーザー名とメールアドレスを設定したら、次のコマンドを実行して、変更したファイルをGitの_stage_(コミットする前にコードの状態を保存するために使用されるキャッシュ)に追加します。`を実行して、現在のブランチへの変更を保存します。+`オプションを使用すると、コミットメッセージを設定できるため、変更内容をメモできます。このメッセージは、Gitのログを調べることで見つけることができます。plugin"コードにはプラグインへのパスがありますが、Goが実際にアクセスできるように、プラグインをローカルにダウンロードする必要があります。+`ディレクトリから実行すると、Caddyのすべての依存関係を自動的に取得します。./...新しいプラグインを追加するたびに、Caddyを再構築する必要があります。これは、Goがコンパイルされたプログラミング言語であり、ソースコードが実行前にマシンコードに変換されるためです。インポート宣言を変更するとソースコードが変更されますが、コンパイルされるまでバイナリには影響しません。+`コマンドを使用してCaddyをコンパイルします。github.com/mholt/caddy/caddyCaddyが正常にビルドされた場合、このコマンドは出力なしで終了します。+`にコピーし、以前と同じようにバイナリのパーミッションを設定します-Caddyを再構築するたびにこれらの手順を実行して、機能とセキュリティを確保する必要があります。/etc/caddy/Caddyfile次の行を構成ブロックに追加して、プラグインを有効にします。+`を使用してサーバーを起動します。+`ファイルを含む、提供するファイルをすべて縮小します。Web要求を行うためのコマンドラインツールであるcURLを使用して、職場での「縮小」を観察できます。+`を実行すると、Webページのコンテンツが取得され、ターミナルに表示されます。`をドメインに置き換えます。http://次の出力が表示されます。+`プラグインが機能していることがわかります。Caddy</h1>この同じインストール方法は、他のCaddyプラグインでも機能します。+`プラグインをインストールすることにより、プラグインを追加することで、さらに練習を積むことができます。Encryptを使用してHTTPSをデフォルトで有効にします。これは、HTTPSの詳細を誤って取得しやすいため便利です。CaddyのHTTPSへのアプローチは安全であり、トラフィックを暗号化するために構成を深く掘り下げる必要はありません。+`メソッドを使用します。Encryptから送信されたチャレンジへの応答を含む)をWebサイト上の特定の場所に投稿します。この方法は機能しますが、Webサイトが一般にアクセス可能である必要があります。これは、特定のファイアウォール構成で問題が発生したり、Caddyをビジネスの内部サービスとして実行している場合に発生する可能性があります。Caddyプラグインをインストールできます。+`検証メソッドを使用します。Encryptで認証しますが、これはウェブサイトの機能に影響しません。DNSを制御するためにDigitalOceanのAPIを使用します。これにより、サーバーが公開されていない場合でも証明書を取得する柔軟性が得られます。`プラグインのインストール方法とほとんど同じです。$GOPATH/src/github.com/mholt/caddy/caddy/caddymain/run.goプラグインの場所を追加します。"github.com/hacdias/caddy-minify")Caddyを更新するには、Caddyのソースリポジトリに移動し、変更をGitにコミットします。provider"次に、以前に行ったように、すべての依存関係をインストールし、Caddyをビルドします。+`でCaddyが停止していることを確認してから、新しくビルドされたCaddyバイナリをコピーし、もう一度所有権と権限を設定してプラグインのインストールを完了します。/usr/local/bin/caddy次に、DigitalOceanのAPIと連携してDNSレコードを設定するようにCaddyを構成します。Write(optional)が選択されていることを確認します。[個人アクセストークンの作成]生成されたトークンをクリックしてコピーし、失わない場所に記録します。Caddyは、DigitalOceanのDNSを構成する環境変数としてこのトークンにアクセスする必要があります。systemdのサービスファイルを使用すると、プロセスの環境に含める環境変数を定義できます。+`ディレクトリのCaddyサービスファイルを編集します。Gitリポジトリの外部のファイルのバージョンにAPIキーを追加して、プライベートトークンをパブリックCaddyリポジトリに誤ってコミットしないようにします。`で始まる行を見つけます。この行は、Caddyプロセスに渡す必要がある環境変数を定義します。+`変数を追加し、続いて生成したトークンを追加します。directory.Environment=CADDYPATH=/etc/ssl/caddyこのファイルを保存して閉じ、以前に行ったようにsystemdデーモンをリロードして、構成が更新されていることを確認します。+`を実行して、設定の変更に問題がないことを確認します。caddyこれにより、次のような出力が生成されます。Loaded:`で始まる行に注意してください。`ステータスは、サービス設定への変更が成功したことを示します。」ステータスとsystemdがサービスファイルを解釈できなかった理由の説明が表示されます。Active:`で始まる次の行は、サービスが実行されているかどうかを示します。running」が表示されます。+`に若干の変更を加える必要があるため、編集用に開いてください。`+`をドメインに置き換えてください。ホスト名のポートではなくドメインを使用すると、CaddyはHTTPS経由でリクエストを処理します。+`システムを使用することを指定します。minify}Webサイトを展開する準備ができました。これにより、Caddyが起動時に起動するように構成されます。caddyドメインを参照すると、自動的にHTTPSにリダイレクトされます。Caddyのインストールが完了し、保護されています。次に、新しいバージョンがリリースされたときにCaddyを更新する方法を見ていきます。パッケージマネージャーを使用してソフトウェアをインストールする場合、更新は通常、単一のコマンドを実行するのと同じくらい簡単で、多くの場合、オペレーティングシステムはセキュリティ更新プログラムを自動的にインストールできます。Caddyをソースから構築したため、このプロセスはもう少し複雑です。ソースコードの更新バージョンからCaddyを再構築してから、再度セットアップする必要があります。古くなったソフトウェアには多くの場合脆弱性があるため、ソフトウェアを常に最新の状態に保つことは重要なセキュリティ対策です。Caddyの最新バージョンを実行すると、古いバージョンに存在する可能性のある脆弱性を介してサーバーのセキュリティが侵害されるのを防ぐことができます。このステップでは、新しいバージョンがリリースされたときにCaddyのインストールを更新する方法を見ていきます。GitHubリポジトリにプッシュされた場合にのみ従う必要があります。Gitを使用して、ソースコードの状態を更新します。+`ソースディレクトリに移動します。+`を使用して、ステップ1で作成したブランチにいることを確認します。`を使用して、リモートリポジトリから変更を取得します。GitがCaddyリポジトリのクローンを作成すると、_upstreamリポジトリ_-変更が発生する中心的な場所へのリンクが維持されます。+`という名前で参照するため、originから取得する必要があります。originこれで、リポジトリへの変更がシステムに存在し、別のブランチの下に保存されます。+`を使用して最新のリリースを確認します。tag前と同様に、最新バージョンが見つかるまでリストを参照します。merge」が含まれています。次を入力して、最新バージョンからの変更を作業ブランチにマージします。「++」をブランチの名前に、バージョン番号を特定したばかりの最新のものに置き換えてください。merge保存して閉じてマージを完了することができるエディターが表示されます。Gitが2つの異なるバージョンのコードをどのように組み合わせるかを判断できない場合、マージの競合が発生する可能性があります。これが発生した場合、Gitは通知します。競合するファイルを手動で編集してから、コミットして競合を解決する必要があります。マージの競合がないと仮定して、このチュートリアル全体で従ったのと同じプロセスでCaddyを再インストールします。install`を使用してバイナリを再構築します。github.com/mholt/caddy/caddy次に、Caddyサービスを停止し、新しいバイナリをコピーします。/usr/local/bin/バイナリのアクセス許可を設定します。+`を使用してCaddyサービスを再度起動します。caddyCaddyは無効化されていないため、今後も起動時に起動し続けます。これにより、Caddyは最新バージョンに正常に更新され、少なくとも次のリリースまで中断することなく動作し続けるはずです。結論このチュートリアルに従うことで、Caddyを使用してWebサイトを正常にデプロイできました。次の良いステップは、Caddyの新しいバージョンがリリースされたときに通知を受ける方法を見つけることです。[キャディーリリースのAtomフィード]、またはhttps://about.sibbell.com/[Sibbell]などの専用サービスを使用できます。サーバーを更新するプロセスを自動化するスクリプトを作成することもお勧めです。2つを組み合わせて、新しいリリースがあったときにCaddyを自動的に再構築するビルドツールを作成することもできます。documentation]を調べて、ニーズに合わせてカスタマイズする最善の方法を見つけてください。