树莓派折腾记:家庭私有云存储

之前常用的百度网盘现在感觉已经废了,第一是经常资源被封杀了,有时候就连一些程序的配置文件也被误封杀。。。第二是不冲会员下载速度就会被限制,那我办个20M的光纤还有什么意义。所以决定在树莓派上捣鼓一个私有云,它需要具备以下几个特点:

  • 存储的文件以普通文件系统的方式存储。这样即使私有云系统挂了,我还可以通过SAMBA等文件共享方式访问存储的文件。
  • Web管理页面,方便各种设备访问。
  • 文件预览。无需下载,即可查看文档。能有视频播放功能最好。

网上搜索发现开源的私有云系统有着三个:PydioSeafileownCloud。我最后选择了Pydio,因为它具备我之前想要的特点,其他还额外提供了账号权限控制、文件分享等功能,另外有全平台客户端(对于经常使用云存储的设备来说有个客户端更方便)。Reddit上有一个关于三者对比的一个讨论,请参看这里

Pydio安装配置

官方指导文档中提供了两种安装方式,但是第二种从RPM/DEB仓库中安装方法在树莓派上会出现如下错误:

W: Failed to fetch https://download.pydio.com/pub/linux/debian/dists/jessie/InRelease  Unable to find expected entry 'main/binary-armhf/Packages' in Release file (Wrong sources.list entry or malformed file)

W: Failed to fetch https://download.pydio.com/auth/linux/debian/dists/jessie/InRelease Unable to find expected entry 'main/binary-armhf/Packages' in Release file (Wrong sources.list entry or malformed file)

因为官方的仓库中没有提供binary-armhf这样一个分支目录。这个问题作者已经在这里回复过,说是一月后会添加上来,但是现在已经距离这个帖子过去4个月了。

因此在树莓派上暂时只能使用第一种安装方式,也就是直接下载安装包文件。不过你仍需注册一个Pydio账号,并申请一个10人的免费授权。你会得到一个授权码,这个码在安装完后需要提供给Pydio

安装

安装Nginx

sudo apt-get install nginx

修改配置文件/etc/nginx/nginx.conf中的user选项。

user www-data;

安装PHP及其插件

sudo apt-get install php5 php5-fpm php5-gd php5-cli php5-mcrypt

安装MySQL

sudo apt-get install mysql-server

安装过程会提示输入root账号的密码,请切记。输入下面命令进入mysql

mysql -u root -p

添加一个新的MYSQL账号,用于管理存储Pydio的数据库文件。

GRANT ALL PRIVILEGES ON *.* TO 'your_account' @'%' IDENTIFIED BY 'your_passwd' WITH GRANT OPTION;
flush privileges;

下载Pydio,解压至/var/www/pydio目录(或者其他Nginx可以访问的目录)。更改Pydio目录下data文件的所属者,使得Nginx可以对这个目录进行写操作。

chown -R www-data:www-data /var/www/pydio/data

配置Pydio Web服务。复制一份/etc/nginx/sites-available下的default文件

sudo cp default pydio

修改pydio文件如下

server {
listen 8010 default_server;
listen [::]:8010 default_server;

# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;

root /var/www/pydio;

# Add index.php to the list if you are using PHP
index index.php;

server_name pydio.xxx.com;

location / {
#First attempt to serve request as file, then
#as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;

# With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
}

启用Pydio站点

sudo ln -s /etc/nginx/sites-available/pydio2 /etc/nginx/sites-enabled/

重启php5-fpmnginx服务,使得新站点生效。

sudo service php5-fpm restart
sudo service nginx restart

现在你应该可以通过浏览器访问Pydio了: http://your_raspberrypi_address:8010

配置

进入 http://your_raspberrypi_address:8010 地址后,你应该能够看到Pydio的诊断工具页面。

诊断工具会提示一些ERRORWARNING。下面会逐一解决这些问题。

Security Breach ERROR: It seems that your data/ folder is not correctly protected, and that subfolders (like the data/cache/ folder) are web-accessible 。需要禁止访问data目录,在/etc/nginx/sites-available文件中添加如下配置

location ~* ^/(?:\.|conf|data/(?:files|personal|logs|plugins|tmp|cache)|plugins/editor.zoho/agent/files) {
deny all;
}

执行sudo service nginx restart重启nginx服务。再次访问 http://your_raspberrypi_address:8010 页面确认此ERROR已修复。

IonCube Extension ERROR 需要安装PHP的IonCube Loaders扩展。

下载ArmV7版本IonCube Loaders(百度云)并解压。拷贝解压后的文件至/usr/local/ioncube目录。修改/etc/php5/fpm/php.ini文件,在文件开头处(在[PHP]之前)新增下面配置

zend_extension = /usr/local/ioncube/ioncube_loader_lin_5.6.so

执行sudo service php5-fpm restartsudo service nginx restart确保扩展生效。

PHP Output Buffer disabled ERROR: you should disable php output_buffering for better performances with pydio。修改/etc/php5/fpm/php.ini,关闭PHP输出缓存。

output_buffering = Off

SSL Encryption WARNING先不管,SSL加密比较吃CPU,等后期测试过CPU占用比后再决定是否加上SSL。

当以后想再访问这个诊断页面时,可以通过访问/var/www/pydio目录下的runTests.php页面,但是需要先注释这一行

die("You are not allowed to see this page (comment first line of the file to access it!)");

ERROR都解决后,我们可以点击诊断页面的继续按钮。会进行账号、数据库方面的一些配置;最后会要求你输入授权码,登入你之前注册的Pydio账号,在MY LICENSES中能看到你的授权码信息。配置完成后,你就能正式进入Pydio私有云首页了。如果访问index.php出现了404错误,请先删除网址中index.php后面的斜杠,再重新访问。