Docker で Nginx イメージ サーバーを構築する方法

Docker で Nginx イメージ サーバーを構築する方法

序文

一般的な開発では、画像をディレクトリにアップロードし、ディレクトリとファイル名を連結してデータベースに保存しますが、この方法は適切に行われないと特定の欠陥が発生する可能性があります。

プロジェクトを移転する場合、サーバー自体はまだ使用中であっても、サーバー上に保存されているプロジェクト関連の画像も移転する必要があり、同時にコードも修正する必要があり、非常に手間がかかります。画像を保存するための専用サーバーを構築し、FTP 経由で転送する場合は、コードを変更する必要はありません。

ここでは Docker と Nginx の紹介と利点については詳しく説明しません。インターネット上には多くのブログやチュートリアルがあります。

環境構築

環境構築の一部のモジュールは詳細が十分でない可能性があります。詳細を知りたい場合は、他の資料を確認してください。ここでは簡単な操作のみを説明します。

1. Dockerをインストールする

yumでdockerをインストール

2. Nginxイメージを取得する

docker pull nginx:1.16.0

バージョン番号は 1.16.0 です。docker search nginx でイメージをクエリできます。tomcat、mysql などの他のイメージをプルする場合も同様です。

3. dockerマウント用のメインファイルを作成する

mkdir -p /home/nginx/www /home/nginx/logs /home/nginx/conf

4. Nginxコンテナを作成して実行する

docker run -d -p 80:80 -p 443:443 --name nginx-server -v /home/nginx/www:/usr/share/nginx/html 
-v /home/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /home/nginx/logs:/var/log/nginx nginx

5. ホスト上にNginx設定ファイルを作成する

/home/nginx/confに新しいファイルnginx.confを作成し、次の設定を記述します。

