序文 エージェントの役割は何ですか? - 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 の差異を利用して比較ツールを実装する
この記事では、3Dカルーセル効果をjsで実装するための具体的なコードを参考までに共有します。具体的な...
質問アップロードするファイルのタイプを accept に追加することは、「表面的な」役割しか果たしま...
目次1. Vue2との比較1. Vue3の新機能2. Vue2とVue3の応答原理の比較3. 配列の...
まず、VMware Workstation 15.1 バージョンをダウンロードします。Thunder...
1. 基本ライン 2. 特殊効果(効果は独立しておらず、互いに組み合わせることができます) 1. 両...
目次単項演算子ブール演算子乗算演算子加法演算子関係演算子等価演算子条件演算子代入演算子カンマ演算子要...
1. web01にzabbix-agentをインストールするZabbix ウェアハウスをデプロイする...
目次環境説明Windows 10 に Docker for Windows をインストールするWin...
XHTML には多くのタグがありますが、頻繁に使用されるのはごくわずかであり、習得する必要があるのは...
目次バックエンド: Rails API部分フロントエンド: React部分Reactコンポーネントa...
序文:私の知る限り、現在 CSS で制御できるのは、タグをホバーしたときにそのタグの下の兄弟タグとサ...
序文:最近、インスタンスの移行の問題に遭遇しました。データの移行後、データベースのユーザーと権限も移...
MySQL は強力なオープンソース データベースです。データベース駆動型アプリケーションの数が増える...
目次目的モジュールのインストール基本的な使い方ポートをスキャンする開いているポートデータの送信データ...
まずサンプルコードを見てみましょう: #/bin/bash cal 日付 -u echo "...