事前に言っておく Docker を使用すると非常にシンプルなデプロイメント環境を実現できることは誰もが知っています。これで、フロントエンドとバックエンドが分離されたプロジェクトができました。フロントエンドは Vue をベースに開発され、Webpakc を使用して dist フォルダーにパッケージ化されています。バックエンドは、API インターフェースを提供する Node.js サービスです。フロントエンドとバックエンドは分離されています。したがって、フロントエンド プロジェクト用のコンテナーとバックエンド プロジェクト用のコンテナーが必要です。その後、実稼働環境の場合は、クロスドメインの問題が発生します。フロントエンドのリクエストはバックエンドにリバースプロキシされる必要があります。最初に思いつくのは、Nginx を使用して proxy_pass を設定することです。はい、その通りです。そこで私たちはこれらのアイデアを思いつきました。 docker-compose でこれをどうやって行うのでしょうか? 始める 実際のところ、私は docker を理解し始めたばかりです。なので、わからないことがたくさんあります。例えば、Dockerでは、イメージを通じてコンテナが生成されるので、このコンテナは独立したシステムとみなすことができ、このシステムにも独自の独立したポートがあります。したがって、前の要件と同様に、フロントエンドが container1 のポート 80 を公開してそれをホスト マシンのポート 80 にマップし、バックエンドが container2 のポート 3000 を公開してそれをホスト マシンのポート 3000 にマップするとします。では、リクエストをリバース プロキシする場合、ホスト マシン経由で行うのでしょうか、それともコンテナー経由で行うのでしょうか?私は公式サイトの文書だけでなく、インターネット上の他の大物たちの記事も参考にして学びました。この要件はコンテナを通じて直接達成できることがわかりました。なぜ? docker-compose はすべてのコンテナを同じネットワーク下で構築するため、他のコンテナを検索する場合は、docker-compose でサービス名を検索するだけで済みます。 カタログを見てみましょう: vueミュージック ├─ .git ├─ .gitignore ├─ ライセンス ├─ README.md ├─ babel.config.js ├─ ディストリクト ├─ docker-compose.yml ├─ ドキュメント ├─ nginx.conf ├─ package-lock.json ├─ package.json ├─ 公開 ├─ サーバー ├─ 出典 └─ vue.config.js dist はフロントエンド プロジェクトであり、server はバックエンド プロジェクトです。 docker-compose.yml を見てみましょう: バージョン: '3' サービス: music-web: フロントエンドプロジェクトの#サービス名 container_name: 'music-web-container' #コンテナ名image: nginx #イメージを指定restart: always ポート: - 80:80 ボリューム: - ./nginx.conf:/etc/nginx/nginx.conf #nginx 設定をマウント - ./dist:/usr/share/nginx/html/ #プロジェクトをマウントdepends_on: - 音楽サーバー music-server: #バックエンドプロジェクトのサービス名 コンテナ名: '音楽サーバーコンテナ' build: ./server #サーバーディレクトリのDockerfileに基づいてイメージをビルドします restart: always さらす: - 3000 ご覧のとおり、volumes プロパティを使用して、ホストの nginx.conf をコンテナ内の nginx 構成ファイルにマウントし、元の構成ファイルを上書きし、dist もコンテナにマウントします。フロントエンド プロジェクトのコンテナーを公開してホスト マシンのポート 80 にマップし、バックエンド プロジェクトのコンテナーをポート 3000 に公開します。では、リバース プロキシ要求はどこで実装するのでしょうか? nginx.conf を参照してください: #ユーザーnobody; ワーカープロセス 1; イベント { ワーカー接続 1024; } http { mime.types を含めます。 デフォルトタイプ アプリケーション/オクテットストリーム; ファイル送信オン; #tcp_nopush オン; #キープアライブタイムアウト 0; キープアライブタイムアウト65; #gzip オン; gzip オン; gzip_min_length 5k; gzip_バッファ 4 16k; #gzip_http_バージョン1.0; gzip_comp_レベル 3; gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; gzip_vary オン; サーバー{ 聞く 80; サーバー名 www.xieyezi.com; #音楽アプリプロジェクトの場所 / { index index.html index.htm; #属性を追加します。 root /usr/share/nginx/html; #サイトディレクトリ} # ミュージックアプリプロジェクト設定プロキシ転送場所 /api/ { proxy_pass http://music-server:3000/; } エラーページ 500 502 503 504 /50x.html; 場所 = /50x.html { ルート /usr/share/nginx/html; } } } 上記で proxy_pass http://music-server:3000/; を確認できます。 Music-server は、バックエンド プロジェクトのサービス名です。サービス名を使用してコンテナーを検索し、リバース プロキシを実現します。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQL が InnoDB テーブルが独立したテーブルスペースか共有テーブルスペースかを判断する方法の詳細な説明
ガラス窓今日実現するのは雨滴効果です。ただし、雨滴効果を実現する前に、まずは曇りガラス効果を作成しま...
概要Docker 自体の現在のデフォルト ネットワークについては、単一ホスト上の異なる Docker...
1. Linuxカーネルドライバモジュールの仕組み静的ロードでは、ドライバモジュールをカーネルにコン...
目次1. クラス1.1 コンストラクタ() 1.2 ゲッターとセッター1.3 これ1.4 静的プロパ...
目次序文1. MySQL マスタースレーブレプリケーション1. サポートされているレプリケーションの...
序文パブリック IP を持つ本番 VPS の場合、必要なポートのみが開かれ、IP とポートを制御する...
目次1. Dockerの設定2. レジストリとネットワークを作成する3. コンテナを起動する環境説明...
序文インターセプター最近のフロントエンド フレームワークでは、インターセプターは基本的に非常に基本的...
DNSとはDNS の正式名称は Domain Name System で、ドメイン名解決システムを意...
3G の普及により、携帯電話を使ってインターネットにアクセスする人が増えています。モバイル デバイ...
目次1. オブジェクトをマップとして扱わない1. 未定義のプロパティはプロトタイプチェーンを通じてア...
ナビゲーションバーのサブメニューを再帰的に生成すると、メニューは正常に生成できるが、マウスをホバーす...
いくつかの理由(好奇心も含む)から、数週間前に Linux デスクトップとして Xfce を使い始め...
この記事では、MySQL 5.7.24のインストールと設定のチュートリアルを参考までに紹介します。具...
この記事では、参考までに、簡単な計算機を実装するためのJavaScriptの具体的なコードを紹介しま...