你也可以有自己的 Dropbox — ownCloud

很久沒寫 blog 了, 手指打字也僵化了不少, 如果下面文句有什麼不通順的地方還請多多包涵~

最近幾年 Dropbox 一類的免費服務開始流行起來了, 我想從各個 smartphone 討論區裏看到固定會有一波又一波的 “Dropbox 互助區” 討論串, 就知道有多少人愛用這種雲端的儲存服務. 但也因為免費的空間有限, 大家就無所不用其極地想得到更多免費的空間. 學生的話也許可以有很多時間自己開一堆 email 及 mac address 來衝回饋獎勵; 但是討生活的上班族大概就沒那麼多力氣搞這種把戲了, 於是付費加大空間似乎就變成是唯一的選項. 不過對我們這種技術阿宅而言, 永遠有第三個選項: 自己架一個. 只是這個選項成立的條件, 必須等待所謂的 open source 出現, 以及必須擁有對應的技術知識.

在市場上其實有很多類似 Dropbox 的服務, 例如微軟的 SkyDrive, Google 的雲端硬碟, CX.com 等等, 但說穿了你為什麼需要這麼多的服務呢? 不外乎就是因為免費空間有限, 不想花錢申請加大, 只好 <分散> 放置於這些服務…想想也是很不方便. 所以呢, 如果你真的有能力架個網站, 包括管理 Linux, httpd, mysql, 手上又有足夠的頻寬及硬碟等資源, 其實是可以依靠自己架設自用的雲端儲存服務. 這次我們就來簡單介紹 ownCloud, 一套 open source 的雲端儲存套件.

ownCloud

ownCloud 5.0 Screenshot

(圖片源自官網首頁, 這代表我沒騙你, 真的有這種 open source 耶 XD)

因為 ownCloud 是一套用 php 撰寫的服務, 所以前提是你應該

1. 對 Linux 熟悉
2. 對 httpd 設定熟悉
3. 對 php 套件的架設熟悉
4. 對 mysql 的管理略懂

本文將就針對 CentOS 6.3 如何進行 ownCloud 4.5 的架設說一次簡單的說明…真的很簡單, 因為現在年紀漸漸大了, 非常不喜歡把事情搞複雜, 安裝步驟愈無腦愈好, 愈沒有艱澀的技術介入愈好…

CentOS 6.3 的安裝

如果你已經架好一台 CentOS 6 了的話, 那我就不多廢言了 XD
不過如果你還沒學會怎麼灌 Linux 我想也不必再往下看了 XDD
所以簡單來講就是我決定跳過這個章節 XDDD

ownCloud 4.5 的安裝

你不必真的拿 ownCloud 網站上的 tar.gz 套件來裝, 那太費工了. 最快的方法就是照 ownCloud 官網這一頁的方式, 利用 yum repo 來安裝在你的系統上, 就會直接把其他所需的 rpm 套件一併安裝進來. 有沒有簡單過頭了? 我就說過我不喜歡複雜嘛, 幹嘛記一堆需要先安裝什麼 rpm 檔再來安裝 ownCloud? 就算你一開始根本沒裝 httpd 及 php 這下也就全都裝進去了, 桌頂拈柑, 輕輕鬆鬆~

對了, 至於 /etc/php.ini 你最好還要照一些其他人寫的安裝指南來修改, 例如把 php post & upload 允許值加大, 這兩個值也等於決定了你能上傳最大多大的檔案到你自己架的 ownCloud 服務裏. 當然, 你也可以用下面介紹的 [httpd 的設定] 相同的方法, 把這些本來放 php.ini 裏修改的設定值, 改在 virtual host 裏利用 php_admin_flag 或 php_flag 來做客製化宣告, 也可以. 關於大檔案的說明, 可參考 ownCloud 官網的說明

2013/04/12 補充:

其實, 如果你是 RHEL/CentOS 的使用者, 只要再加 epel 套件庫, 裏面就會有 owncloud 4.5 版可用. 但是它的相依性設定有點小問題, 如果你要用 mysql 當資料庫, 就要順便再加裝 php-pear-MDB2-Driver-mysql 這個套件才能讓 ownCloud (@epel) 正常運作.

