docker compose を使用して fastDFS ファイル サーバーを構築する方法

docker compose を使用して fastDFS ファイル サーバーを構築する方法

前回の記事では、docker compose を使用して FastDfs ファイル サーバーをインストールする詳細な例を紹介しました。

今日は、docker compose を使って fastDFS ファイルサーバーを構築する方法を紹介します。詳細は以下の通りです。

プラットフォーム: Mac M1

注: IPアドレスについて

docker ネットワーク モードに関しては、上記の記事で docker Host 模式について言及されています。

コンテナを起動するときにホスト モードを使用すると、コンテナは独立したネットワーク名前空間を取得せず、ホストとネットワーク名前空間を共有します。コンテナは独自のネットワーク カードを仮想化したり、独自の IP を構成したりはせず、ホストの IP とポートを使用します。ただし、ファイル システムやプロセス リストなど、コンテナーの他の側面は、ホスト マシンから分離されたままです。

問題は、ホスト マシンの IP とポートを使用し、構成ファイルで IP としてlocalhost入力すると、コンテナーにアクセスできるはずですが、実際にはアクセスできないことです。 IP Addressの入力方法に関する私の個人的な理解は次のとおりです (誤解がある場合は訂正してください)。

tracker起動時のコンソール出力:

192.168.64.2のネットワークは次のとおりです。

192.168.65.4のネットワークは次のとおりです。

ファイルディレクトリ

├── docker-compose.yaml
├── nginx
│ └── nginx.conf
├── ストレージ
│ └── データ
└── トラッカー
│ └── 会議
│ └── クライアント.conf
└── ストアパス

./docker-compose.yaml

バージョン: "2"
サービス:
	fastdfsトラッカー:
		ホスト名: fastdfs-tracker
		コンテナ名: fastdfs-tracker
		画像: season/fastdfs:1.2
		ネットワークモード: "ホスト"
		コマンド: トラッカー
		ボリューム:
		  - ./トラッカー/データ:/fastdfs/トラッカー/データ
		  - ./tracker/conf:/etc/fdfs
	fastdfs ストレージ:
		ホスト名: fastdfs-storage
		コンテナ名: fastdfs-storage
		画像: season/fastdfs:1.2
		ネットワークモード: "ホスト"
		ボリューム:
		  - ./ストレージ/データ:/fastdfs/ストレージ/データ
		  - ./ストアパス:/fastdfs/ストアパス
		環境:
		  - トラッカーサーバー=192.168.64.2:22122
		コマンド: ストレージ
		依存:
		  - fastdfsトラッカー
	fastdfs-nginx:
		ホスト名: fastdfs-nginx
		コンテナ名: fastdfs-nginx
		画像: season/fastdfs:1.2
		ネットワークモード: "ホスト"
		ボリューム:
		  - ./nginx/nginx.conf:/etc/nginx/conf/nginx.conf
		  - ./ストアパス:/fastdfs/ストアパス
		環境:
		  - トラッカーサーバー=192.168.64.2:22122
		コマンド: nginx

./tracker/conf/クライアント.conf

# 接続タイムアウト(秒)
# デフォルト値は30秒​​です
接続タイムアウト=30
# ネットワークタイムアウト(秒)
# デフォルト値は30秒​​です
ネットワークタイムアウト=60

# ログファイルを保存する基本パス
ベースパス=/fastdfs/クライアント

# tracker_serverは複数回出現する可能性があり、tracker_serverの形式は
# "host:port"、host はホスト名または IP アドレスです
# ここで IP を変更する必要があります
トラッカーサーバー=192.168.64.2:22122

#syslog と同じ標準ログ レベル、大文字と小文字を区別しない、値のリスト:
### 緊急の場合は emerg
### 警告
### クリティカルの場合はcrit
### エラー
### 警告に対する警告
### 知らせ
### 情報
### デバッグ
ログレベル=情報

# 接続プールを使用する場合
# デフォルト値はfalseです
# V4.05以降
use_connection_pool = false

# アイドル時間がこの時間を超える接続は閉じられます
# 単位: 秒
# デフォルト値は3600です
# V4.05以降
接続プールの最大アイドル時間 = 3600

# トラッカーサーバーからFastDFSパラメータをロードする場合
# V4.05以降
# デフォルト値はfalseです
load_fdfs_parameters_from_tracker=false

# IPアドレスの代わりにストレージIDを使用する場合
# tracker.confと同じ
# load_fdfs_parameters_from_tracker が false の場合にのみ有効
# デフォルト値はfalseです
# V4.05以降
use_storage_id = 偽

