事前に言っておく 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 テーブルが独立したテーブルスペースか共有テーブルスペースかを判断する方法の詳細な説明
序文多くのサイトが、ポイントやゴールドコインなど、情報のダウンロードに料金を請求していることは誰もが...
目次MVCCとはMySQL ロックとトランザクション分離レベルMySQL 元に戻すログMVCCの実装...
目次1. 4つのコンセプト1. JavaScriptはシングルスレッドです2. タスクキュー3. 同...
序文数日前、偶然、コーナーの四角形が欠落している機能に遭遇しました。最初に頭に浮かんだのは、必要な場...
前回の記事では、MySQL 最適化の概要 - クエリの合計数を紹介しました。この記事では、クエリ ス...
1. ディレクトリホワイトリストを設定する:指定されたリクエストパスに制限を設定しないでください。た...
序文Docker はコンテナの環境変数を設定できます。設定方法は 2 つあります。イメージを作成する...
導入: MySQL データベースの仕様に関しては、皆さんも何らかのドキュメントを読んだことがあると思...
1. データ重複排除日常業務では、Hive や Impala を使用してクエリとエクスポートを行う際...
序文Linux システムの管理と保守のプロセスでは、多数のコマンドが使用されます。非常に長いコマンド...
目次1. CentOS 7.9 20にDockerをインストールする2. MySQL クラスターをデ...
1. 800*600 未満の場合、Web ページの幅が 778 以内であれば、水平スクロール バーは...
mysql explain コマンドは、MySQL がインデックスを使用して選択ステートメントを処理...
目次ファイルアップロードのための2つのソリューションファイルストリーム(フォームデータ)に基づくクラ...
この記事では主に基本的なチャットの実装方法を紹介します。今後は絵文字や写真のアップロードなどの機能も...