Yunfi

Yunfi

tg_channel
github
email

Docker 系列前置技能:用 Nginx Proxy Manager 可视化管理 Nginx

サーバー上でリバースプロキシを構築したい場合、Nginx が最も一般的な選択肢です。しかし、その設定は初心者には少し複雑で、ベテランにとってもあまり便利ではありません。そのため、Caddy などのより便利な設定ツールを選ぶ人もいます。しかし、初心者には可視化された Nginx 設定ソリューションがあります:Nginx Proxy Manager、Docker イメージを提供しており、構築も非常に簡単です。

Docker のインストール#

Install Docker Engine | Docker Documentationを参照し、自分のシステムを選択してください。まだシステムを選んでいない場合は、Debian の使用を強くお勧めします。

もし全過程で root ユーザーを使用する場合も可能ですが、この方法は非常に推奨されません。大きなセキュリティリスクがあり、将来的に権限管理に関して問題が発生する可能性があります。

ほとんどのディストリビューションでは、以下のスクリプトを使用してワンクリックでインストールできますが、ドキュメントではこのインストール方法は本番環境には推奨されていないとされていますので、自分で判断してください。

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

普通のユーザーで操作することをお勧めします。インストール後は、Manage Docker as a non-root userの方法に従ってユーザーを docker ユーザーグループに追加し、毎回 Docker コマンドを使用する際に sudo を付ける必要がないようにします。

rootless mode、つまり root 権限で docker daemon を実行しないことは推奨されません。一部のプログラムに問題が発生する可能性があります。

一部の古いチュートリアルではdocker-composeのインストールを要求することがありますが、現在の Docker のバージョンには空白を含むdocker composeが内蔵されており、私自身は違いを見つけていないので、docker-composeをインストールする必要はありません。すべてdocker composeを使用しましょう。

NPM のインストール#

ドキュメント:Quick Setup | Nginx Proxy Manager

  1. まず、好きなディレクトリに cd します。例として~/docker/を使用します。

  2. 次に、npm のデータを保存するための新しいフォルダーを作成します:

    mkdir npm && cd npm
    
  3. どの方法を使用しても、以下のコードを新しく作成したdocker-compose.ymlに入れます:

    version: '3'
    services:
      app:
        image: 'jc21/nginx-proxy-manager:latest'
        container_name: 'npm'
        restart: unless-stopped
        ports:
          - '80:80'
          - '81:81'  # コロンの左側は自分のサーバーで未使用のポートに変更できます
          - '443:443'
        volumes:
          - ./data:/data # コロンの左側はパスを変更できます
          - ./letsencrypt:/etc/letsencrypt  # コロンの左側はパスを変更できます
    
  4. コンテナを起動します。

    docker compose up -d
    
  5. ブラウザで https:// あなたのサーバー ip:81 を開いてログインします。デフォルトのメール:[email protected]、デフォルトのパスワード:changeme

  6. ログイン後、アカウント名やパスワードなどの変更が表示されますが、この時点では本当の情報を急いで入力せず、適当に書いておきます。なぜなら、今は http 接続であり、安全ではありません。

インストール部分はこれで完了です。次に npm 自体を例に、リバースプロキシの設定方法を示します。

リバースプロキシ#

結果として、リバースプロキシの最も直接的な効果は、IP: ポートではなく、ドメイン名でアクセスできるようになることです。また、HTTP が HTTPS に変わります。

ドメイン名の設定#

リバースプロキシにはドメイン名が必要です。

ドメイン名の購入#

まず、ただ遊びたいだけなら、Google で無料で取得できるドメインがないか探してみてください。現時点で私が知っている無料で取得できるドメインは.link.eu.orgです。どうやって取得するかを検索してみてください。

長期的に使用したい場合は、自分の好きなドメインを選ぶのが最善です。経済的に許容できる範囲で短いものが良いです。例えば、私のyfi.moeは、yfi は Yunfi の略で、moe を選んだ理由は以下の図の通りです:

何が.moe?

私のドメインはすべてNameSiloで購入しました。彼らの.comドメインは 10 ドルちょっとで、最も安い部類に入ります。比較的お得なのは.topドメインで、初年度は $1.88、更新は $4.88 です。購入時に私のクーポンコード(Coupon)を使用すると、さらに $1 の割引が受けられます:yunfi

Cloudflare を通じてドメインを管理する(オプション)#

Cloudflareは、あなたがインターネットに接続するすべてを安全、プライベート、迅速、信頼性のあるものにすることを目的としたグローバルネットワークです。

