Raspberry Pi + owncloud 個人雲端儲存空間


前言

你永遠不知道Raspberry pi這台單版電腦能做什麼,因為它能做的事情實在太多,實際上操作起來,才覺得這小東西的效能真的還不錯,此篇用於紀錄我使用Raspberry Pi 安裝owncloud 9.0.0,用於建置個人雲端儲存空間。

當然,若是想要比較省事又要更強大的功能,是可以考慮安裝NAS openmediavault 這個套件,一般NAS該有的功能都可以使用,更可以在擴充功能中安裝owncloud套件,openmediavault在官網有專為Raspberry Pi的iso檔可供安裝,非常方便,但要說什麼缺點,運作起來的效能算是差了一點,對於單版電腦來說,吃力了些。(不過不知到在pi3的表現如何就是了)

無論如何,為了效能,還有想保有原生系統的一些操作權,單純使用Raspberry pi + Raspbian Jessie + Owncloud 9,將儲存空間放置於外接硬碟中(如圖,在pi的下方放了一個2.5" 500G的隨身碟,架設自已使用的網路空間,方便在外部存取資料及分享大檔案資料。

準備元件

Raspberry Pi (建議 Ver. 2以上)
隨身碟 
(USB 2 or 3 不限,但要注意供電是否足夠推得動硬碟,通常硬碟外接獨立電源、pi使用USB輸電、不然就是硬碟接到帶電的USB Switch)
-----------------------------------------
OS:Raspbian Jessie
核心套件:mysql、php、nginx、php5fpm



前期作業

先將OS裝好,並更新最新的套件資訊
$sudo apt-get update

安裝 MySql

$sudo apt-get install mysql-server -y


安裝過程中,需要設定mysql root密碼

安裝完成後,建立owncloud所需之資料庫

首先,先登錄mysql

$mysql -u root -p

輸入密碼後,進入mysql控制介面,輸入下列指令
(記得更換相關資訊,我用一些顏色標記出來,方便修改,紅色是需要改的,綠色依需求更改)


CREATE DATABASE owncloud;

CREATE USER root@localhost IDENTIFIED BY 'password';

GRANT ALL PRIVILEGES ON owncloud.* TO root@localhost;

FLUSH PRIVILEGES;

exit
安裝PHP相關套件

$sudo apt-get install php5-mysql openssl ssl-cert php5-cli php5-common php5-cgi php-pear php-apc curl libapr1 libtool php5-curl libcurl4-openssl-dev php-xml-parser php5-dev php5-gd libmemcached* memcached php5-memcached -y
安裝nginx和php5-fpm 伺服器套件


$sudo apt-get install php5-fpm nginx -y

接下來就要試著安裝owncloud,但在這邊要先暫停一下,說明一下我有點不太正常的做法,在很多教學文件,會先將owncloud架設起來,然後再改/config/config.php中儲存位址的參數至外接硬碟中,此做法,在8之前的版本應該行得通,但在現行的版本9,會因為權限的問題顯得非常的難調整,個人改了好多次都因為應owncloud非原生(在同一個目錄下)資料夾,會變得無法存取。

試到最後,整個腦羞把owncloud連同主程式丟到隨身碟運作,結果還真的搞定了權限的問題,所以這邊紀錄當時的做法。

先去官網找合適的安裝版本
https://download.owncloud.org/download/repositories/stable/owncloud/

以Jessie版本來說,適合的對應版本為Debian 8.0

直接進入外接硬碟所掛載的目錄資料夾,以此例來說,是 /mnt/USB500G/

$cd /mnt/USB500G/
$wget http://download.owncloud.org/download/repositories/stable/Debian_8.0/owncloud_9.0.0.orig.tar.gz
 tar -xvf owncloud_9.0.0.orig.tar.gz
$sudo chown -R www-data:www-data /mnt/USB500G/
建立一組SSL評證給owncloud

$sudo openssl req -x509 -nodes -days 36500 -newkey rsa:2048 -keyout /etc/nginx/ssl/owncloud.key -out /etc/nginx/ssl/owncloud.crt
會需要輸入一些資訊(etc. 名字、所在地、公司名),多少寫一些,也可以留白,在common name,可輸入你所使用的DNS Address,如:mistest.ddns.net
若沒有自已的DNS Address,可去noip註冊一組,本文之後會教學如何設定NoIP對應家中非固定制ip位址.

接下來為owncloud建立所使用的nginx virtualhost

$sudo nano /etc/nginx/sites-available/owncloud
貼上下列資訊,並且修改server_name 為你的dns address或ip address
並且在root 後修改並輸入隨身硬碟位址 (ex./mnt/USB500G ),如下列綠色標記處

server {
  listen 80;
  server_name mistest.ddns.net 192.168.40.135;
  return 301 https://$server_name$request_uri;  # enforce https
}

server {
  listen 443 ssl;
  server_name mistest.ddns.net 192.168.40.135;
  access_log /var/log/nginx/sitename.access.log;
  error_log /var/log/nginx/sitename.error.log;

  ssl_certificate /etc/nginx/ssl/owncloud.crt;
  ssl_certificate_key /etc/nginx/ssl/owncloud.key;

  # Path to the root of your installation
  root /var/www;
  client_max_body_size 10G; # set max upload size
  fastcgi_buffers 64 4K;
 
# Some rewrite rules, more to come later
  rewrite ^/owncloud/caldav((/|$).*)$ /owncloud/remote.php/caldav$1 last;
  rewrite ^/owncloud/carddav((/|$).*)$ /owncloud/remote.php/carddav$1 last;
  rewrite ^/owncloud/webdav((/|$).*)$ /owncloud/remote.php/webdav$1 last;

  # Protecting sensitive files from the evil outside world
  location ~ ^/owncloud/(data|config|\.ht|db_structure.xml|README) {
           deny all;
  }
  # Configure the root location with proper rewrite rules
  location /owncloud/ {
           rewrite ^/owncloud/.well-known/host-meta /public.php?service=host-meta last;
           rewrite ^/owncloud/.well-known/host-meta.json /public.php?service=host-meta-json last;
           rewrite ^/owncloud/.well-known/carddav /remote.php/carddav/ redirect;
           rewrite ^/owncloud/.well-known/caldav /remote.php/caldav/ redirect;
           rewrite ^/owncloud/apps/calendar/caldav.php /remote.php/caldav/ last;
           rewrite ^/owncloud/apps/contacts/carddav.php /remote.php/carddav/ last;
           rewrite ^/owncloud/apps/([^/]*)/(.*\.(css|php))$ /index.php?app=$1&getfile=$2 last;
           rewrite ^(/owncloud/core/doc[^\/]+/)$ $1/index.html;
           try_files $uri $uri/ index.php;
 }
location ~ \.php(?:$|/) {
  fastcgi_split_path_info ^(.+\.php)(/.+)$;
  include fastcgi_params;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  fastcgi_param PATH_INFO $fastcgi_path_info;
  fastcgi_param HTTPS on;
  fastcgi_pass unix:/var/run/php5-fpm.sock;
 } 
 
# Optional: set long EXPIRES header on static assets
location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires 30d;
# Optional: Don't log access to assets
access_log off;
 }
}
編輯owncloud的config檔,將自已的ip位址或dns網址加到owncloud信任清單之中:

