讓ownCloud站在NAS的肩膀上!ownCloud使用者資料整合NFS的規劃 / How to Integrate NAS into ownCloud with NFS
本文描述如何在以OpenVZ虛擬機器架設的ownCloud 7.0.1中掛載NFS網路硬碟。文末也提供可掛載NFS的ownCloud 7.0.1版OpenVZ虛擬應用範本供大家下載安裝。
This article show you how to mount NFS in OpenVZ container's ownCloud 7.0.1. I also provided an OpenVZ virtual appliance template with ownCloud version 7.0.1 in this article.
為什麼要整合NAS? / Why ownCloud have to Integrate NAS?
我的ownCloud是以OpenVZ虛擬應用範本架設在Proxmox VE上。為了備份的方便,我傾向於每一臺虛擬機器都只保存應用程式本身,而使用者的資料──特別是像ownCloud這種會讓使用者上傳大量資料的情境,更應該要把虛擬機器跟使用者的資料分開備份。
在此考量下,Proxmox VE給每個虛擬機器的空間並不多,通常我只設8GB。而其他的資料則是透過NFS (Network File System)連線保存在NAS (Network Attached Storage)上,讓NAS的硬碟空間能夠有效利用。
ownCloud掛載NFS教學 / How to Mount NFS in ownCloud
ownCloud在第7版之後,因為調整了目錄權限檢查,所以讓NFS掛載變得很簡單。以下我以ownCloud 7.0.1的OpenVZ虛擬應用範本與FreeNAS提供的NFS為例,描述如何在ownCloud中掛載NFS網路硬碟。
本範例中,ownCloud虛擬機器資訊如下:
- onwCloud版本為7.0.1,細節請看「ownCloud終於可以上傳中文檔案!升級ownCloud版本到7.01」
- 虛擬機器的VMID為103
- ownCloud安裝在虛擬機器以下路徑:
/var/www/owncloud/
FreeNAS的資訊如下:
- IP是192.168.11.75
- 開放了NFS功能,細節請看「開啟FreeNAS的NFS功能」,開放目錄為
/mnt/dlll-cias-nas/owncloud
- 服務連線允許ownCloud虛擬機器連線
- 與ownCloud虛擬機器置於同一個網路中
Step 1. 啟用OpenVZ虛擬機器的NFS設定 / Enable Container’s NFS Configuration
為了讓ownCloud能夠掛載NFS,我們要先修改虛擬機器本身的設定。詳細做法請見「OpenVZ掛載NFS的虛擬機器設定」一文,以下摘錄重點。
- 把虛擬機器關機
- 進入節點的Shell
- 輸入指令: (紅字部分為VMID,請自行換成你虛擬機器的VMID)
# vzctl set 103 –features "nfs:on " --save; vzctl start 103
等待ownCloud虛擬機器開完機之後,再來到ownCloud虛擬機器裡面操作吧。
Step 2. 安裝NFS套件 / Install NFS Tools
以下動作都是在ownCloud本機上的操作。
Trunkey Linux的ownCloud預設並沒有安裝連線NFS所需要的工具,我們必須先用apt-get安裝nfs-common:
# apt-get install -y nfs-common
然後切換到ownCloud的目錄:
# cd /var/www/owncloud
以下操作都在ownCloud目錄底下進行。
Step 3. 存放使用者資料到NAS / Copy Users’ Data To NAS
※ 如果不需要備份使用者資料,這一步驟可以省略。
建立暫存用的資料夾:
# mkdir data.tmp
掛載NFS目錄到暫存資料夾:
# mount -t nfs 192.168.11.75:/mnt/dlll-cias-nas/owncloud /var/www/owncloud/data.tmp
複製data資料到暫存資料夾,表示將資料存到NAS中:
# cp data/* data.tmp
取消暫存資料夾的掛載,然後移除暫存資料夾:
# umount data.tmp; rm -rf data.tmp
接下來就要正式掛載到data資料夾上了。
Step 4. 掛載NFS目錄 / Mount NFS
用mount指令掛載NFS目錄到data上:
# mount -t nfs 192.168.11.75:/mnt/dlll-cias-nas/owncloud /var/www/owncloud/data
產生必要的檔案,並且設定權限:
# touch data/.ocdata
# chown -R www-data:www-data data
特別是產生.ocdata這個檔案。如果缺乏這個動作,ownCloud網頁就會顯示錯誤訊息:
Data directory (/var/www/owncloud/data) is invalid
Please check that the data directory contains a file ".ocdata" in its root.
然後開啟ownCloud網頁界面。如果沒有備份使用者資料的話,原本使用者上傳的資料就會消失,但ownCloud還是可以正常運作。
Step 5. 設定開機自動掛載NFS / Mount NFS When System Start
確認NFS可以正常掛載之後,接下來就是設定開機時自動掛載。
我們以nano編輯器修改開機設定檔案:/etc/rc.local
# nano /etc/rc.local
在exit 0之前加入剛剛的mount指令:
mount -t nfs 192.168.11.75:/mnt/dlll-cias-nas/owncloud /var/www/owncloud/data
存檔離開。
接著我們重新開機來測試是否有順利掛載:
# reboot
重新開機之後,以df指令檢查NFS是否順利掛載:
# df
你可以看到/var/www/owncloud/data已經掛載了NFS網路硬碟。
ownCloud 6備註:需要修改權限檢查功能 / ownCloud 6 Memo: How to Disable Permission Check
如果你是ownCloud第6版,那還要額外修改檢查目錄權限的程式。
由於掛載NFS時,掛載目錄的權限會直接開啟為777。在ownCloud 6當中會限制使用者資料夾data的權限只能為770,這與NFS掛載的限制相衝突。
解決這個衝突的做法是修改ownCloud的使用者目錄權限檢查程式util.php,程式碼的位置是:
/var/www/owncloud/lib/private/util.php
找到「public static function checkDataDirectoryPermissions($dataDirectory)」這一行,然後在「$errors = array();」之後加入「return $errors;」
這樣就能夠略過權限檢查,順利掛載NFS了。
在ownCloud 7中沒有這個問題,可以直接掛載。
ownCloud 7.0.1虛擬應用範本下載 / ownCloud 7.0.1 Virtual Appliance Download
為了方便大家使用,我把可以掛載NFS的ownCloud 7.0.1提供大家下載。這是與「ownCloud終於可以上傳中文檔案!升級ownCloud版本到7.01」一文相同的OpenVZ虛擬應用範本,請使用Proxmox VE來安裝,細節可以參考「Proxmox VE上傳虛擬應用範本」一文。
以下是管理資訊,預設密碼都是password:
- ownCloud的管理者為 admin ,密碼為 password 。
- Linux系統管理者為 root ,密碼為 password。
- MySQL帳號為 owncloud ,密碼為 password。
如果要掛載NFS的話,請修改 /etc/rc.local :
請把mount指令前的「#」移除掉,然後設定你NFS伺服器的IP位置與NFS目錄即可。
大家使用時有什麼問題,歡迎在下面留言處討論。
有人在問說同時兼顧Samba跟NFS上掛載的問題。
回覆刪除我後來才發現ownCloud內建了好用的外部儲存工具 (External Storage)
https://doc.owncloud.org/server/7.0/admin_manual/configuration/external_storage_configuration.html
可以掛載以下來源:
- 本地硬碟資料夾
- FTP或FTPS (FTP over SSL)
- SFTP
- SMB (網路上的芳鄰,CIFS)
- WebDAV
- Amazon S3
- Dropbox
- Google Drive
- OpenStack Swift
ownCloud可以設定給誰掛載、掛載的權限
掛載之後會在該帳號底下新增一個資料夾
由於這篇教學在掛載NFS上常常會遭遇權限設定的困難
此時不如採用外部儲存工具,說不定會比較簡單一點。
回覆刪除非常感謝 布丁 大 的技術支援~! 以下是小弟的原始提問,供各位網友參考~
= = = = = = = = = = = = = = = =
布丁 大您好,小弟Pogaso在拜讀您所發表的【讓ownCloud站在NAS的肩膀上!ownCloud使用者資料整合NFS的規劃 】後獲益良多、也順利地架好Owncloud了。但唯獨有個問題一直無法解決。
您所發表的Owncloud連結NAS的文章詳細的說明了Owncloud利用NFS連結NAS的辦法,但小弟我目前一直卡在無法處理權限問題,就是【經Owncloud上傳的檔案或建立的資料夾會自動變成755的權限】就算Google 國外文章也找過不少文章、方案都依然無法解決。小弟先說目前的使用需求及架構吧!
使用需求:
1. 在外可以經Owncloud用手機或WebUI來存取或同步特定資料。
2. 在區網內NAS作為主要資料庫、讓Windows經Samba來掛載為磁碟機,能快速存取及保留較多的Win應用支援。
架構:
NAS4Free 資料A >(經NFS服務)> Owncloud(Ubuntu Server) > WebUI、手機Client端
&
NAS4Free 資料A >(經Samba服務)> Windows 直接存取
權限:
1.資料A 所有權 www-data:www-data , 存取權 775
(已在 NAS4Free 建立 UID、GID 為 33 的 www-data 帳戶及群組 讓Owncloud有權限存取NAS的資料 (((本來NAS4Free上沒有 )
2.在NAS上建立一般User帳戶,並加入到www-data群組,用來作為Samba登入用。
3.設定 資料A 的目錄 umask 為002
問題點:
經Owncloud上傳的檔案或建立的資料夾會自動變成755的權限,但檢查後發現umask的設定依然是002,經samba上傳的資料一樣是775。唯獨檔案經Owncloud後會自動變成755。
嘗試過網路上的解決方案:
方式1: 另外建立一個群組"webmasters",並將www-data及samba 用戶加入其中,然後把 "資料A" 的所有權改為root:webmasters。權限設定再次設為775。
結果1: sabman的帳戶可以正常存取,換成Owncloud顯示資料唯獨、無法上傳或建立資料夾,需要將所有權root改回成www-data才能正常存取。推測是Owncloud有副程式在檢查主要所有權必須為www-data。
可能的解決點:
1. 強迫限制所有新建立資料權限為775。 (但已設umask,但依然無用??)
2. 修改Owncloud的原始碼。 (感覺是最有可能的辦法,用軟體搜尋關鍵字如 "chmod()"、"mkdir()"、" 755 " ... 但目前仍找不到有關新上傳的檔案權限設定的關鍵Code。
參考資料:
SFTP permission denied on files owned by www-data
小弟所學不多,當下有許多不足之處尤為見諒。待此叩請 布丁 大賜教。 感謝!!
作者已經移除這則留言。
刪除