Github標星19K+Star,10分鐘自建對象存儲服務!

  • 2020 年 1 月 20 日
  • 筆記

對象存儲服務可以用來存儲各類文件,mall項目中的圖片存儲採用的是OSS,今天我們來講下如何自己搭建一個對象存儲服務來存儲圖片。

MinIO簡介

MinIO 是一款基於Go語言的高性能對象存儲服務,在Github上已有19K+Star。它採用了Apache License v2.0開源協議,非常適合於存儲大容量非結構化的數據,例如圖片、視頻、日誌文件、備份數據和容器/虛擬機鏡像等。本文將使用 MinIO 來自建一個對象存儲服務用於存儲圖片。

安裝及部署

MinIO的安裝方式有很多,這裡我們使用它在Docker環境下的安裝方式。

  • 下載MinIO的Docker鏡像:
docker pull minio/minio  
  • 在Docker容器中運行MinIO,這裡我們將MiniIO的數據和配置文件夾掛在到宿主機上:
docker run -p 9090:9000 --name minio     -v /mydata/minio/data:/data     -v /mydata/minio/config:/root/.minio     -d minio/minio server /data  
  • 運行成功後,訪問該地址來登錄並使用MinIO,默認Access Key和Secret都是minioadmin:http://192.168.6.132:9090

上傳文件及使用

通過使用MinIO的網頁端即可完成文件的上傳下載功能,下面我們以圖片上傳下載為例來演示下該功能。

  • 在存儲文件之前,我們需要新建一個存儲桶:
  • 存儲桶創建完成後,通過上傳按鈕可以上傳文件,這裡我們上傳一張圖片:
  • 圖片上傳完成後,我們可以通過拷貝鏈接按鈕來獲取圖片訪問路徑,但是這只是個臨時的訪問路徑:
  • 要想獲取一個永久的訪問路徑,需要修改存儲桶的訪問策略,我們可以點擊存儲桶右上角的編輯策略按鈕來修改訪問策略;
  • 這裡有三種訪問策略可以選擇,一種只讀、一種只寫、一種可讀可寫,這裡我們選擇只讀即可,但是需要注意的是,訪問前綴需要設置為*.*,否則會無法訪問;
  • 設置完成後,我們只需要通過拷貝鏈接中的前一串路徑即可永久訪問該文件;
  • 訪問圖片效果展示:

MinIO客戶端的使用

雖然MinIO的網頁端管理已經很方便了,但是官網還是給我們提供了基於命令行的客戶端MinIO Client(簡稱mc),下面我們來講講它的使用方法。

常用命令

下面我們先來熟悉下mc的命令,這些命令和Linux中的命令有很多相似之處。

命令

作用

ls

列出文件和文件夾

mb

創建一個存儲桶或一個文件夾

cat

顯示文件和對象內容

pipe

將一個STDIN重定向

share

生成用於共享的URL

cp

拷貝文件和對象

mirror

給存儲桶和文件夾做鏡像

find

基於參數查找文件

diff

對兩個文件夾或者存儲桶比較差異

rm

刪除文件和對象

events

管理對象通知

watch

監聽文件和對象的事件

policy

管理訪問策略

session

為cp命令管理保存的會話

config

管理mc配置文件

update

檢查軟件更新

version

輸出版本信息

安裝及配置

由於MinIO服務端中並沒有自帶客戶端,所以我們需要安裝配置完客戶端後才能使用,這裡以Docker環境下的安裝為例。

  • 下載MinIO Client 的Docker鏡像:
docker pull minio/mc  
  • 在Docker容器中運行mc:
docker run -it --entrypoint=/bin/sh minio/mc  
  • 運行完成後我們需要進行配置,將我們自己的MinIO服務配置到客戶端上去,配置的格式如下:
mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> <API-SIGNATURE>  
  • 對於我們的MinIO服務可以這樣配置:
mc config host add minio http://192.168.6.132:9090 minioadmin minioadmin S3v4  

常用操作

  • 查看存儲桶和查看存儲桶中存在的文件:
# 查看存儲桶  mc ls minio  # 查看存儲桶中存在的文件  mc ls minio/blog  
  • 創建一個名為test的存儲桶:
mc mb minio/test  
  • 共享avatar.png文件的下載路徑:
mc share download minio/blog/avatar.png  
  • 查找blog存儲桶中的png文件:
mc find minio/blog --name "*.png"  
  • 設置test存儲桶的訪問權限為只讀
# 目前可以設置這四種權限:none, download, upload, public  mc policy set download minio/test/  # 查看存儲桶當前權限  mc policy list minio/test/  

參考資料

詳細了解MinIO可以參考官方文檔:https://docs.min.io/cn/minio-quickstart-guide.html