$sudo nano /mnt/USB500G/owncloud/config/config.php
$sudo nano /etc/php5/fpm/php.ini


啟動owncloud site 並關掉預設的nginx site

$sudo ln -s /etc/nginx/sites-available/owncloud /etc/nginx/sites-enabled/owncloud
$sudo unlink /etc/nginx/sites-enabled/default
若之後有想要使用web介面管理並上傳資料,記得要去改一下php的參數

$sudo nano /etc/php5/fpm/php.ini
有個設定值將字元編碼預設成utf-8 以防未來中文檔名出現亂碼
下列其他參數可依照自已需求更改。

default_charset = "UTF-8"
upload_max_filesize = 10G
post_max_size = 10G
upload_tmp_dir = /mnt/usbstorage/owncloud/tmp
max_input_time = 360000
#The maximum time in seconds a script is allowed to parse input data.
max_execution_time = 360000
memory_limit = 512M
extension=memcached.so
存檔後,重啟php 及nginx

$sudo service nginx restart
$sudo service php5-fpm restart
上述做完,owncloud就安裝得差不多了,接下來,使用瀏覽器開啟owncloud網頁
(請記得下列網址要使用https,並且在yourIPAddress(紅色字部份)更改成自已的ip位址或是dns網址。

https://yourIPAddress/owncloud


若出現"你正在從一個未信任的網域存取伺服器" (下列畫面),需要進入owncloud 的config檔,將自已的ip位址或dns網址加到owncloud信任清單之中:


一樣,下列紅字的部份改成自已儲存的位址

$sudo nano /mnt/USB500G/owncloud/config/config.php
修改trusted_domains 中的數值,下列是將有用到的dns位址及ip位址都加入(紅字部份)。

  'trusted_domains' =>
  array (
    0 => 'mistest.ddns.net',
    1 => '192.168.0.123',
  ),
之後,再重開一下網頁,應該可以看到下列畫面




先設定好管理的帳號密碼
記得查看一下Data Folder 參數是否是你設定在隨身碟中的位址

接下來設定上面所設定的mysql登入帳密及所使用的資料庫


按finish setup,接下來所有的安裝程序就完成了



====================================================

在台灣若沒有特別和isp簽固定ip的使用,通常配發的都是動態的ip位址,意即每一次連線上網的時後,有可能拿到ip都不盡相同,對於我們要在外面連回來存取資料,會顯得很不方便。

為解決這個問題,可以採用由noip所提出的解決方案,透過使用noip可將固定的domain name 和動態的ip位址,經由固定更新的方式對應在一起。

更好的是,noip是免費使用的

以下提供小小的教學:

首先,當然先到noip網站註冊一組帳密(註冊方式就不說明了)

下載 Dynamic DNS Update Client for Linux,可在noip的網站中找到

https://www.noip.com/download?page=linux

$cd /home/pi
$wget https://www.noip.com/client/linux/noip-duc-linux.tar.gz
 tar -z zxvf
$cd /usr/local/src
$sudo tar -zxvf /home/pi/noip-duc-linux.tar.gz
$cd noip-2.1.9-1
$sudo make
$sudo make install

其後輸入相關資訊

Please enter the login/email string for no-ip.com  kiki@gmail.com  #帳號
Please enter the password for user 'kiki@gmail.com' ***            #密碼
Only one host [vbirdtsai.no-ip.org] is registered to this account.
It will be used.
Please enter an update interval:[30]
Do you wish to run something at successful update?[N] (y/N) n
之後系統會產出設定檔,之後可直接執行noip

$sudo /usr/local/bin/noip2
如此,noip已經開始運作了,且每30分鐘和noip同步一次該ip的狀況,當然可以用noip2 -S確認目前noip運作狀況。

==================================

這樣子就完成了Raspberry Pi + Owncloud + 隨身碟,形成了一個自用的雲端空間,要存什麼都可以,別忘記官網上有於各種行種運算裝置所使用Owncloud App(需付費30元) 喔!

ps: 此文件供初步安裝,很多功能細數都還沒調整過,不過以經可以正常使用服務,若有什麼問題或指導,歡迎於下面留言討論 ^_^!


參考文章:
http://www.htpcguides.com/install-owncloud-8-x-raspberry-pi-for-personal-dropbox/
鳥哥
http://linux.vbird.org/linux_server/0270dynamic_dns.php

留言

這個網誌中的熱門文章

[專案] 不務正業的Python網路股市資訊爬蟲機器人 (Python、Slack)

[專案] 使用Google API 大量開帳號 (google API 、Python)