あなたはエレガント、シンプル、フル機能の静的リソースサービスを構築したい場合は、MinIOそれを使用しています。
1はじめに
Webプロジェクトの開発プロセス、多くの場合、プロジェクトの必要性は、これらのリソース・ファイルを使用する場合、一般的に、(例えば、画像、ビデオ、オーディオ、JSライブラリ、CSSライブラリなど)は、我々は次の方法を使用する静的リソースに対処する必要があります。
- ローカルストレージ:JS / CSS /アイコン/フォント/画像/ libに/オーディオ/ビデオディレクトリなどを確立するプロジェクトの下で静的なディレクトリで、対応するリソース・ファイル・フォーマットを格納しています。使用時に、参照用のHTMLファイル内の相対的な位置。
- 構築物資源サービスへのディレクトリのマッピングにプロキシサーバーを(などnginxのは、Apacheなど)を使用して、ファイルのディレクトリに格納されたリソース:静的リソースサービスを構築するためにプロキシを使用してください。使用すると、htmlファイルのURLアドレス参照でプロキシサービスを使用。
- サードパーティのオープンソースまたはオブジェクトストレージファイルストレージツールの使用を、またはインターフェイスがファイルを取得することができます実現するプログラムを書くために:静的リソース・サービスを構築するために、サードパーティ製のツールを使用します。使用においては、対応するインタフェースのアドレスまたはアドレスのURLを持ちます。
- このようアリ雲、CDNや他のサービスのように:オンライン静的リソースサービスを使用します。
ローカルストレージのために、それは明らかな欠点である、リソースとコードファイルは、混合一緒に、それは必要ではなく、不便拡張したものです。オンプレミスのローカルアプリケーションでは、明らかに静的リソースは、独自のサービスをより安全に構築することができます。使用する場合は、プロキシサービスやサードパーティのツール、比較は、のみ利用可能であるがマッピング代行サービスを行うが、唯一のマッピング、ない他の管理機能を実行するために、単一を備え、拡張することは容易ではありません。サードパーティ製のファイルストレージツールやオブジェクトを使用して、あなたはファイル管理することができ、拡張性の高い、高パフォーマンス、高可用性、およびその他の要因と考えられ、そのためMinIOは、オブジェクトストレージのためにこのような有用なツールである、良い選択、であることができますシンプル、高速かつフル機能。
この記事では、リソース画像、ビデオ、オーディオ、およびその他の独立した第三者JSライブラリが展開され、アクセスに静的リソースサービスを構築、MinIO、設定と使用のインストールをされ、Java APIは、MinIOブリーフの使用によって提供され、さらなる発展を促進するためです。
2 MinIOプロフィール
プレスMinIO公式の導入、MinIOは、高性能オブジェクトストレージ(差分ブロックストレージ、ファイルストレージとオブジェクトストレージ、参照が可能である建築家が分散オブジェクトストレージソリューションを認識している、完全に開発者のニーズを考慮する)、アマゾンS3互換インターフェースそして経験;サポート分散ストレージ、拡張性の高い、高可用性、シンプルを展開し、パワフルな。公式文書にも非常に詳しいです。これは、いくつかの異なる展開モデル(スタンドアロン展開、分散展開を)持っています。MinIOは使いやすいなぜ、その理由は、それが稼働中であるということです、と設定は非常に簡単です。ドッキングウィンドウの実行によってインストールすることができ、あなたはバイナリファイルをダウンロードし、実行するスクリプトを使用することができます。
本論文では、最も簡単な方法は、Linuxマシン、スタンドアロン展開、実行バイナリに、説明します。
3つのMinIOの実行および使用静的リソース
3.1 MinIO GET
MinIO開発ドキュメントは、次のように、ダウンロードアドレスは以下のとおりです。
- Linuxの場合:
https://dl.min.io/server/minio/release/linux-amd64/minio
- ウィンドウズ:
https://dl.min.io/server/minio/release/windows-amd64/minio.exe
この記事では、Linuxで実行されます。
3.2 MinIO稼働
3.2.1フロントシンプルなスタート
開始するには、データの格納場所minioとして(例えば、は/ opt / minio-データ)新しいディレクトリを作成し、(例えば、は/ opt / minio)minio実行ディレクトリなどのディレクトリに、ダウンロードしたファイルを格納する、次のスクリプト:
cd /opt/minio
chmod +x minio
./minio server /opt/minio-data
出力は、minioが正常にインストールされている、起動してACCESS_KEYとsecret_keyに対応するエンドポイントのアクセスアドレス、あなたがアクセスできる場合は、エンドポイントアドレスにアクセスするためにブラウザを使用します後。しかし、このスタートは、いくつかの欠点があります。
- 、バックグラウンドで実行されていない
ctrl+c
プロセスの終わりになるでしょう、サービスが停止しています - アクセスするには、noカスタムユーザ名とパスワードありません
- あなたは、IPとポートを指定しませんでした
- ログファイルへません予約
これらの問題を解決するために、実行を開始するには、以下の方法を使用することをお勧めします。
3.2.2バックグラウンドを実行するためのパラメータを指定します
使用してnohup
バックグラウンドプログラムを、パラメータも下に示すように、パスワードを指定し、アクセスログ出力アドレスパラメータ。
MINIO_ACCESS_KEY=minio MINIO_SECRET_KEY=minio123 nohup /opt/minio/minio server --address "${MINIO_HOST}:${MINIO_PORT}" /opt/minio-data > /opt/minio/minio.log 2>&1 &
MINIO_ACCESS_KEY
そして、MINIO_SECRET_KEY
アクセスパスワードです
${MINIO_HOST}:${MINIO_PORT}
ホストとポートにアクセスしている、実際の状況に応じて変更します。
このように、ブラウザを介してアドレスにアクセスするには${MINIO_HOST}:${MINIO_PORT}
、指定されたMINIO_ACCESS_KEY
とMINIO_SECRET_KEY
サインインを。
3.2.3バケットを作成し、アクセスポリシーを指定
画像、ビデオ、オーディオ:MinIOストレージシステムへのブラウザでログは、オブジェクトは静的リソースを保存するためにバケツを対応して作成された保存するバケットを作成するために、右下隅をクリックしてください。したがって、それはバケットのファイルのアップロードに対応するリソースタイプで行うことができる、ファイルをアップロードした後、以下に示すようなリソースは、他の場所のURLを共有して得ることができる、共有することができます。
MinIOのデフォルトポリシーは、バケツにポリシーを設定することができ、この制限を破るために、最も効果的な時間アドレスが7日で共有することです。適切なバケットをクリックして、edit policy
ポリシーを追加し*.*
、Read Only
次のように:
だから、訪問、時間制限なしで手放す、単にプレスhttp://${MINIO_HOST}:${MINIO_PORT}/${bucketName}/${fileName}
が直接アクセスできるリソース(共有の操作は必要ありません)。
MinIOディレクトリ上の間違い
- 実際には、オブジェクトストレージのために、実際には、すべてのファイルとディレクトリがオブジェクトである、ファイルやディレクトリを区別しない、つまり、画像/ TEMP / xxx.jpgおよび画像/ tempが/オブジェクトです。これは、オペレーティングシステムのファイルシステムとの間の本質的な違いを持つツリー構造を有しています。
- ファイルをアップロードすると、objectNameにはできる
/temp/xxx.jpg
、システムが自動的に一時ディレクトリを作成します見なされます。- MinIOは削除されたディレクトリとして提供し、(つまり、このディレクトリ内のすべてのファイルを削除しない
rm -rf image/temp
ので、カタログ画像/一時削除するために、削除した画像/一時プレフィックスにすべてのファイルを配置する必要があり、)。- 複数のファイルを照会するときは、APIドキュメントを参照してください、接頭辞のマッチング方法の獲得を使用することができます
listObjects(bucketName, prefix, recursive)
3.3参照HTMLファイル内の静的リソース
上記の設定と実行を通じ、静的リソースサーバーが完了したMinIOとして、あなたはMinIOの静的リソースを参照するためにHTMLを書くことができます。以下は、すべてがMinIOアドレスのリソースを使用して、HTMLの写真、ビデオ、オーディオの内部テストです。
<div class="img-list">
<img src="http://${MINIO_HOST}:${MINIO_PORT}/image/test.jpg" alt="图片">
</div>
<div class="audio-list">
<audio src="http://${MINIO_HOST}:${MINIO_PORT}/audio/test.mp3"
controls="controls"></audio>
</div>
<div class="video-list">
<video src="http://${MINIO_HOST}:${MINIO_PORT}/video/test.mp4" controls="controls"></video>
</div>
リソースで見つけることができます正常にアクセスロードすることができます。
4つのJavaクライアントAPIオペレーション
MinIO開発者はAPIインターフェース、ユーザーがさまざまな言語を提供し、特定を参照することができ、非常に友好的であるMinIOの開発ドキュメント。次の例では、Javaにいくつかのテストを行います。
4.1追加の依存
<dependency>
<groupId>io.minio</groupId>
<artifactId>minio</artifactId>
<version>6.0.13</version>
</dependency>
4.2は、ファイル操作のためのJava APIを使用しています
MinIOクライアントオペレーションの確立minioClient = new MinioClient(endpoint, accessKey, secretKey);
、パラメータはendpoint
、アクセスアドレスMinIOときに次の二つの開始に対応するパスワード。
4.2.1アップロードファイル
/**
* 上传文件
* @param minioClient 操作客户端
* @param bucketName 上传的bucket名称
* @param objectName 上传后存储在bucket中的文件名
* @param filePath 上传的本地文件路径
*/
public void uploadFile(MinioClient minioClient, String bucketName, String objectName, String filePath) throws XmlPullParserException, NoSuchAlgorithmException, InvalidKeyException, IOException {
try {
// 若不存在bucket,则新建
boolean isExist = minioClient.bucketExists(bucketName);
if (!isExist) {
minioClient.makeBucket(bucketName);
}
// 使用 putObject 上传文件
minioClient.putObject(bucketName, objectName, filePath, null, null, null, null);
} catch (MinioException e) {
System.out.println("Error occurred: " + e);
}
}
4.2.2ファイルのダウンロード
/**
* 下载文件
*
* @param minioClient 操作客户端
* @param bucketName 上传的bucket名称
* @param objectName 上传后存储在bucket中的文件名
* @param downloadPath 下载文件保存路径
*/
public void downloadFile(MinioClient minioClient, String bucketName, String objectName, String downloadPath) throws XmlPullParserException, NoSuchAlgorithmException, InvalidKeyException, IOException {
File file = new File(downloadPath);
try (OutputStream out = new FileOutputStream(file)) {
InputStream inputStream = minioClient.getObject(bucketName, objectName);
byte[] tempbytes = new byte[1024];
int byteread = 0;
while ((byteread = inputStream.read(tempbytes)) != -1) {
out.write(tempbytes, 0, byteread);
}
} catch (MinioException e) {
System.out.println("Error occurred: " + e);
}
}
4.2.3削除ファイル
単にファイルを削除し、使用がremoveObject
可能。
minioClient.removeObject(bucketName, objectName);
4.2.4リストファイル
/**
* 罗列文件
* @param minioClient
* @param bucketName
*/
public void listFile(MinioClient minioClient, String bucketName) throws XmlPullParserException, NoSuchAlgorithmException, InvalidKeyException, IOException {
try {
Iterable<Result<Item>> results = minioClient.listObjects(bucketName);
Iterator<Result<Item>> iterator = results.iterator();
while (iterator.hasNext()) {
Item item = iterator.next().get();
System.out.println(item.objectName() + ", " + item.objectSize() + "B");
}
} catch (MinioException e) {
System.out.println("Error occurred: " + e);
}
}
5まとめ
静的リソースがMinIOを使用して、独立したアクセス、静的および動的な分離を必要とするため、あなたが迅速かつ容易にアクセスするための静的リソースサーバを実装することができます。などMinIOのダウンロード、展開、起動、操作、設定、によって記述されており、HTMLの静的リソースファイル内の参照、例えば、使用MinIOを説明するために、およびJava APIを使用する単純なを提供します。私が手助けをしたいです。
ダウンロード
本明細書で使用する場合、MinIOのnohupはは起動しますが、コマンドは、我々は通常、書き込みのスクリプトは、したがって、私が使用するすべてのためのshファイルの完全なスクリプトを書かれている、起動、シャットダウン、およびステータス照会を達成するためになり、長すぎます。さらに、MinIOのJava APIのテストは、本例では、ユニットテストモードにおいて、スプリングブートプロジェクトを使用します。
shスクリプトと春ブーツは私のプロジェクトまとめるminio githubの例を(スクリプト内のminio-serviced.sh
scriptsディレクトリ内)、ダウンロード参照する必要があります。
使用するスクリプト:
- 実際の状況に応じてパラメータを変更するには、shのスクリプト
- 変更が実行許可をします。chmod + xのminio-serviced.sh
- 押してスタートアップ/シャットダウン/再起動/実行状態:./ minio-serviced.sh開始/停止/再起動/ステータス
参考資料
- MinIO公式サイト:
https://min.io/
- MinIO開発文書:
https://docs.min.io/
- オープンソースプロジェクトのmimioオブジェクト・ストレージ・ソリューションの水をテストするために、実際に進んでください:
https://mp.weixin.qq.com/s/MzA4ODg0NDkzOA==&mid=2247487119&idx=1&sn=6e09abb32392e015911be3a1d7f066e5&source=41
- 建築家は、分散オブジェクトストレージソリューションを知っています:
https://juejin.im/post/5cdc16e251882568651553f9
- 使用minioは、高性能ストレージ・オブジェクトを構築します:
https://tonybai.com/2020/03/16/build-high-performance-object-storage-with-minio-part1-prototype
過去の記事
- パラメトリック変更ソース:複数のデータソース(3)を取得SpringBoot
- SpringBoot GET複数のデータソース(2):動的データ・ソース
- 取得SpringBoot複数のデータソース(1):ソースポリシーの複数のセット
- Javaの開発が学んできたでしょう:動的プロキシ
- 2019読んで推薦図書
- springboot + Apacheの展開HTTPSは、前端と後端を分離しました
- springboot + logbackログ出力の商慣行(下)
- springboot + logbackログ出力ビジネス慣行(上)
私のパブリック数(検索Mason技术记录
より技術的な記録のため):