# ストレージIDファイル名を指定します。相対パスまたは絶対パスを使用できます。
# tracker.confと同じ
# load_fdfs_parameters_from_tracker が false の場合にのみ有効
# V4.05以降
ストレージIDファイル名 = ストレージID.conf

#HTTP設定
http.tracker_server_port=80

#HTTPのその他の設定を含めるには「#include」ディレクティブを使用します
##http.conf を含める

./nginx/nginx.conf

#ユーザーnobody;
ワーカープロセス 1;

#error_log ログ/error.log;
#error_log ログ/error.log 通知;
#error_log ログ/error.log 情報;

#pid ログ/nginx.pid;

イベント {
	ワーカー接続 1024;
}

http {
	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 ログ/access.log メイン;

	ファイル送信オン;
	#tcp_nopush オン;

	#キープアライブタイムアウト 0;
	キープアライブタイムアウト65;

	#gzip オン;

	サーバー{
		聞く 9800;
		server_name ローカルホスト;

		#文字セット koi8-r;

		#access_log ログ/host.access.log メイン;

		# パーツの位置を変更する / {
			ルート /fastdfs/store_path/data;
			ngx_fastdfs_モジュール;
		}

		#エラーページ 404 /404.html;

		# サーバーのエラーページを静的ページ /50x.html にリダイレクトします
		#
		エラーページ 500 502 503 504 /50x.html;
		場所 = /50x.html {
			ルートhtml;
		}
	}
}

SpringBootはfastDFSを統合する

依存関係の追加

<依存関係>
	<groupId>com.github.tobato</groupId>
	<artifactId>fastdfs クライアント</artifactId>
	<バージョン>1.27.2</バージョン>
</依存関係>

アプリケーション.yaml

# 分散ファイルシステム構成 fdfs:
  #自分の IP に合わせて IP を変更します: 192.168.64.2
  #ソケット接続タイムアウト soTimeout: 1500
  接続タイムアウト: 600
  #複数のトラッカーリストをサポート:
    - ${fdfs.ip}:22122
  # fastDFS の nginx の IP とポート
  # IDEAはhttpsを使用するよう促します。 
  # nginx の SSL 設定は次の場所に移動してください:
  ウェブサーバーのURL: http://${fdfs.ip}:9800/

FastDFSConfig.java

@構成
// FastDFS-Client コンポーネントをインポートします @Import(FdfsClientConfig.class)
// 繰り返しの JMX Bean 登録の問題を解決します @EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
パブリックアスペクトFastDFSConfig {
}

FastDFSUtil.java

@成分
パブリッククラスFastDFSUtil {
    @リソース
    プライベート FastFileStorageClient fastFileStorageClient;
    @リソース
    プライベート FdfsWebServer fdfsWebServer;

    パブリック String uploadFile(MultipartFile ファイル) は IOException をスローします {
        StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(), file.getSize(), FilenameUtils.getExtension(file.getOriginalFilename()), null);
        文字列 fullPath = storePath.getFullPath();
        フルパスを取得します。
        fullPath を返します。
    }

    パブリック文字列 uploadFile(ファイル ファイル) {
        試す {
            FileInputStream 入力ストリーム = 新しい FileInputStream(ファイル);
            StorePath storePath = fastFileStorageClient.uploadFile(inputStream、file.length()、FilenameUtils.getExtension(file.getName())、null);
            storePath.getFullPath() を返します。
        } キャッチ (例外 e) {
            e.printStackTrace();
            null を返します。
        }
    }

    パブリック byte[] downloadFile(String filePath) {
        StorePath storePath = StorePath.parseFromUrl(filePath);
        fastFileStorageClient.downloadFile(storePath.getGroup(), storePath.getPath(), 新しい DownloadByteArray()) を返します。
    }

    パブリックブール値deleteFile(文字列filePath) {
        StringUtils.isEmpty(filePath) の場合 {
            false を返します。
        }
        試す {
            StorePath storePath = StorePath.parseFromUrl(filePath);
            fastFileStorageClient.deleteFile(storePath.getGroup(), storePath.getPath());
        } キャッチ (例外 e) {
            e.printStackTrace();
            false を返します。
        }
        true を返します。
    }

    /**
     * パッケージファイルの完全な URL アドレス*
     * @param パス
     * @戻る
     */
    パブリック文字列 getResAccessUrl(文字列パス) {
        fdfsWebServer.getWebServerUrl() + パスを返します。
    }
}

FastDFSController.java

