將阿里雲OSS掛載到Linux目錄——ossfs

使用背景

前段時間使用阿里雲oss,需要在前端編譯完成後,將編譯好的某些靜態資源文件上傳到oss(如js,圖片等),主要是爲了結合阿里雲CDN做緩存,增加頁面訪問速度。
這時需要在編譯完成後增加上傳oss的動作,之前一直使用ossutil來上傳。

ossutil工具有一些弊端,比如上傳文件時,他會挨個對比上傳的每一個文件和oss中已有的文件,遇到文件名相同的,它會對比文件的修改時間,如果這個同名文件的修改時間在oss上的文件修改時間之後,則上傳,否則不上傳。

當要需要同步的文件越來越多時,這個對比會耗時很長。比如有10萬個文件,實際上裏面只有幾個文件是新增的,這10萬個文件全部會對比一次,導致文件的同步時間相當慢。

由於前端編譯生成文件時,如果文件有改動時則會生成新的文件名(在原來的文件名上增加版本號),也就是說文件名相同的肯定都是舊文件不需要上傳到oss的,根本沒必要對比修改時間,可是ossutil沒有“文件名相同則忽略上傳”的功能。

使用ossfs則可以將oss直接掛載到本地目錄,操作oss就像操作本地目錄一樣,那麼我們可以用拷貝命令來忽略文件名相同的文件了,可以大量減少同步oss的時間。

cp -rn ~/build/static-file  ~/oss-file 
# -n 表示不要覆蓋已存在的文件  
# -r 表示遞歸拷貝  
# ~/build/static-file 爲前端編譯生成的文件目錄 
# ~/oss-file 爲oss的掛載目錄

使用說明

  1. 以下載CentOS 7.0 (x64)版本爲例:
wget http://gosspublic.alicdn.com/ossfs/ossfs_1.80.6_centos7.0_x86_64.rpm
  1. 安裝
    CentOS6.5及以上系統版本的安裝命令:
sudo yum localinstall your_ossfs_package
  1. 配置密碼文件
    指定bucket的名字,osskeyId和ossKeySecret
echo my-bucket:my-access-key-id:my-access-key-secret > /home/deploy/.ossfs-pwd
  1. 掛載
    ossfs [bucket名字] [本地目錄] <參數…>
ossfs my-bucket /opt/deploy/oss-file -ourl=oss-cn-xxx-internal.aliyuncs.com  -opasswd_file=/home/deploy/.ossfs-pwd -oallow_other -omp_umask=072

參數說明:參數以“-o”開頭,後面接“參數名=參數值”

  1. url:指定oss的endpoint,如果你是用的阿里雲的ECS,可以使用內網url,這樣在上傳和複製文件時比較快,而且內網不計流量費用。
  2. passwd_file:指定密碼文件
  3. allow_other:表示將掛載的目錄的所有權限都放開給所有的用戶和組(即777權限),沒有該參數則是700權限,只有執行這個掛載命令的當前用戶纔有操作權限該目錄。
  4. mp_umask:配合allow_other一起使用,allow_other默認給定777權限,mp_umask則可以取消某些權限,比如-omp_umask=072,則實際權限是705(即777-072=705),(Linux權限說明:4-可讀r ,2-可寫w ,1-可執行x ) 。

說明:
掛載之後就可以像操作本地文件一樣操作oss任意目錄和文件了。
掛載的根目錄(如上述示例中的/opt/deploy/oss-file)不能通過chmod修改權限,但是裏面的子目錄(即oss中的目錄)可以通過chmod來修改權限。

  1. 卸載
    fusermount -u /opt/deploy/oss-file

使用過程遇到的坑

  1. 掛在時報錯:ossfs: credentials file /home/deploy/.ossfs-pwd should not have group permissions
    不應有組權限。執行chmod修改權限即可。
chmod 600 /home/deploy/.ossfs-pwd  
  1. 上傳的文件Content-Type全是”application/octet-stream”
    這個導致瀏覽器訪問css等靜態文件時報錯,正確的類型應該是text/css。
    ossfs通過查詢/etc/mime.types中的內容來確定文件的Content-Type,請檢查這個文件是否存在,如果不存在,則需要添加:
    (1) 對於Ubuntu可以通過sudo apt-get install mime-support來添加。
    (2) 對於CentOS可以通過sudo yum install mailcap來添加。
    (3)也可以手動添加,每種格式一行,每行格式爲:application/javascript js。
vi /etc/mime.types

在這裏插入圖片描述

  1. 使用其他oss管理工具增加文件時,在掛載的目錄中看不到。
    因爲掛在文件通過本地緩存來保存文件的元信息,可以在掛在時加上如下參數(禁用緩存):
    -omax_stat_cache_size=0
    不過這樣每次進行ls等操作時會比較慢,因爲每次ls都需要請求oss服務器。

參考

  1. ossfs工具官方文檔
  2. 如何實現0770掛載權限
  3. ossfs常見問題





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章