序文 エージェントの役割は何ですか? - 1つのサーバーで複数のアプリケーションに対して1つのポートのみを開くのに便利 - 煩わしいポートを使わずにアプリケーションにアクセスし、ドメイン名で直接アクセスします - アプリケーションの分離 - カップリングを減らす - ... 一般的に、メンテナンスが容易であり、1 つのアプリケーションをメンテナンスしても、他のアプリケーションに影響はありません。 プロキシする方法(コンテナは相互にどのように通信するのか)? nginx のプロキシ機能を直接使用できます (関連する機能は別途参照)。ここで問題となるのは、docker コンテナ間の通信です。 Dockerコンテナが通信する主な方法は 4 つあります。 - コンテナ IP 経由のアクセス: コンテナを再起動すると、IP が変更されます。 - ホストマシンの ip:port 方式によるアクセス: ホストマシンの IP が変更されると、各アプリケーションを変更してポートをバインドする必要があり、面倒です。 - リンクを通じてリンクを確立する: 相互依存性が高すぎると、メンテナンスに役立ちません。 - カスタム ネットワーク: 同じブリッジ ネットワーク内のコンテナーは相互にアクセスできます。 当然のことながら、関連するアプリケーションを同じネットワークにリンクするには、カスタム ネットワーク メソッドが選択されます。この方法では、アプリケーションとエージェントの間に依存関係がないため、メンテナンスだけでなく移行にも便利です。設定も難しくなく、通常の IP またはドメイン名を対応するコンテナ名に置き換えるだけです。 1. 統合ネットワーク したがって、まず共有ブリッジ ネットワークを作成する必要があります。 docker ネットワーク プロキシネットワークの作成 # docker network ls を表示 2. プロキシサービスコンテナ docker-compose を使用して構築された proxy-nginx という名前の、プロキシ専用の nginx サービス コンテナを作成します。最終的なディレクトリ構造は次のようになります。 プロキシ-nginx ├── docker-compose.yml ├── logs # ログ│ └── error.log ├── nginx │ ├── Dockerファイル │ ├── nginx.conf │ └── startup.sh ├── sites #プロキシサイトの設定│ ├── baipiaoquan.com.conf │ └── chaohuahui.com.conf └── ssl # 証明書ファイル└── baipiaoquan.com.pem いくつかのファイルは、後続の実行プロセスで生成されます。設定時には、必要なファイルとディレクトリを作成するだけで済みます。 ドッカーの作成 バージョン: "3" ネットワーク: デフォルト: 外部の: 名前: プロキシネットワーク サービス: nginx: 建てる: コンテキスト: ./nginx ボリューム: - ./logs:/var/log/nginx - ./sites:/etc/nginx/sites-available - ./ssl:/etc/nginx/ssl ポート: - 「80:80」 - 「443:443」 外部ポート 80 と 443 をプロキシ サーバーにバインドすると、すべてのアプリケーションがここからアクセスできるようになります。 Dockerファイル nginx:alpineから ラベル メンテナー="chuoke" nginx.conf をコピー /etc/nginx/ apkアップデートを実行する && apk アップグレード && apk に --no-cache openssl を追加します && apk add --no-cache bash set -x を実行します。 グループを追加します -g 82 -S www-data ; adduser -u 82 -D -S -G www-data www-data && exit 0 ; exit 1 ./startup.sh /opt/startup.sh を追加します。 sed -i 's/.//g' /opt/startup.sh を実行します。 コマンド ["/bin/bash", "/opt/startup.sh"] エクスポーズ 80 443 ここでは、簡単に構成と制御できるように、実行中のユーザー グループとユーザー www-data を作成します。この名前は、nginx 構成で使用されます。 nginx.conf ユーザー www-data; ワーカープロセス 4; pid /run/nginx.pid; デーモンオフ; イベント { ワーカー接続数 2048; multi_accept オン; epoll を使用します。 } http { server_tokens オフ; ファイル送信オン; tcp_nopush オン; tcp_nodelay オン; キープアライブタイムアウト15; タイプハッシュの最大サイズは2048です。 クライアントの最大ボディサイズは20Mです。 /etc/nginx/mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; アクセスログ /dev/stdout; エラーログ /dev/stderr; gzip オン; gzip_disable "msie6"; ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2; SSL_CIPHERS 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ecdsa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa-sa- -RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-EECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHA-ECDHA HE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256 DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256:AES256-SMHA384 56-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!dss '; /etc/nginx/conf.d/*.conf を含めます。 /etc/nginx/sites-available/*.conf を含めます。 open_file_cache off; # 問題 619 のため無効 文字セット UTF-8; } nginx のデフォルトの内容をコピーするだけです。変更する必要があるのは、実行中のユーザー名です。ユーザー名は以前の設定と一致している必要があることに注意してください。 スタートアップ #!/bin/bash # crond をバックグラウンドで起動する crond -l 2 -b # フォアグラウンドで nginx を起動します nginx これは nginx プログラムを起動するために使用されます。主に将来の拡張の便宜を図るため、現在の内容は比較的小さいです。 プロキシサービスコンテナを起動する docker-compose up -d nginx docker-compose ps で起動が正常かどうかを確認します。正常でない場合は、設定にエラーがないか確認します。 これで完了です。今はそのままにして、アプリケーションを作成してください。 3. アプリケーションを追加する サイト https://baipiaoquan.com/ を追加します。 アプリケーションコンテナの構成 また、docker-compose を使用してアプリケーションを作成します。 これは PHP プロジェクトなので、このアプリケーションには少なくとも 2 つのサービス コンテナー (nginx と php-fpm) が必要です。プロジェクトのディレクトリ構造は次のとおりです。 百票全/ ├── docker-compose.yml ├── ログ │ └── nginx │ └── エラー.log ├── nginx │ ├── Dockerファイル │ ├── ログ │ ├── nginx.conf │ ├── サイト │ │ └── baipiaoquan.com.conf │ ├── SSL │ │ ├── baipiaoquan.com.key │ │ ├── baipiaoquan.com.pem │ └── startup.sh └──php-fpm ├── Dockerファイル └──php.ini ドッカーの作成 バージョン: '3' ネットワーク: プロキシ: 外部の: 名前: ${PROXY_NETWORK_NAME} バックエンド: ドライバー: ${NETWORKS_DRIVER} サービス: php-fpm: 建てる: コンテキスト: ./php-fpm ボリューム: - ./php-fpm/php.ini:/usr/local/etc/php/php.ini - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG} ネットワーク: - バックエンド nginx: 建てる: コンテキスト: ./nginx 引数: - PHP_UPSTREAM_CONTAINER=${NGINX_PHP_UPSTREAM_CONTAINER} - PHP_UPSTREAM_PORT=${NGINX_PHP_UPSTREAM_PORT} ボリューム: - ${APP_CODE_PATH_HOST}:${APP_CODE_PATH_CONTAINER}${APP_CODE_CONTAINER_FLAG} - ./log:/var/log/nginx - ./sites:/etc/nginx/sites-available - ./ssl:/etc/nginx/ssl コンテナ名: ${COMPOSE_PROJECT_NAME}_nginx 依存: -php-fpm ネットワーク: - プロキシ - バックエンド 調整を容易にするために、ここでは環境変数が使用されます。 nginx コンテナ名 container_name: ${COMPOSE_PROJECT_NAME}_nginx に注意してください。この値は重要であり、後続のプロキシで使用されます。 .env # ホスト内のコードの場所 APP_CODE_PATH_HOST=../ # コンテナ内のコードの場所 APP_CODE_PATH_CONTAINER=/var/www # これはlaradockからコピーしたものです APP_CODE_CONTAINER_FLAG=:キャッシュ済み # マシン上のストレージ パスを選択します。すべてのストレージシステムに適用可能 DATA_PATH_HOST=~/.baipiaoquan/data ### ドライバー ##################################################### # すべてのボリューム ドライバー VOLUMES_DRIVER=ローカル # ネットワークドライバー NETWORKS_DRIVER=ブリッジ #プロキシネットワーク名。これは先ほど作成した PROXY_NETWORK_NAME=proxy-network です。 ### Docker 構成ファイル #################################### # COMPOSE_FILE = docker-compose.yml # Windows で区切り文字を : から ; に変更します COMPOSE_PATH_SEPARATOR=: # プロジェクト名 COMPOSE_PROJECT_NAME=baipiaoquan 使用されるプロキシ ネットワーク名は、以前に作成された proxy-network です。 nginx 用の Dockerfile このファイルは前のファイルから直接取得でき、PHP に関する関連情報を追加できます。 nginx:alpineから nginx.conf をコピー /etc/nginx/ apkアップデートを実行する && apk アップグレード && apk --update ログローテーションを追加 && apk に --no-cache openssl を追加します && apk add --no-cache bash set -x を実行します。 グループを追加します -g 82 -S www-data ; adduser -u 82 -D -S -G www-data www-data && exit 0 ; exit 1 ARG PHP_UPSTREAM_CONTAINER=php-fpm 引数 PHP_UPSTREAM_PORT=9000 # アップストリームの設定を行い、デフォルトの設定を削除します 実行 echo "upstream php-upstream { server ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf && /etc/nginx/conf.d/default.conf を変更します ./startup.sh /opt/startup.sh を追加します。 sed -i 's/.//g' /opt/startup.sh を実行します。 コマンド ["/bin/bash", "/opt/startup.sh"] エクスポーズ 80 443 php-fpm 用の Dockerfile php:7.3-fpm より 引数PUID=1000 ENV PUID ${PUID} 引数PGID=1000 ENV PGID ${PGID} 実行 groupmod -o -g ${PGID} www-data && usermod -o -u ${PUID} -g www-data www-data エクスポーズ9000 ワークディレクトリ /var/www コマンド ["php-fpm"] php.ini ファイルを忘れないでください。デフォルトのファイルを使用することもできますが、その場合は関連する設定を削除する必要があります。 サービス baipiaoquan.com.conf の設定 サーバー{ 80 default_server をリッスンします。 # httpsの場合 443 ssl default_server をリッスンします。 ssl_certificate /etc/nginx/ssl/3243258_baipiaoquan.com.pem; ssl_certificate_key /etc/nginx/ssl/3243258_baipiaoquan.com.key; ssl_session_timeout 5分; ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers をオン; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; # localhost は server_name localhost baipiaoquan.com www.baipiaoquan.com である必要があります。 root /var/www/; # これは以前の構成と一致しています index index.php index.html index.htm; 位置 / { try_files $uri $uri/ /index.php$is_args$args; } 場所 ~ .php$ { try_files $uri /index.php =404; fastcgi_pass php-upstream; # これは、nginx Dockerfile で設定された fastcgi_index index.php です。 fastcgi_buffers 16 16k; fastcgi_buffer_size 32k; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #タイムアウトを修正 fastcgi_read_timeout 600; fastcgi_params を含めます。 } 場所 ~ /.ht { すべてを否定する; } 場所 /.well-known/acme-challenge/ { ルート /var/www/letsencrypt/; log_not_found オフ; } } ここではすべてを設定しましたが、簡素化して必要なものだけを設定することもできます。 アプリケーションを起動する この時点で、baipiaoquan.com サービスを開始できます。baipiaoquan ディレクトリで実行します。 docker-compose up -d nginx すべてがうまくいけば、アプリが起動し、サービスを受信できるようになります。コンテナに入り、localhost にアクセスして結果が期待どおりかどうかを確認することでテストすることもできます。私は次のようにテストしました: docker-compose exec nginx wget localhost 次に、返されたデータのサイズを確認し、状況に応じて成功したかどうかを判断します。 docker ネットワーク検査プロキシネットワーク 次のステップは、このアプリケーションを世界中の人々が利用できるようにすることです。 nginx-proxyにプロキシ設定を追加する 注意: 最初にアプリケーションを起動し、次にプロキシを起動してください。そうしないと、nginx はアップストリームが見つからないというエラーを報告します。 保存場所: proxy-nginx/sites/baipiaoquan.com.conf。上記の設定をコピーして、いくつかの場所を変更するだけです。最終的な設定は次のようになります。 # 私の設定では https のみをサポートしています。要件がない場合は、サーバーは必要ありません { 聞く 80; サーバー名 baipiaoquan.com www.baipiaoquan.com; 301 https://$host$request_uri を返します。 } サーバー{ # http の場合は、これを設定します # listen 80 default_server; # https の場合は、これを listen 443 ssl; に設定します。 ssl_certificate /etc/nginx/ssl/3243258_baipiaoquan.com.pem; ssl_certificate_key /etc/nginx/ssl/3243258_baipiaoquan.com.key; ssl_session_timeout 5分; ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers をオン; サーバー名 baipiaoquan.com www.baipiaoquan.com; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; 位置 / { proxy_set_header ホスト $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Port $server_port; proxy_pass http://baipiaoquan_nginx/; # この値はアプリケーション nginx のコンテナ名です} } プロキシ サーバーの構成を再読み込みし、nginx-proxy ディレクトリで実行します。 # まず設定ファイルをテストします。このステップは正常に実行される必要があります。docker-compose exec nginx nginx -t # プロンプトが成功した場合はリロードし、そうでない場合はプロンプトに従って設定ファイルを確認して変更します。docker-compose exec nginx nginx -s reload ちょっと待ってください。すべてがうまくいけば、世界中の人々がこのウェブサイト https://baipiaoquan.com/ にアクセスできるようになるはずです。 他のアプリケーションを追加する必要がある場合、ロジックとプロセスは同じです。たとえば、別のアプリケーション https://chaohuahui.com/ を追加しました。これらに ping を実行すると、同じ IP があることがわかります。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: 標準SQL更新ステートメントの3つの用途についての簡単な理解
>>: JavaScript の差異を利用して比較ツールを実装する
この記事の例では、カルーセルのフレームレート再生を実現するためのVueの具体的なコードを参考までに共...
今日は簡単な3Dルービックキューブを作ってみましょうまずはレンダリングを見てみましょう!これを学んだ...
概要クラウド プラットフォームのお客様のサーバーでは、業務量が拡大し続けるとディスク容量が不足する場...
NFS とは何ですか?ネットワークファイルシステムネットワーク上でファイルを保存および整理するための...
序文パスワードを忘れることは、よく遭遇する問題です。MySQL または MariaDB データベース...
最近、MySQL の起動中にエラーが発生しました。エラー メッセージは次のとおりです。 エラー 20...
CSS Houdini は、CSS 分野における最もエキサイティングなイノベーションとして知られてい...
必要ユーザーがフォームに入力して「保存」をクリックすると、PDF ドキュメントを直接ダウンロードでき...
ARGB は、アルファ (透明度) チャネルが追加された RGB カラー モードであり、32 ビット...
GitHubアドレス、気に入ったらスターを付けてくださいプラグインのプレビューチュートリアル1. プ...
Web サーバーは、独立したドメイン名を持つ複数の Web サイトを構築できるほか、通信経路上のトラ...
XiaobaiはVueについて学び、次にwebpackについて学び、そしてさまざまなものをインストー...
1. CSS 要素の非表示<br />CSS では、要素を非表示にする (つまり、画面の...
コードをコピーコードは次のとおりです。 <div class="content&qu...
MySQL データベースをバックアップするためのツールは多数あります。過去 2 日間で、C# を使用...