ユーザー root;
ワーカープロセス 1;
error_log /var/log/nginx/error.log 警告;
pid /var/run/nginx.pid;
イベント {
 ワーカー接続 1024;
}
http {
 /etc/nginx/mime.types を含めます。
 デフォルトタイプ アプリケーション/オクテットストリーム;
 log_format main '$remote_addr - $remote_user [$time_local] "$request" '
   '$status $body_bytes_sent "$http_referer" '
   '"$http_user_agent" "$http_x_forwarded_for"';
 access_log /var/log/nginx/access.log メイン;
 ファイル送信オン;
 #tcp_nopush オン;
 キープアライブタイムアウト65;
 #gzip オン;
 /etc/nginx/conf.d/*.conf を含めます。
 サーバー{
 443 ssl を聴く;
 server_name IP アドレスまたはドメイン名。
 ルート /usr/share/nginx/html;
 ssl_certificate あなたのキー.pem;
 ssl_certificate_key あなたのキー.key;
 ssl_session_timeout 5分;
 ssl_session_cache 共有:SSL:1m;
 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:aNULL:!MD5:!ADH:!RC4;
 ssl_プロトコル TLSv1 TLSv1.1 TLSv1.2;
 ssl_prefer_server_ciphers をオン;
 # ポート 8080 にジャンプします。これは私の Tomcat コンテナです。ブラウザに https://ip/ と入力すると、Tomcat コンテナ (すでに実行されており、ポート番号がマップされている) にジャンプします。
 位置 / {
  ルート /usr/share/nginx/html;
  プロキシパス http://ip:8080/;
  インデックス index.html index.htm;
 }
     # ブラウザに https://ip/images/ と入力すると、これは以前にマウントされているため、ホストマシン上の /home/nginx/www/images/ に対応します。つまり、ホストマシン上のディレクトリと Docker コンテナ内のフォルダがデータを共有します。# まず、ホストマシン上の /home/nginx/www/ に images ディレクトリを作成します。場所 ~ /images/ {
  ルート /usr/share/nginx/html/;
 }
 }
 サーバー{
 聞く 80;
 server_name IP アドレスまたはドメイン名。
 ^ https://$host$1 を永続的に書き換えます。
 }
}

ここで SSL 設定があります。まずドメイン名を申請し、SSL 証明書を取得して設定する必要があります。ここでは詳細には触れません。

環境設定はほぼ完了です。次にvsftpdをインストールしてftpを構築します。

FTPの設定

vsftpdをインストールする

yum -y vsftpdをインストールします

ユーザーの追加

useradd カスタムユーザー名

passwd カスタムパスワード

設定ファイルを変更する

vi /etc/vsftpd/vsftpd.conf

変更が必要な箇所は以下のとおりです。

# 設定ファイルのデフォルト値はYESで、匿名アクセスがサポートされていることを意味します。サポートしないように設定されている場合
匿名を有効にする=いいえ
# 最後にこの2行を追加します
pasv_min_port=30000
pasv_max_port=30009

保存して終了した後にユーザーのアクセス権を設定する

chown ftpadmin /home/nginx/www/image
chmod 777 -R /home/nginx/www/image

テスト後、FTP 経由でアップロードすると、ブラウザの https リクエストを通じて次の結果が得られました。

*もう 1 つ: Alibaba Cloud サーバーの場合は、セキュリティ グループを構成し、ポート 21 とポート 443、80、30000 ~ 30009 を開くことを忘れないでください。

Java での FTP 転送の実装

まずリソースにftpResource.propertiesファイルを作成し、パラメータを記述します。

FTP_ADDRESS=あなたのIP
FTP_ポート=21
FTP_USERNAME=ユーザー名
FTP_PASSWORD=ユーザーパスワード
FTP_BASE_PATH=/home/nginx/www/images
IMAGE_BASE_URL=https://ドメイン/images/

次にFTP送信用のツールクラスを作成します

org.apache.commons.net.ftp.FTP をインポートします。
org.apache.commons.net.ftp.FTPClient をインポートします。
org.springframework.beans.factory.annotation.Value をインポートします。
org.springframework.context.annotation.PropertySource をインポートします。
org.springframework.stereotype.Component をインポートします。
java.io.* をインポートします。
/**
 * @著者マックス
 */
@成分
@PropertySource("クラスパス:ftpResource.properties")
パブリッククラス FtpUtil {
 /**
 * FTP_ADDRESS: FTPサーバーのIPアドレス * FTP_PORT: FTPサーバーのポート、デフォルトは21
 * FTP_USERNAME: FTP サーバーのユーザー名* FTP_PASSWORD: FTP サーバーのパスワード* FTP_BASE_PATH: 画像を保存する FTP サーバーの絶対パス* IMAGE_BASE_URL: インターネットから画像にアクセスするための FTP サーバーのパス*/
 @Value("${FTP_ADDRESS}")
 プライベート文字列 FTP_ADDRESS;
 @Value("${FTP_PORT}")
 プライベート整数 FTP_PORT;
 @Value("${FTP_USERNAME}")
 プライベート文字列 FTP_USERNAME;
 @Value("${FTP_PASSWORD}")
 プライベート文字列 FTP_PASSWORD;
 @Value("${FTP_BASE_PATH}")
 プライベート文字列 FTP_BASE_PATH;
 @Value("${IMAGE_BASE_URL}")
 プライベート文字列 IMAGE_BASE_URL;
 /**
 * 画像をアップロード * @param inputStream 入力ストリーム * @param name ファイル名 * @return 画像のURL
 * @throws IOException IO例外 */
 パブリック String uploadImage(InputStream inputStream、String name) は IOException をスローします {
 FTPクライアント ftpClient = 新しいFTPクライアント();
 試す {
  System.out.println(FTP_ADDRESS);
  ftpClient.enterLocalPassiveMode();
  ftpClient.connect(FTP_ADDRESS、FTP_PORT);
  ftpClient.login(FTP_USERNAME、FTP_PASSWORD);
  ftpClient.changeWorkingDirectory(FTP_BASE_PATH);
  ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
  ブール値 isSucceed = ftpClient.storeFile(name, inputStream);
  if (isSucceed){
  IMAGE_BASE_URL + 名前を返します。
  }
 }catch (例外 e){
  e.printStackTrace();
 }ついに {
  ftpClient.logout();
 }
 IMAGE_BASE_URL + "エラー" を返します。
 }
}

次に、サービス処理ロジックでは、コードの一部のみがここに表示されます。

オートワイヤード
 プライベート FtpUtil ftpUtil;

 @オーバーライド
 パブリック int insertImg(MultipartFile ファイル) は IOException をスローします {
 /*
 1. アップロードされたファイルストリーム inputStream とファイル名 getOriginalFilename を取得します。
 2. FtpUtil の関数を呼び出して画像を画像サーバーにアップロードし、https アドレスを返します 3. 画像アドレスが返された場合は、それをデータベースに挿入します */
 入力ストリーム inputStream = file.getInputStream();
 文字列ファイル名 = file.getOriginalFilename();
 文字列 picUrl = ftpUtil.uploadImage(inputStream, ファイル名);
 }

これで完了です。今後クライアントがリクエストしたときに、FTP 経由でサーバーに転送され、アドレスがデータベースに保存されます。フロントエンドが画像の URL を取得すれば、表示されます。

要約する

これで、Docker で Nginx イメージ サーバーを構築する方法についての記事は終了です。Docker で Nginx イメージ サーバーを構築する方法についての詳細は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • 3つのDocker Nginxログの処理の詳細な説明
  • 負荷分散と動的および静的分離操作を実現するDocker NginxコンテナとTomcatコンテナ
  • Dockerはnginxをデプロイし、フォルダとファイル操作をマウントします
  • Docker nginxは1つのホストを実装して複数のサイトを展開します
  • Docker デプロイメント nginx 実装プロセスのグラフィックとテキストによる詳細な説明
  • Docker イメージ + nginx を使用して Vue プロジェクトをデプロイする方法
  • Docker ベースの nginx ファイル サーバーを構築する方法と手順
  • Docker Nginxコンテナの制作と展開の実装方法

<<:  Vue2.x の応答性の簡単な説明と例

>>:  MySQLの詳細な説明Explain

推薦する

Swiper.jsプラグインを使用すると、カルーセル画像を非常に簡単に実装できます。

Swiper は、携帯電話やタブレットなどのモバイル端末向けに設計された、純粋な JavaScri...

Vueのメソッドとプロパティの詳細な説明

Vueのメソッドとプロパティ1. 方法使用法 1メソッド: {メソッド名: function(){}...

docker を使用してシンプルな C/C++ プログラムをデプロイする方法

1. まずhello-world.cppファイルを作成しますプログラムコードは次のとおりです。 #i...

支払いカウントダウンを実現し、ホームページに戻るためのjs

ホーム ページに戻るための支払いカウントダウン ケースの概要: シンプルな js 構文、getEle...

tinyMCEの使い方と体験の詳細な説明

tinyMCE の使用方法の詳細な説明初期化TinyMCE を初期化するときは、ページの HEAD ...

MySQL 8.0.13 解凍版のインストールと設定方法のグラフィックチュートリアル

1. インストール1. MySQLをダウンロードするダウンロードアドレス: リンクアドレスブラウザで...

ウェブページのカラーマッチングスキルについての簡単な説明(フロントエンド開発者必読)

一般的に、Web ページの背景色は、より柔らかく、よりシンプルで、より明るく、暗いテキストとマッチし...

1時間で学ぶMySQLの基礎

目次MySQL を使い始めるMySQL 管理6. MySQL サーバーを起動および停止します。 7....

JavaScript キャンバスでカラフルな太陽のハロー効果を実現

この記事では、カラフルな太陽のハロー効果を実現するためのJavaScriptキャンバスの具体的なコー...

VMware で Nginx+KeepAlived クラスタ デュアルアクティブ アーキテクチャを展開する際の問題と解決策

序文負荷分散には nginx を使用します。アーキテクチャのフロントエンドまたは中間層として、トラフ...

Linux7 ベースの Hadoop のインストールと構成の詳細なグラフィック説明

上記のように材料を準備します(ps: hadoop-3.1.2-srcはhadoop-3.1.2に変...

MySQL 5.7.10 インストール ドキュメント チュートリアル

1. 依存パッケージをインストールする yum -y インストール gcc-c++ ncurses-...

フロントエンドページのスライド検証を実装するための JavaScript + HTML

この記事では、フロントエンドページのスライド検証を実装するためのJavaScript + HTMLの...

Kubernetes の応用分野の概要

Kubernetes は、アプリケーションの移植性とハイブリッド クラウド/マルチクラウドの展開をサ...

Vue プロジェクトの最初の画面のパフォーマンス最適化コンポーネントの実践ガイド

目次Vue ファースト スクリーン パフォーマンス最適化コンポーネント説明するインターセクションオブ...