MINIO對象存儲服務(wù)
說多了都是扯淡,簡單得一P,貼個官方中文文檔
http://docs.minio.org.cn/docs/
docker啟動
# 拉鏡像
docker pull minio/minio
# 啟動
docker run -d -p 9000:9000 --name minio1 -v /mnt/data:/data -v /mnt/config:/root/.minio minio/minio server /
## 官方的啟動是前臺,且容器消失之后存儲的數(shù)據(jù)也就沒了,簡單解釋下。
-d: 后臺啟動
-v: docker卷操作,/data是minio的對象存儲目錄,把宿主機的的/mnt/data掛載到容器的/data,這樣保證容器丟失數(shù)據(jù)也不會丟失。
分布式: minio分布式,數(shù)據(jù)恢復(fù),多磁盤就是一個命令的事,看文檔吧。
啟動后地址:http://ip:port/9000,初始用戶都是minioadmin/minioadmin,如果你按照官方的啟動方式,前臺啟動的話就會看到這個信息,如果你是像我一樣后臺啟動的,就去看容器日志吧.
路徑:宿主機 /var/lib/docker/containers/容器id/xxx.log
AWS S3
解釋一下Minio支持AWS S3是什么意思吧。畢竟一開始也差點懵逼了。
AWS S3 就是亞馬遜Simple Storage Service,
提供標(biāo)準(zhǔn)的對象存儲服務(wù)API接口,說白了就是一個規(guī)范,定義了API接口。
Minio支持AWS S3說的就是這個minio的客戶端MinioClient支持對AWS S3服務(wù)的接口規(guī)范,
你可以使用這個MinioClient來操作實現(xiàn)AWS S3的對象存儲服務(wù)器。
再通俗點講: 開發(fā)人員開發(fā)了mysql數(shù)據(jù)庫,他需要提供一個mysql的驅(qū)動。
現(xiàn)在AWS S3服務(wù)出來了,他也需要一個驅(qū)動,現(xiàn)在MinioClient就可以當(dāng)做是他的驅(qū)動。
MC
mc 就是一個minio的客戶端,用來查看mino的桶,對象等信息的工具。
拿官方的話講就是:
MinIO Client (mc)為ls,cat,cp,mirror,diff,find等UNIX命令提供了一種替代方案。它支持文件系統(tǒng)和兼容Amazon S3的云存儲服務(wù)(AWS Signature v2和v4)。
上面這個v2和v4是等哈要用哦。來都來了還是隨便說一下啊意思一下吧。
這個玩意兒就不用去搞啥容器了。Linux版直接下個mc的工具就行(文檔也有,官方的)。
http://dl.minio.org.cn/client/mc/release/linux-amd64/mc
chmod +x mc
好了,你就可以用了。
先添加一個存儲庫
# 先添加一個存儲庫
mc config host add <ALIAS> <YOUR-S3-ENDPOINT> <YOUR-ACCESS-KEY> <YOUR-SECRET-KEY> [--api API-SIGNATURE]
# eg, s3v4,v4就是上面那個AWS Signature
mc config host add minio http://192.168.2.16 minioadmin minioadmin --api s3v4
配置之后就可以操作了。比如mc ls play,列出所有的的存儲桶。剩下的--help吧,我也沒操作過。
雖然有--help,還是貼個操作指令占占空間,嘻嘻。
ls 列出文件和文件夾。
mb 創(chuàng)建一個存儲桶或一個文件夾。
cat 顯示文件和對象內(nèi)容。
pipe 將一個STDIN重定向到一個對象或者文件或者STDOUT。
share 生成用于共享的URL。
cp 拷貝文件和對象。
mirror 給存儲桶和文件夾做鏡像。
find 基于參數(shù)查找文件。
diff 對兩個文件夾或者存儲桶比較差異。
rm 刪除文件和對象。
events 管理對象通知。
watch 監(jiān)視文件和對象的事件。
policy 管理訪問策略。
config 管理mc配置文件。
update 檢查軟件更新。
version 輸出版本信息。
實際上如果用不到那么細(xì),直接打開界面就看得到所有了,直接在頁面上操作他不香嗎?它香得一P。

服務(wù)搭建起來了就ok了,什么上傳啊,下載啊啥的就那幾個api,自己玩兒吧,官方也有demo,我就直接頁面上操作上傳啥的了。
圖片訪問
文件上傳了,咋訪問呢?
假如這是一個圖片服務(wù)器,那我們再上傳之后,需要一個能直接訪問的url連接,頁面上才能直接展示噻。
minio文件上傳之后,由于我們掛載了容器卷,文件直接就在宿主機上。來嘛,給你看一下。
桶目錄:
/mnt/data
|-mybucket
|-newbucket
## 桶下面就直接是文件

文件都找打了,直接搭建一個NG作為靜態(tài)服務(wù)器它不香嗎(minio支持壓縮,壓縮的這種不算哈)?
minio自生的訪問方式,可以在頁面上點擊對應(yīng)文件后面的三個點點分享,但是分享最多有效期只有7天。
直接通過minio訪問方式如下,這個涉及到桶的存儲策略。
http://ip:port/<bucketName>/<objectName>訪問。
http://ip:port/mybucket/121.jpg
存儲桶策略BucketPolicy
這個BucketPolicy是個什么玩意兒?我不曉得有沒有人跟我一樣,從最開始的懵逼到知道后覺得傻逼。記錄一下吧,萬一有小伙伴跟我一樣呢。來吧,我直接操作完你就曉得了。
創(chuàng)建bucket并指定policy
創(chuàng)建并指定桶mybucket的策略為*/Read_Only

創(chuàng)建并指定桶newbucket的策略為12*/Read_Only

好了,現(xiàn)在我們上傳幾個文件到這兩個桶里面。
mybucket下121.jpg

newbucket下121.jpg,131.jpg

好的,準(zhǔn)備工作結(jié)束了,我們來捋一下我們都做了些啥。
| 桶 | BokcetPolicy | 文件 |
|---|---|---|
| mybucket | * / Read_Only | 121.jpg |
| newbucket | 12* / Read_Only | 121.jpg, 131.jpg |
好了,現(xiàn)在打開新的瀏覽器,或者無痕窗口,保證你的minio是未登錄狀態(tài)。
現(xiàn)在依次打開連接查看三個文件。
http://192.168.2.16:9000/mybucket/121.jpg 能打開
http://192.168.2.16:9000/newbucket/121.jpg 能打開
http://192.168.2.16:9000/newbucket/131.jpg 不能打開,需要登錄
這下知道存儲桶的策略了噻。
總結(jié)
bucketPolicy
作用于當(dāng)前bucket上,對當(dāng)前bucket內(nèi)的所有對象有效,實際上就是配置了當(dāng)前桶內(nèi)的對象的訪問策略。
配置為*表示對所有對象有效,占位符,懂得都懂,不解釋了。
newbucket配置了12*為只讀,表示當(dāng)前桶下只有12開頭的對象是可以匿名訪問的
,即直接訪問http://ip:port/newbucket/121.jpg是可以顯示的,
但是無法直接顯示http://ip:port/newbucket/131.jpg
好了,其他的就自己玩兒了吧,官方有很多demo,API啥的代碼我就不寫了。