Cloudflare はネットワークの分野で大手企業であり、無料の CDN やその他のさまざまなサービスを提供しています。私たちがやるべきことは、ドメインの DNS サーバーを Cloudflare に変更して、DNS レコードを便利に管理できるようにすることです。この記事以降も Cloudflare を例として使用します。

まず Cloudflare に登録し、サイト(Zone)を追加し、指示に従って操作します。その後、ドメイン登録業者で DNS サーバーを Cloudflare の 2 つに変更するように指示されます。もし NameSilo を使用している場合は、ドメイン管理ページで Options の最後のアイコンをクリックします。

これです

元のものを削除し、Cloudflare が提供する 2 つを入力するだけです。

DNS レコードの追加#

Cloudflare で、まず SSL/TLS ページに移動し、暗号化モードを「完全(厳格)」に変更します。

SSL

次に DNS ページを開き、レコードを追加します:

  • タイプ:A(IPv6 の場合は AAAA を使用)
  • 名前:新しいサブドメイン
  • IPv4 アドレス:サーバー IP
  • プロキシ状態:オンにすると Cloudflare の CDN を使用して、自分の IP が他人に知られないように保護できますが、国内では速くありません。国内サーバーの場合はオフにしても構いません。

dns

プロキシホストの設定#

  1. npm のホームページに移動し、Proxy Host をクリックして Add Proxy Host をクリックします。

  2. 以下のように入力します:

    1. ドメイン名:以前設定したドメイン名、ここではnginx-demo.yfi.moe
    2. フォワードホスト名 / IP:サーバーの外部 IP を入力することも、Docker コンテナにとってホストの IP(一般的には172.17.0.1)を入力することもできます。
    3. フォワードポート:以前設定したポート、ここでは 81 の例です。
    4. 下の 3 つのスイッチは、npm にとってはすべてオンにできますが、一部のアプリケーションではオンにすると問題が発生する可能性があるため、自分でテストする必要があります。

    image

  3. タブの SSL インターフェースをクリックします。

    1. 新しい SSL 証明書をリクエストを選択します。
    2. Force SSL を必ずチェックし、残りは自分のニーズに応じて設定します。
    3. メールアドレスは必ずしも自分のものである必要はありませんが、あまりにも不適切でないものである必要があります(さもないと Let's Encrypt に拒否されます)。

    image

  4. 確定をクリックします。Let's Encrypt に証明書を申請するため、約 10 秒待つ必要があります。

この時点で https://nginx-demo.yfi.moe にアクセスすると、ログイン画面が表示されます。同時にアドレスバーにも小さな鍵が表示され、現在は HTTPS で保護されていることが示されます。

** この時点で、メールアドレスやパスワードを正式に使用するものに変更できます。** その後、証明書申請のメールアドレスも自分のものに変更できます。これにより、証明書が間もなく期限切れになると、メールで通知を受け取ることができます(npm は自動的に更新しますが)。

ワイルドカード証明書の申請(オプション)#

上記のプロセスでも可能ですが、新しい Proxy Host を追加するたびに新しい証明書を申請する必要があり、非常に便利とは言えません。したがって、*.yfi.moeのような証明書を申請することができ、すべてに対して有効です。(yfi.moe自体には適用できませんので、別途申請が必要です)。

  1. npm の SSL Certificates ページに移動し、Add SSL Certificate をクリックし、Let's Encrypt を選択します。
  2. ドメイン名*.yfi.moeを入力し、Use a DNS Challenge にチェックを入れます。
  3. 新しく表示された入力ボックスで DNS Provider を Cloudflare に選択します。
  4. Cloudflare に移動し、右上のプロフィールに入り、左側の API トークンをクリックします。
  5. トークンを作成し、「DNS のゾーンを編集」のテンプレートを選択します。
  6. ゾーンリソースに追加するドメイン名を選択し、他は変更せず、「続行して要約を表示」をクリックし、「トークンを作成」をクリックします。
  7. コピーして npm の 2 番目のボックスの等号の後に貼り付け、確認をクリックします。

その後のリバースプロキシはこの証明書を使用できます。

終わりに#

Nginx と比較すると、Nginx Proxy Manager はその柔軟性において劣りますが、私は使いやすさと柔軟性のバランスを取っていると思います。そうでなければ、証明書の問題だけでもかなりの時間がかかり、簡単に済ませることはできません。

NPM はリダイレクト、ストリーミング、カスタム Nginx コードなどもサポートしており、実際には見た目よりもかなり柔軟です。

FAQ#

続く

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