【初学者专用】从零开始!在树莓派上搭建自家Cloud服务的ownCloud
首先
「Dropbox 的储存空间快不够了」
「但是付费计划后能否熟练使用呢…」
“――你有没有想过这样的事情?”
我想向那些人推荐的是ownCloud。
ownCloud是一种开源软件,可以在专用服务器上构建类似于Dropbox的在线存储服务,通过使用它,您可以在家中等地建立免费且容量无限制的在线存储服务。
我們這次打算在樹莓派上建立 ownCloud,並從頭到尾介紹實現的步驟。
为何选择树莓派?
树莓派是一款由英国开发的使用ARM处理器的单板计算机。虽然性能相对较弱,但其最大优势是价格低廉和低功耗,我认为这对于构建和运营在线存储服务非常具有吸引力。
如果我们考虑实际维护费用,本次系统构建所用的Raspberry Pi B+和外置便携式HDD(HD-PE320U2)的总功耗仅为5.5瓦特。假设平均功耗为3瓦特,电费为每千瓦时22日元的情况下,每月的电费约为50日元。考虑到Dropbox每月的付费计划为1,200日元(截至2014年11月15日),可以说成本大幅降低。
所以,我打算以此为动力,慢慢开始进行步骤。
计划的目的
-
- Raspberry Pi B+(以下,ラズパイ)
B でも可
microSD カード
4GB 以上推奨
外付け HDD(USB タイプ)
データ保存用
ポータブル HDD がおすすめ(低消費電力&静音性)
micro USB 電源
外付け HDD がバスパワー方式なら出力が 2.0A くらいのやつ
外付け HDD がセルフパワー方式なら出力が 0.6A 以上(ラズパイ B の場合は 0.7A 以上)
LAN ケーブル
Windows PC
今回は作業 PC として Windows を想定
もちろん Mac や Linux でも同様の手順でできます
初期設定用インターフェイス(なくても可.全操作を SSH ですれば OK)
USB キーボード
HDMI ケーブル
HDMI 対応ディスプレイ
1. 安装和设置Raspbian
首先,将操作系统安装到树莓派上并启动。
-
- 你可以从http://www.raspberrypi.org/downloads/下载RASPBIAN – Debian Wheezy(截至2014年11月15日最新版本为2014-09-09)。
-
- 解压下载的.img文件,并使用Win32DiskImager等软件将其写入准备好的microSD卡(完成后务必执行“安全删除硬件”操作才能取出卡)。
-
- 将microSD卡、LAN电缆、外接硬盘、USB键盘和HDMI电缆插入树莓派,最后插入电源线。
- 树莓派将启动(要重新启动请执行命令行中的’$ sudo reboot’,要关机请执行’$ sudo halt’,然后再拔掉电源线)。
下面是设置Raspbian的下一步。
– 起始设置
当树莓派启动并等待一段时间后,将会显示初始设置界面,按如下方式进行设置。
SD カードの全ての領域を利用可能にする
“Expand Filesystem”
“Ok”
デフォルトユーザ(ユーザ名 pi)のパスワードを変える
“Change User Password”
“Ok”
(新しいパスワードを 2 回入力)
“Ok”
タイムゾーンを東京に設定する
“Internationalisation Options”
“Change Timezone”
“Asia”
“Tokyo”
キーボードレイアウトを変更する(ここでは日本語 105 キータイプを想定)
“Internationalisation Options”
“Change Keyboard Layout”
“Generic 105-key (Intel) PC”
“Other”
“Japanese”
“Japanese”
“The default for the keyboard layout”
“No compose key”
“No”
高速化のためオーバークロックする
“Overclock”
“Ok”
“Turbo 1000MHz”
“Ok”
グラフィックに使用するメモリを最小にする
“Advanced Options” を選択
“Memory Split” を選択
“16”に設定
请按下Tab键,然后选择”Finish”→”Yes”以重新启动并应用设置。
启动后,请使用用户名pi登录。另外,我建议您首先使用以下命令设置root密码。
pi@raspberrypi ~ $ sudo passwd
(設定したいパスワードを 2 回入力)
将树莓派的 USB 供电能力设置为1.2A(仅限总线供电硬盘)
如果使用总线供电的硬盘驱动器,可能会出现默认电流(0.6A)不足的情况(实际上,我使用的HD-PE320U2发出了电流不足的蜂鸣声)。因此,我们可以通过编辑config.txt来最大限度地提高树莓派的供电能力。
pi@raspberrypi ~ $ sudo nano /boot/config.txt
当您启动nano(文本编辑器)后,请添加以下行。
safe_mode_gpio=4
如果您能够进行设置,请按 Ctrl-O → Enter 进行覆盖保存,然后按 Ctrl-X 退出nano编辑器。重新启动后,设置将生效,并且即使使用总线供电的HDD,也能正常使用。
如果您能够进行设定,请按下Ctrl-O接着按Enter键进行覆写保存,然后按下Ctrl-X结束nano的使用。重新启动后,即可应用此设定,即使使用公交电源的HDD也能正常驱动。
– 设置固定IP地址
如果服务器的IP地址频繁变动,将会很麻烦,因此我们会更改网络接口的设置,为树莓派提供一个静态IP地址。
pi@raspberrypi ~ $ sudo nano /etc/network/interfaces
我将下面的部分改写为以下内容。
iface eth0 inet dhcp
↓
iface eth0 inet static
address [設定したい固定 IP アドレス(他の機器と被らないようにする)]
netmask [サブネットマスク]
gateway [デフォルトゲートウェイの IP アドレス]
サブネットマスクとデフォルトゲートウェイの IP アドレスは作業 PC のコマンドプロンプトで $ ipconfig を実行する等すれば知ることができます.具体的にはこんな感じに設定します(例).
iface eth0 inet static
address 192.168.1.22
netmask 255.255.255.0
gateway 192.168.1.1
ファイルを上書き保存すれば Raspbian の設定は終わりです.ラズパイをシャットダウンしてキーボードと HDMI ケーブルは取り外してもらって構いません.以降は作業 PC から SSH でラズパイを操作していきたいと思います.
– SSH客户端的配置
Tera Term 等の SSH クライアントを用いてラズパイと作業 PC を接続します.
ラズパイの電源を入れた状態で,ホストには先程設定した ラズパイの IP アドレス(ex. 192.168.1.xx),TCP ポート番号には 22 を設定し,ユーザ名 pi でログインしてください.
2. 必要パッケージのインストール
ownCloud の構築に必要なパッケージをインストールします.まずは apt のインデックスリストとインストール済みパッケージを最新にします.
pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get upgrade
必要パッケージをインストールします.
pi@raspberrypi ~ $ sudo apt-get install nginx openssl ssl-cert php5-cli php5-sqlite php5-gd php5-common php5-cgi sqlite3 php-pear php-apc curl libapr1 libtool curl libcurl4-openssl-dev php-xml-parser php5 php5-dev php5-gd php5-fpm memcached php5-memcache php5-curl varnish
3. 無料 DDNS サービスへの登録
自宅でサーバを公開するには外部に公開する IP アドレス(プロバイダから支給)が必要ですが,このアドレスは一般的にころころと変わってしまいます.そこで適当なホスト名を発行し,このホスト名と外向き IP アドレスを動的に結びつける(DDNS)ことでサーバへのアクセスを簡便化したいと思います.
■ 注册ieServer.Net
因为节省金钱是我的动力,所以我会使用这里提供的免费(捐赠制)的 ieServer.Net DDNS 服务。
登録は超カンタン.「新規ユーザー登録」ページにて規約に同意し(通常接続の方をクリック), ユーザ名,ドメイン,メールアドレス,パスワード を指定して「登録」をクリックするだけです(ホスト名は ユーザ名.ドメイン となる).登録の反映には時間がかかる場合がありますので他の作業をしておくといいかもしれません.
将 IP 地址更新脚本注册到 cron。
请确认外向IP地址是否已更改,如果有更改,则每隔一定时间自动执行脚本重新关联主机名。请将以下ieServer.Net专用脚本(ddns-update.pl,稍作修改)保存在/usr/local/ddns/目录中。需要注意的是,您需要根据您在ieServer.Net注册的用户名、域名和密码来修改脚本中的相关内容。
#!/usr/bin/perl
$CURRENT_IP_FILE = "/var/log/ieserver/current_ip";
$LOG_FILE = "/var/log/ieserver/ip_update.log";
$REMOTE_ADDR_CHK = "http://ieserver.net/ipcheck.shtml";
$DDNS_UPDATE = "http://ieserver.net/cgi-bin/dip.cgi";
$ACCOUNT = "ユーザ名";
$DOMAIN = "ドメイン";
$PASSWORD = "パスワード";
if(!open(FILE,"$CURRENT_IP_FILE")) {
$CURRENT_IP = '0.0.0.0';
} else {
$CURRENT_IP = <FILE>;
close FILE;
}
$NEW_IP = '0.0.0.0';
$NEW_IP = `wget -q -O - $REMOTE_ADDR_CHK`;
if ($NEW_IP ne "0.0.0.0" and $CURRENT_IP ne $NEW_IP) {
$STATUS = `wget -q -O - '$DDNS_UPDATE?username=$ACCOUNT&domain=$DOMAIN&password=$PASSWORD&updatehost=1'`;
if ($STATUS =~ m/$NEW_IP/) {
open (FILE ,">$CURRENT_IP_FILE");
print FILE $NEW_IP;
close FILE;
$TIME = localtime;
open (FILE ,">>$LOG_FILE");
print FILE "$TIME $ACCOUNT.$DOMAIN Updated $CURRENT_IP to $NEW_IP\n";
close FILE;
} else {
$TIME = localtime;
open (FILE ,">>$LOG_FILE");
print FILE "$TIME $ACCOUNT.$DOMAIN Update aborted $CURRENT_IP to $NEW_IP\n";
close FILE;
}
}
exit;
一応手順を書いておきます.スクリプト保存先のディレクトリを作成し,スクリプトファイルをそこに作成します.ログファイルの保存先ディレクトリもここで作成しておいてください.
pi@raspberrypi ~ $ sudo mkdir /usr/local/ddns
pi@raspberrypi ~ $ sudo mkdir /var/log/ieserver
pi@raspberrypi ~ $ sudo nano /usr/local/ddns/ddns-update.pl
上記スクリプトのコピペがうまくいかない場合,作業 PC で ddns-update.pl を作成しラズパイに転送する手段もあります.FileZilla 等の FTP クライアントソフトを用いて pi のホームに ddns-update.pl を転送してから ‘$ sudo mv ddns-update.pl /usr/local/ddns/’ で上記ディレクトリに移動させる,といった感じです.この際,FTP ソフトの設定は次のようにすればよいです.
-
- ホスト名:ラズパイのローカル IP アドレス
-
- ポート:空欄
-
- プロトコル:SFTP
-
- ユーザ:pi
- パスワード:[pi のパスワード]
我打算更改 ddns-update.pl 的权限,以便可以执行。
pi@raspberrypi ~ $ sudo chmod 755 /usr/local/ddns/ddns-update.pl
続いて cron の設定です.cron とは指定した時間に指定したスクリプト等を自動的に実行してくれるデーモンプロセスのことです.こいつを使って ddns-update.pl を 10 分おきに実行させたいと思います.
pi@raspberrypi ~ $ sudo crontab -e
上記コマンドを実行したら nano が起動するので以下の行をファイルに書き足します.
*/10 * * * * /usr/local/ddns/ddns-update.pl
DDNS的设置已经全部完成。
4. 服务器配置
■ 创建用户以供ownCloud使用者使用
pi@raspberrypi ~ $ sudo groupadd www-data
pi@raspberrypi ~ $ sudo usermod -a -G www-data www-data
创建一个有效期为5年的SSL服务器证书。
pi@raspberrypi ~ $ sudo openssl req $@ -new -x509 -days 1825 -nodes -out /etc/nginx/cert.pem -keyout /etc/nginx/cert.key
pi@raspberrypi ~ $ sudo chmod 600 /etc/nginx/cert.pem
pi@raspberrypi ~ $ sudo chmod 600 /etc/nginx/cert.key
创建SSL服务器证书需要输入身份信息,但是由于我构建的服务器完全是用于自己使用的,所以认为输入随意的信息是可以的(以下是示例)。
-
- Country Name : JP
-
- State or Province Name : Tokyo
-
- Locality Name : .
-
- Organization Name : .
-
- Organization Unit Name : .
-
- Common Name : user.domain.jp(ieServer.Net で登録したホスト名)
- Email Address : .
■ Ngnix(Web サーバ) の設定
設定ファイルの編集は次のコマンドで行います.
pi@raspberrypi ~ $ sudo nano /etc/nginx/sites-available/default
このファイルの中身を全て以下の記述に置き換えてください([ieServer.Net で取得したホスト名] は自分が登録したものに変更してください).
upstream php-handler {
server 127.0.0.1:9000;
#server unix:/var/run/php5-fpm.sock;
}
server {
listen 80;
server_name [ieServer.Net で取得したホスト名];
return 301 https://$server_name$request_uri; # enforce https
}
server {
listen 443 ssl;
server_name [ieServer.Net で取得したホスト名];
ssl_certificate /etc/nginx/cert.pem;
ssl_certificate_key /etc/nginx/cert.key;
# Path to the root of your installation
root /var/www/owncloud;
client_max_body_size 1000M; # set max upload size
fastcgi_buffers 64 4K;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 360;
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
index index.php;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README) {
deny all;
}
location / {
# The following 2 rules are only needed with webfinger
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
rewrite ^(/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 php-handler;
}
# 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;
}
}
■ 设置文件大小的上限
全部で 3 個のファイルを編集します.
– 1 個目
pi@raspberrypi ~ $ sudo nano /etc/php5/fpm/php.ini
以下の 2 つのパラメータ値を変更(ctrl-w で検索可能)してください.
upload_max_filesize = 1000M
post_max_size = 1000M
– 第二个
pi@raspberrypi ~ $ sudo nano /etc/php5/fpm/pool.d/www.conf
次の行を下の様に変更してください.
listen = /var/run/php5-fpm.sock
↓
listen = 127.0.0.1:9000
– 第三个
pi@raspberrypi ~ $ sudo nano /etc/dphys-swapfile
请将下一行更改如下。
CONF_SWAPSIZE=100
↓
CONF_SWAPSIZE=512
■ 最后重新启动 PHP 和 Nginx 以应用配置更改。
pi@raspberrypi ~ $ sudo /etc/init.d/php5-fpm restart
pi@raspberrypi ~ $ sudo /etc/init.d/nginx restart
5. ポート解放
ポートの解放方法はルータによってまちまちなのでここでは割愛します.
外部からの TCP ポート 80 番および 443 番へのアクセスを ラズパイの ローカル IP アドレスにマッピングしてください(ポート番号の変換は不要です).
6. 外接硬盘的配置
■ パーティションのフォーマット
まずは外付け HDD のパーティションがどうなっているのか確認します.
pi@raspberrypi ~ $ sudo fdisk -l
例えば私の場合はこんな感じの出力が得られました.
Disk /dev/mmcblk0: 31.7 GB, 31657558016 bytes
4 heads, 16 sectors/track, 966112 cylinders, total 61831168 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: xxxxxxxxxx
Device Boot Start End Blocks Id System
/dev/mmcblk0p1 8192 122879 57344 c W95 FAT32 (LBA)
/dev/mmcblk0p2 122880 61831167 30854144 83 Linux
Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: yyyyyyyyyy
Device Boot Start End Blocks Id System
/dev/sda1 2048 625139711 312568832 7 HPFS/NTFS/exFAT
この例では上半分が microSD カード,下半分が外付け HDD の情報となっています./dev/sda が外付け HDD 自身,/dev/sda1 がその中のパーティションを示します.もしパーティションがまだない場合 は次のコマンドモードに入りパーティションを作成してください.
pi@raspberrypi ~ $ sudo fdisk /dev/sda
(n → Enter → Enter → Enter → Enter → w の順にキー入力)
既存のもしくは新しく作成したパーティションを ext4 でフォーマットします.
pi@raspberrypi ~ $ sudo mkfs.ext4 -m 0.001 /dev/sda1
■ 挂载分区
上でフォーマットしたパーティションをマウントします.また,ラズパイ起動時に自動でマウント(パーティションの UUID を使用)する設定もしたいと思います.ちなみにマウント先は /mnt/hdd1 としました.
pi@raspberrypi ~ $ sudo mkdir /mnt/hdd1
pi@raspberrypi ~ $ sudo mount /dev/sda1 /mnt/hdd1
pi@raspberrypi ~ $ sudo blkid /dev/sda1
(表示される UUID をコピーする)
pi@raspberrypi ~ $ sudo nano /etc/fstab
/etc/fstab に以下の文字列を追記します.UUIDには上でコピーしたものをペーストしてください.
UUID="~~~~~~" /mnt/hdd1 ext4 defaults 0 0
只需保存文件,自动挂载设置就完成了。
■ 创建 ownCloud 的数据目录
pi@raspberrypi ~ $ sudo mkdir /mnt/hdd1/data
ownCloud から利用できるように所有者とパーミッションを変更します.
pi@raspberrypi ~ $ sudo chown -R www-data:www-data /mnt/hdd1/data
pi@raspberrypi ~ $ sudo chmod -R 770 /mnt/hdd1/data
7. ownCloud のインストールと設定
あともう一息です.最後に ownCloud のインストールと設定を行います.
■ 安装 ownCloud
ownCloud の最新版をインストールします.
pi@raspberrypi ~ $ sudo mkdir -p /var/www/owncloud
pi@raspberrypi ~ $ wget https://download.owncloud.org/community/owncloud-latest.tar.bz2
pi@raspberrypi ~ $ tar xvf owncloud-latest.tar.bz2
pi@raspberrypi ~ $ sudo mv owncloud/ /var/www/
pi@raspberrypi ~ $ sudo chown -R www-data:www-data /var/www
pi@raspberrypi ~ $ rm owncloud-latest.tar.bz2
8. 做好了
重新启动树莓派并尝试通过Web浏览器访问树莓派的本地IP地址(可能会遇到不受信任的证书页面),然后设置页面将会出现。在这里,您可以设置ownCloud的管理员和数据目录(/mnt/hdd1/data),然后就完成了。辛苦了\(^o^)/。
文献引用
-
- How to setup ownCloud 7 on Raspberry Pi
-
- Raspberry Pi Model B+のUSBポートに1.2Aの電力を供給する
-
- 固定IPアドレスの設定
- 504 Gateway Timeout with Centos/nginx