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」を削除する方法

推薦する

clipboard.js の使用法の概要

目次(1)はじめに: (2)クリップボードの内容をコピーする方法は次のとおりです。 (3)関数演算に...

JavaScript で簡単な計算機を実装する

この記事の例では、参考までに簡単な計算機を実装するためのJavaScriptの具体的なコードを共有し...

Linux システムのスワップ領域の紹介

スワップ スペースは、オペレーティング システムに関係なく、今日のコンピューティングの一般的な側面で...

デザイン理論:計画、リソース、コミュニケーションの問題について

<br />多くの中小企業ではこの問題は発生しません。中小企業はデザイナーをサポートし、...

HTML マークアップ言語 - リファレンス

123WORDPRESS.COM HTML チュートリアル セクションに戻るには、ここをクリックして...

Alibaba Cloud Server ドメイン名解決手順 (初心者向けチュートリアル)

ウェブサイトの構築を始めたばかりの初心者には、理解し、学ぶべきことがたくさんあります。ウェブサイトを...

Navicat for MySQL チュートリアル

まず、Navicat for MySQL をダウンロードしてインストールする必要があります。正規版の...

アコーディオン効果を実現するネイティブ js

実際のWebページ開発でも、アコーディオンは頻繁に登場します。簡単なアコーディオンを作ったのですが、...

JavaScript を使用したコマンドライン アプリケーションの構築

目次1. ノードをインストールする2. Commander.jsをインストールする3. JavaSc...

MySQLとOracleの誤解の詳細な説明

目次本質的な違いデータベースセキュリティ権限スキーマの移行パターンオブジェクトの類似性スキーマオブジ...

Webデザインチュートリアル(5):Webビジュアルデザイン

<br />前回の記事:Webデザイン講座(4):素材と表現について Webデザイン上級...

Mac インストール mysqlclient プロセス分析

仮想環境で pip 経由でインストールしてみてください: pip で mysqlclient をイン...

Nginx 書き換えジャンプの適用シナリオの詳細な説明

アプリケーションシナリオ1: ドメイン名ベースのリダイレクト会社の古いドメイン名は www.accp...

Vue で $attrs と $listeners を使用するチュートリアル

目次導入例要約する導入$属性すべての親コンポーネントのプロパティを継承します (props を通じて...

VMware 仮想マシンのネットワークの問題の解決方法

目次1. 問題の説明2. 問題解決1. 仮想マシンシステムのインストール時にネットワークがない場合2...