199 lines
5.5 KiB
Markdown
199 lines
5.5 KiB
Markdown
# 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コンソール用ポート
|
||
|
||

|
||
|
||
---
|
||
|
||
### 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 | Linux(Ubuntu 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環境でも素早く構築可能なため、内部ツールやバックアップ用途として導入検討する価値がある。 |