js-common-code/docs/minio.md
2025-03-22 12:49:06 +09:00

199 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MinIO 利用ガイド
## 概要
[MinIO](https://min.io/) は Amazon S3 互換のオブジェクトストレージサーバー。軽量かつシンプルな構成で、オンプレミスやクラウド上に S3 互換のストレージ環境を構築できる。
高可用構成やセキュリティ機能も備えており、小規模から大規模用途まで幅広く利用できる。本記事では MinIO の導入方法、仕様要件、ユースケース、基本的な利用方法についてまとめる。
---
## 1. インストール方法
### 1.1 Docker を使う場合
```bash
docker run -p 9000:9000 -p 9001:9001 \
--name minio \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=password123" \
-v /mnt/data:/data \
quay.io/minio/minio server /data --console-address ":9001"
```
- `9000`: S3互換API用ポート
- `9001`: Webコンソール用ポート
![mino-top.png](/mino-top.png)
---
### 1.2 Docker Compose を使う場合
```yaml
version: '3.8'
services:
minio:
image: quay.io/minio/minio
ports:
- "9000:9000"
- "9001:9001"
volumes:
- ./data:/data
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: password123
command: server /data --console-address ":9001"
restart: unless-stopped
```
起動コマンド:
```bash
docker compose up -d
```
---
### 1.3 バイナリから直接実行する場合Linux
```bash
wget https://dl.min.io/server/minio/release/linux-amd64/minio
chmod +x minio
sudo mv minio /usr/local/bin/
export MINIO_ROOT_USER=admin
export MINIO_ROOT_PASSWORD=password123
minio server /mnt/data --console-address ":9001"
```
---
## 2. 仕様要件
| 項目 | 推奨構成例 |
|--------------|------------------------------|
| OS | LinuxUbuntu 22.04 など) |
| CPU | 1コア以上最低限 |
| メモリ | 1GB 以上2GB 以上推奨) |
| ストレージ | SSD または HDD |
| 通信 | ポート 9000 / 9001開放 |
- HTTPS を使用する場合は TLS 証明書Let's Encrypt など)を導入
- リバースプロキシNginx/Caddyなど経由での公開も可能
---
## 3. ユースケース・機能
### 主なユースケース
- バックアップ保存
- Webアプリの画像・動画ストレージ
- ログデータ保管
- オンプレS3互換ストレージ
### 主な機能
- S3 互換API対応
- Webベース管理コンソール
- IAM風のユーザー・ポリシー制御
- TLS対応HTTPS通信
- サーバーサイド暗号化AES-256
- マルチテナント対応(認証連携含む)
- オブジェクトのバージョン管理(設定時)
---
## 4. 実際の使い方
サンプルコードでは以下を作成しております
1. バケット作成 : sample-data(readwrite)
2. ユーザー設定 : appuser:password123
### Webコンソールを利用する場合
#### Webコンソールにアクセス
ブラウザで `http://<ホスト>:9001` にアクセス
管理者アカウントでログイン(`MINIO_ROOT_USER` / `MINIO_ROOT_PASSWORD`
---
#### バケット作成・ファイルアップロード
- Web UI からバケット作成
- ローカルからファイルをアップロード可能
- バケット単位で「パブリックアクセス許可」も可能
### `mc` コマンドによる操作
#### インストール
```bash
wget https://dl.min.io/client/mc/release/linux-amd64/mc
chmod +x mc
sudo mv mc /usr/local/bin/
```
#### MinIOへの接続
```bash
mc alias set local http://localhost:9000 admin password123
```
#### 操作例
```bash
mc mb local/mybucket
mc cp ./example.jpg local/mybucket/
mc ls local/mybucket
```
### 各プログラム言語のライブラリから利用する場合
MinIOはAmazon S3互換のAPIを提供しているためS3対応の
クライアントライブラリを使用すればPythonやNode.jsから
簡単に接続・操作できます
* Python: `boto3`
* Node.js: `@aws-sdk/client-s3`
**接続時の注意点**
* リージョン
* 仮に指定しますが実際は無視される
* バージョニング/ライフサイクル/通知
* 一部のS3機能はMinIOでサポートされていない、または挙動が違う場合あり
* 署名付きURL
* boto3などで生成する署名付きURLも動作しますが、MinIOの設定によって挙動が異なることがある
### minioライブラリ(MinIO公式)
MinIO専用に最適化されていて、軽量・シンプルで扱いやすいのが特徴です。
S3互換APIを使ってはいますがAmazon純正のSDK@aws-sdk/*と違いMinIOのユースケースに特化してます
#### インストール方法
```sh
npm install minio
```
#### インストール方法
---
## 付録Tips
- リバースプロキシNginxを通して HTTPS 公開することで、ブラウザ互換性やセキュリティを向上できる
- Cloudflare などのCDNと組み合わせれば、簡易的なグローバル配信も可能
- アプリからは AWS SDK を使ってアクセス可能S3互換
---
## まとめ
MinIO は S3互換かつ軽量で、開発・検証・軽量サービスにおけるストレージニーズに柔軟に対応できる。Docker環境でも素早く構築可能なため、内部ツールやバックアップ用途として導入検討する価値がある。