目前我個人比較推薦使用 epel 裏的 ownCloud 4.5, 而不建議使用官方 isv:ownCloud:community.repo 來安裝 ownCloud (會變成 5.0 版), 說真的 5.0.x 真的是太多 bug 了! 自從 5.0 出來後, 一直都有災情傳出來. 以這兩天剛推出的 5.0.4 為例, 一升級馬上你的 ownCloud 就GG了, 永久進入維護模式. 雖然 5.0 版多了不少新功能, 我還是別冒險當白老鼠… 4.5 則是相對穩定很多的舊版本, 也許等等 5.1 出來再觀望大家口碑… 不過 epel 的 ownCloud 程式是放在 /usr/share/owncloud 下, 資料是放在 /var/lib/owncloud 下, 這和 isv:ownCloud:community 的放法不同. 以下的例子是我早先用 isv 時的路徑, 如果是用 epel 者請配合修改路徑…

httpd 的設定

在安裝完 ownCloud 後, 你可以在 /etc/httpd/conf.d/ 下看到一個 owncloud.conf 檔, 也會發現 /var/www/html/owncloud 下多了一堆 php 程式. 不過光這樣的話也太陽春了點, 我個人比較喜歡讓各服務擁有自己的 virtual host, 所以我在 /etc/httpd/conf.d/ 下新增了一個檔案來宣告 owncloud 自有的 virtual host:

<Directory /var/www/html/owncloud>
Options -Indexes
</Directory>

<VirtualHost *:80>
ServerName mybox.fruittea.net
DocumentRoot /var/www/html/owncloud
TransferLog /var/log/httpd/owncloud_access_log
ErrorLog /var/log/httpd/error_log
php_admin_flag output_buffering off
</VirtualHost>

加紅字的地方是官網沒特別提到的重點, 來我這兒總是會多學到一點 XD.

第一是 httpd 預設是有 auto index 的功能, 如果你不想使用者 (或不明人仕) 亂逛你網站的目錄下有什麼檔, 把 Indexes 從 Options 中拿掉是最常用的設法. (按: epel 版的在 owncloud.conf 中已經加了這行, 所以可以省略)

第二是當你在用 sync client 下載 ownCloud 的檔案時, 如果沒有把 php output_buffering 完全關掉, 則太大的檔案會吃光你 php memory limit 上限, 造成 php 記憶體不足就跑出 http 500 error 了, 最終你不是得把 php memory limit 加大到你單一檔案大小的限制, 不然就是索性像我一樣把 output_buffering 關掉, 因為我設 upload_max_filesize = 4G 所以一但我上傳過這麼大的檔案, 在下載時真的會吃光我所有的系統記憶體.
最後要提醒的是如果你想加 SSL 的服務, 那就要再安裝 mod_ssl 套件, 但這不在 ownCloud 套件的相依性必需清單內, 所以要再手動安裝進來, 然後你還需要自己產生一個憑證, 或是真的花錢去買一個.

mysql 的設定

這部份倒是不一定要做. 如果你只是自己夠宅或是想給家人用 ownCloud, 我想用 SQLite 就很夠了, 省點力氣管一大套 database 系統. 但如果可能會有很多使用者的話, 那麼用 mysql 或 postgresql 會比較好. 至於 mysql 設定倒也沒什麼特別的, 調校方面可以找找 tuning-primer.sh 這個工具協助; 對於 ownCloud 而言, 你只要先建好一個 ownCloud 專用的 database, 一個 ownCloud 專用的帳號密碼, 於 ownCloud 第一次執行時選用 (打開 advanced 選項) mysql 並指定好 dbname/dbhost/user/password 等設定, 讓 ownCloud 自己去產生 table 及資料就好啦! 有沒有很簡單? 我說的沒錯吧!

Linux 系統其他設置; 總結

哦, 以上雖然一直強調特別簡單好架, 你也別忘了用 chkconfig 將 httpd 及 mysqld 納入開機時自動啟動的服務. 對了, 最好你也把 ntpd 跑起來, 以提供系統服務最正確的參考時間.

我想, ownCloud 除了 clientsync 這個桌面端工具在即時性方面大遜於 Dropbox 的之外 (其實比起 CX.com 或 Box 已經是強太多了), 大致上已經能滿足各位 Dropbox 愛用者的需求了, 真的. 只要你家用的是光世代, 上傳 10M 以上, 又有固定 IP, 架一套 ownCloud 來玩玩絕對不會吃虧的… 阿宅們還可以好心發帳號給你想追的正妹, 教她用, 很快地你就可以開始蒐集她上傳的檔案了(大誤)… 開玩笑的, 接下來 ownCloud 5 版就會正式提供加密功能了, 使用者會更有信心使用它啦… 你想想你真的放心什麼狗屁倒灶的私人檔案都放上雲端存放嗎? 還是不覺得這有什麼風險? 嘿嘿, 這我就不在此討論了…

祝各位架站愉快~

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *