序文 一般的な開発では、画像をディレクトリにアップロードし、ディレクトリとファイル名を連結してデータベースに保存しますが、この方法は適切に行われないと特定の欠陥が発生する可能性があります。 プロジェクトを移転する場合、サーバー自体はまだ使用中であっても、サーバー上に保存されているプロジェクト関連の画像も移転する必要があり、同時にコードも修正する必要があり、非常に手間がかかります。画像を保存するための専用サーバーを構築し、FTP 経由で転送する場合は、コードを変更する必要はありません。 ここでは Docker と Nginx の紹介と利点については詳しく説明しません。インターネット上には多くのブログやチュートリアルがあります。 環境構築 環境構築の一部のモジュールは詳細が十分でない可能性があります。詳細を知りたい場合は、他の資料を確認してください。ここでは簡単な操作のみを説明します。 1. Dockerをインストールする
2. Nginxイメージを取得する
バージョン番号は 1.16.0 です。docker search nginx でイメージをクエリできます。tomcat、mysql などの他のイメージをプルする場合も同様です。 3. dockerマウント用のメインファイルを作成する
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設定ファイルを作成する
ユーザー 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をインストールする
ユーザーの追加 useradd カスタムユーザー名 passwd カスタムパスワード 設定ファイルを変更する
変更が必要な箇所は以下のとおりです。
保存して終了した後にユーザーのアクセス権を設定する
テスト後、FTP 経由でアップロードすると、ブラウザの https リクエストを通じて次の結果が得られました。 *もう 1 つ: Alibaba Cloud サーバーの場合は、セキュリティ グループを構成し、ポート 21 とポート 443、80、30000 ~ 30009 を開くことを忘れないでください。 Java での FTP 転送の実装 まずリソースに
次に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 をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
Swiper は、携帯電話やタブレットなどのモバイル端末向けに設計された、純粋な JavaScri...
Vueのメソッドとプロパティ1. 方法使用法 1メソッド: {メソッド名: function(){}...
1. まずhello-world.cppファイルを作成しますプログラムコードは次のとおりです。 #i...
ホーム ページに戻るための支払いカウントダウン ケースの概要: シンプルな js 構文、getEle...
tinyMCE の使用方法の詳細な説明初期化TinyMCE を初期化するときは、ページの HEAD ...
1. インストール1. MySQLをダウンロードするダウンロードアドレス: リンクアドレスブラウザで...
一般的に、Web ページの背景色は、より柔らかく、よりシンプルで、より明るく、暗いテキストとマッチし...
目次MySQL を使い始めるMySQL 管理6. MySQL サーバーを起動および停止します。 7....
この記事では、カラフルな太陽のハロー効果を実現するためのJavaScriptキャンバスの具体的なコー...
序文負荷分散には nginx を使用します。アーキテクチャのフロントエンドまたは中間層として、トラフ...
上記のように材料を準備します(ps: hadoop-3.1.2-srcはhadoop-3.1.2に変...
1. 依存パッケージをインストールする yum -y インストール gcc-c++ ncurses-...
この記事では、フロントエンドページのスライド検証を実装するためのJavaScript + HTMLの...
Kubernetes は、アプリケーションの移植性とハイブリッド クラウド/マルチクラウドの展開をサ...
目次Vue ファースト スクリーン パフォーマンス最適化コンポーネント説明するインターセクションオブ...