@レストコントローラ
@RequestMapping("/fast-dfs")
パブリッククラスFastDFSController{
    /**
     * @param ファイル
     * @戻る
     * @throwsIOException 例外をスローします
     */
    @PostMapping("")
    @トランザクション
    public void uploadFile(MultipartFile file, String cuisineId) は IOException をスローします {
        文字列 s = fastDfsUtil.uploadFile(ファイル);
        文字列 resAccessUrl = fastDfsUtil.getResAccessUrl(s);
    }

    /**
     * @param レスポンス
     * @throwsIOException 例外をスローします
     */
    @GetMapping("")
    パブリック void downloadFile(String filePath, HttpServletResponse response) は IOException をスローします {
        byte[] バイト = fastDfsUtil.downloadFile(filePath);

        文字列[] split = filePath.split("/");
        文字列 fileName = split[split.length - 1];
        // 強制ダウンロードを開かないように設定 response.setContentType("application/force-download");

        ファイル名 = URLEncoder.encode(ファイル名、StandardCharsets.UTF_8);
        response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
        IOUtils.write(バイト、response.getOutputStream());
    }

    /**
     * ストリーミングモードでビデオを再生します。最初から最後までしか視聴できません。すでに視聴したコンテンツを手動でクリックして視聴することはできません。* @param filePath
     * @param レスポンス
     * @throwsIOException 例外をスローします
     */
    @GetMapping("/play")
    パブリック void streamMedia(String filePath, HttpServletResponse レスポンス) は IOException をスローします {
        byte[] バイト = fastDfsUtil.downloadFile(filePath);
        IOUtils.copy(新しい ByteArrayInputStream(bytes)、response.getOutputStream());
        レスポンスをフラッシュバッファ();
    }
}

docker compose を使用して fastDFS ファイル サーバーを構築する方法についての記事はこれで終わりです。docker compose を使用して fastDFS を構築する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • docker compose を使用して FastDfs ファイル サーバーをインストールする詳細な例
  • Docker に fastdfs イメージをインストールする際の注意事項
  • Docker で FastDFS ファイル システムを構築する (マルチイメージ チュートリアル)
  • DockerにFastDFSをインストールする方法
  • Docker で FastDFS をデプロイする方法

<<:  MySQL5.7 シングルインスタンス自動起動サービスの設定プロセス

>>:  フォームの「Enter」、「Submit」、「Enter != Submit」を削除する方法

推薦する

メタを使用してトラフィックキャッシュをキャンセルし、ページにアクセスするたびにページを更新して簡単にデバッグできるようにします。

コードをコピーコードは次のとおりです。 <!-- ブラウザがローカル キャッシュからページにア...

JavaScript の手ぶれ補正とスロットリングの詳細な説明

目次デバウンススロットル要約するデバウンス定義: スクロール イベントなど、短時間に連続してトリガー...

MacBook 向け Python 3.7 インストール チュートリアル

MacBookにpython3.7.0をインストールする詳細な手順は、参考までに記録されています。具...

Node.js の非同期ジェネレータと非同期反復の詳細な説明

序文ジェネレーター関数は、async/await が導入される前から JavaScript に存在し...

MySQL ストアド プロシージャ (in、out、inout) の詳細な説明

1. はじめにバージョン 5.0 以降でサポートされています。特定の機能を実行するための SQL ス...

mysql5.7.22 ダウンロードプロセス図

1. 公式ウェブサイト www.mysql.com にアクセスし、ダウンロードを選択します。 2. ...

Docker で Maven プロジェクトをより速くビルドする

目次I. 概要2. 従来の多段階イメージ構築3. Buildkitを使用してイメージをビルドする4....

CSS ラベルモード表示プロパティの詳細な説明

コードは次のようになります。 <!DOCTYPE html> <html> ...

「いいね!」機能では MySQL と Redis のどちらを使用すればよいでしょうか?

目次1. 初心者が陥りがちな間違い2. Iteratorのremove()メソッドを使用する3. f...

MySQL でコミットされていないトランザクション情報を見つける方法

少し前に、「ORACLE でコミットされていないトランザクションの SQL ステートメントを見つける...

Vue における属性とプロパティの具体的な使用法と違い

目次Vue.jsにおける属性とプロパティ値および関連する処理として属性とプロパティの概念属性とプロパ...

JavaScript ツールチェーンの不完全なガイド

目次概要静的型チェックコードスタイルチェック(Linter)パッケージマネージャーモジュールローダー...

Vueはmockjsを使用してシミュレートされたデータケースの詳細を生成します

目次プロジェクトにmockjsをインストールするVueプロジェクトでmockjsを使用する基本的なプ...

すべてのブラウザとの完全な互換性を実現するために最適なプリセットを選択してください

各ブラウザの select タグのプロパティと各ブラウザのサポートが多少異なるため、各ブラウザでの選...

モバイル Web WAP には Bootstrap と jQuery Mobile のどちらを使用すべきか

問題を解決するBootstrap は、次の問題を解決する CSS フレームワークです。デバイス間での...