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

ブログ    

推薦する

Vue はコンポーネント間の通信をどのように実装しますか?

目次1. 父と息子のコミュニケーション1.1 親コンポーネント --> 子コンポーネント1.2...

CentOS 7のインストールと設定方法のグラフィックチュートリアル

この記事は、CentOS 7の詳細なインストールチュートリアルを参考のために記録します。具体的な内容...

WEB 標準ウェブページ構造

背景画像でも、ページ上のテキストサイズでも、1 ピクセルの違いは非常に明白です。そして、私は学生時代...

Nginx 正規表現関連のパラメータとルールの紹介

序文最近、私はクライアントのサーバー構成を支援しており、Nginx 構成ファイルを頻繁に変更していま...

CSSマスクのフルスクリーン中央揃えを実装する方法

具体的なコードは次のとおりです。 <スタイル> #トーストローダーフルスクリーン{ 高さ...

MySQLにおける正規表現の一般的な使用法

MySQL における Regexp の一般的な使用法特定の文字列を含むあいまい一致# コンテンツフィ...

オーディオマニアにアピールするオーディオビジュアルLinuxディストリビューション

私は最近、多くの音楽に特化した Linux ディストリビューションの 1 つである Audiovis...

nginxとlvsのメリットとデメリット、そして適切な使用環境

まず最初に、ロード バランシングとは何かについて説明します。ロード バランシングとは、リクエストの内...

テーブルセルの幅tdの設定は無効であり、内部コンテンツによって常に引き伸ばされます

テーブルページを作成するときに、td に設定された幅が無効になることがあります。td の幅は常に内部...

最新の超詳細な VMware 仮想マシンのダウンロードとインストールのグラフィック チュートリアル

目次1. 仮想マシンをダウンロードする2. 仮想マシンのインストールVMware のダウンロードとイ...

CentOS システムの rpm インストールと Nginx の設定

目次CentOS rpm のインストールと Nginx の設定導入rpm パッケージのインストールサ...

Vue フロントエンド開発補助機能状態管理詳細例

目次マップ状態マップゲッターマップミューテーションマップアクション例まとめマップ状態コンポーネントが...

docker CMD/ENTRYPOINT が sh スクリプトを実行する問題の解決策: not found/run.sh:

Dockerfile の設定に問題はありませんが、ENTRYPOINT コマンドを実行するとエラー...

インターネットウェブデザインにおけるバイオニックデザインの簡単な紹介

バイオニックデザインといえば、飛行機の発明、ドバイのブルジュ・アル・アラブ、平泳ぎなどを思い浮かべる...

HTTPプロトコルにおけるステータスコードの意味

暫定的な応答を示し、要求者に操作の続行を要求するステータス コード。コードの説明100 (続行) リ...