目标
建一个个人网盘是我很久以来的想法,最近这些天因为新型冠状病毒的影响,只能待在家,有大把时间可以用来折腾树莓派,就尝试用手里的树莓派4B建一个网盘。
首先尝试安装的是 Nextcloud ,它是 ownCloud 的分支,功能强大,网上可以找到的安装示例很多,甚至还有专门的Nextcloud Pi系统镜像。不过,解决各种问题最终安装完成之后,发现即使在局域网内网页反应速度也比较慢,做一些优化之后依然不理想。于是转向尝试可道云的kodexplorer,发现可道云在社区里发布了新的kodbox http://bbs.kodcloud.com/ ,应该是用来取代kodexplorer,安装成功之后感觉还不错,发文记录一下。
本文的最终目标是将树莓派打造成一个可以外网访问的私有云盘,使用VPS+frp实现内网穿透。
2020/02/23:经过半个月的试用,简单总结一下体验,kodbox的web端响应速度很快,延续了kodexplorer的设计,文件管理器模仿windows的资源管理器,上手很容易。另外有插件功能,默认带有office插件,无需配置即可在线查看编辑office文档,这是kodbox的一大优势,相比其他网盘程序,seafile免费版不支持office查看和编辑,nextcloud则需要一番配置才可以。
kodbox看起来更像一个云桌面,但是值得尝试的云端软件和插件很少,桌面功能很是鸡肋。试用过程中,多次出现上传大文件失败的情况,安卓客户端也不太稳定。可能是nginx、php或者其他什么地方的配置需要调整优化,但官网似乎没找到什么说明文档,无奈最终放弃了kodbox。(2021-1-30更新:已参照官网说明http://doc.kodcloud.com/v2/#/help/options在下面教程中优化了nginx、php等的配置参数)
放弃kodbox之后,尝试安装了seafile,seafile更像一个纯粹的网盘,web端响应速度也很快,上传文件速度很稳定,性能和稳定性是seafile的优势。seafile存储文件时是分块存储,文件只能在seafile里看到,用cd命令进入数据目录里只能看到一个个数据块,seafile这样的设计在性能上有肉眼即可察觉的优势,但是一旦出了问题,如何恢复文件呢?官网文档上没有这方面说明。seafile有自己的web服务程序,速度很快但没有什么可配置的选项,不像nginx那样可以有各种配置方式,目前没有找到比较完美地通过frp实现内网穿透的配置方案。
近一个月的时间,从nextcloud、kodexplorer、kodbox、seafile,花了大把时间,一路尝试了各种网盘程序,最终,我还是选择了nextcloud,nextcloud功能强大,但占用资源较高,对树莓派来说压力比较大,但好在官方文档非常详细,按照官方说明优化以后,nextcloud在树莓派上运行还是很快的。
2020年12月2日补充:评论区有童鞋推荐了filerun,后来我安装试用了一下,发现它就是我想要的简单快速纯粹的网盘程序。目前已经使用filerun近一年,确实不错,推荐感兴趣的朋友安装试试。
2021-1-29更新:已新增了一篇文章写配置filerun网盘的详细过程:https://www.hncldz.com/?p=735
想要安装尝试kodbox的朋友继续看下面,2021-1-30已大幅度重写配置过程:
准备工作
树莓派一个,4B、3B、3B+都可以安装,但强烈推荐4B,毕竟4B在CPU、网卡、USB接口等方面强3B太多。
如果打算长期使用,存放较多文件,准备2.5寸移动硬盘一个。
下载适用于树莓派的Debian 10 arm64位系统Debian-Pi-Aarch64(https://github.com/openfans-community-offical/Debian-Pi-Aarch64),推荐使用无桌面的基础版,目前(2021-1-30)最新版本是2021-01-02-OPENFANS-Debian-Buster-Aarch64-ext4-v2021-2.0-U6-Release.img。
为什么要用64位系统?因为kodbox需要使用64位的php,使用32位的上传文件最大限制2G。
系统下载完成后写入SD卡,插入树莓派通电开机,稍等几分钟,待自动重启3次后就可以用了,默认用户名pi,密码raspberry。
系统安装完成后配置固定IP地址、开启SSH、更新系统,操作方法跟官方的Raspberry Pi OS一样。
安装配置数据库
安装MariaDB,它是MySQL的社区开源分支
sudo apt install mariadb-server
安装完成后,建议运行MariaDB随附的安全脚本。该脚本将删除一些不安全的默认设置,并锁定对数据库系统的访问。通过运行以下命令来启动交互式脚本:
sudo mysql_secure_installation
刚安装的数据库,还没有数据库root密码,直接回车设置root密码
剩下的步骤分别是移除默认的匿名账户、禁止root账户的远程登录、删除test数据库、重新加载特权表让更改生效等,一路按Y确认即可
接下来创建kodbox所需的数据库和数据库账户
首先,使用root帐户登录MariaDB:
sudo mysql
创建kodbox数据库,数据库可以随意命名,但本文示例直接使用kodbox
CREATE DATABASE kodbox;
接下来,创建一个单独的MariaDB数据库用户帐户,该帐户将管理新创建的kodbox数据库。从管理和安全的角度来看,创建单一功能的数据库和帐户是一个好主意。与数据库的命名一样,可以选择自己喜欢的用户名。本示例直接选择使用kodbox
作为账户名称。
CREATE USER 'kodbox'@'localhost' IDENTIFIED BY '此处替换为kodbox账户密码';
现在,将新创建的数据库上的所有权限授予用户:
GRANT ALL ON kodbox.* TO 'kodbox'@'localhost';
在为用户分配了对数据库的访问权限后,执行flush-privileges操作以确保正在运行的MariaDB实例知道最新的权限分配:
FLUSH PRIVILEGES;
这样就完成了MariaDB数据库的配置,输入exit退出会话:
exit
记下数据库名称kodbox,用户名kodbox和密码,稍后配置kodbox需要这些信息。
安装配置PHP
安装Redis、PHP、以及需要的PHP模块:
sudo apt install redis php php-fpm php-curl php-gd php-mbstring php-redis php-mysql
注意我选择的数据库是MySQL/MariaDB。另外可以选择SQLite,安装SQLite命令:
sudo apt-get install php-sqlite3
配置kodbox需要的PHP参数
创建并编辑一个配置文件,该文件将自动由PHP附加到其配置中,包括kodbox官方推荐的一些PHP设置。
sudo vi /etc/php/7.3/fpm/conf.d/kodbox.ini
将以下内容写入到创建的文件中:
post_max_size = 500M;
upload_max_filesize = 500M;
memory_limit = 500M;
max_execution_time = 3600;
max_input_time = 3600;
safe_mode = off
request_terminate_timeout = 3600
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 10
pm.max_spare_servers = 30
pm.max_requests = 500
cgi.fix_pathinfo = 1
date.timezone = "Asia/Shanghai"
验证PHP配置
在kodbox根目录里创建一个phpinfo.php文件
sudo vi /var/www/html/kodbox/phpinfo.php
输入以下内容:
<?php
phpinfo();
然后浏览器里打开以下地址
http://树莓派IP地址/phpinfo.php
看到以下页面可以确认PHP配置成功,同时可以在这个页面检查redis、mbstring等PHP模块是否正常启用
安装配置Nginx
安装nginx
sudo apt install nginx
配置kodbox所需要的nginx参数
sudo vi /etc/nginx/conf.d/kodbox.conf
将以下内容写入到创建的文件中:
client_max_body_size 500M;
client_header_timeout 3600s;
client_body_timeout 3600s;
fastcgi_connect_timeout 3600s;
fastcgi_send_timeout 3600s;
fastcgi_read_timeout 3600s;
创建kodbox网站根目录:
sudo mkdir /var/www/html/kodbox
挂载移动硬盘到网站根目录,并设置开机自动挂载,如果没有移动硬盘,这步跳过即可。
假如移动硬盘是sda,上面只有一个分区sda1,挂载示例:
先格式化成ext4分区格式
sudo mkfs.ext4 /dev/sda1
手动挂载命令
mount /dev/sda1 /var/www/html/kodbox
开机自动挂载需编辑/etc/fstab,修改fstab文件请谨慎,确认好再保存,在下面添加一行:
/dev/sda1 /var/www/html/kodbox ext4 defaults 0 0
重启之后可用df -h或lsblk命令查看是否能开机自动挂载。
请注意如果插有多个USB 存储设备,则建议在fstab文件中以PARTUUID的方式写入而不是/dev/sda1这样,否则可能会因为USB存储设备的顺序在开机时随机分配而挂载失败,也就是说本来是sda,重启之后可能就变sdb了,查看分区PARTUUID的命令:
sudo blkid
配置nginx:在/etc/nginx/sites-enabled目录下,创建一个kodbox文件,
sudo vi /etc/nginx/sites-enabled/kodbox
添加内容如下,请注意根据实际情况修改server_name字段:
server {
listen 80;
listen [::]:80;
root /var/www/html/kodbox;
server_name 192.168.1.98;
location / {
index index.html index.htm index.php default.html default.htm default.php;
}
location ~\.php(.*)$ {
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
重启nginx、php 、mariadb 等服务:
sudo systemctl restart nginx php7.3-fpm mariadb
配置kodbox
从官网下载kodbox(https://kodcloud.com/download/),目前(2021-1-30)最新版本是kodbox.1.15.zip,移入网站根目录下解压并设置目录权限:
curl -o kodbox.1.15.zip http://static.kodcloud.com/update/download/kodbox.1.15.zip
sudo cp kodbox.1.15.zip /var/www/html/kodbox
cd /var/www/html/kodbox
sudo unzip kodbox.1.15.zip
sudo chown -R www-data:www-data /var/www/html/kodbox
在浏览器里打开树莓派的IP地址,以上配置没有问题的话就可以进入kodbox的配置界面。第一步是环境检测:
第二步配置数据库,根据需要选择MySQL或者SQLite
配置管理员账号密码:
顺利的话很快就安装完成进入登录界面了:
登录之后的界面展示:
除了浏览器访问,kodbox还有Windows版、安卓和ios客户端。
优化上传下载速度
在后台管理-基础设置-上传/下载里修改成以下官方推荐的设置
系统安全优化
开启防跨站
系统管理员可以访问服务器任意资源,如果不想这样,可以开启php防跨站,指定站点的open_basedir,只能访问必要的目录。方法有多种,本文推荐修改PHP的配置
sudo vi /etc/php/7.3/fpm/conf.d/kodbox.ini
追加一行,内容如下:
open_basedir = /var/www/html/kodbox/:/tmp/
修改后重启php-fpm生效
sudo systemctl restart php7.3-fpm
VPS+frp实现外网访问
如果只想在局域网内搭建一个私有云盘,到上一步就算完成了。
如果你已经购买有VPS虚拟主机和域名,则可以使用frp实现内网穿透,让网盘可以通过公网访问。frp可以将树莓派本地的80、22等端口映射到VPS的某个端口,通过外网访问VPS的端口即可ssh控制树莓派,访问树莓派上搭建的网盘。下面简单介绍一下如何配置。
以下以VPS IP为1.1.1.1,域名为www.yourdomain.com为例,先更改一下nginx的配置。
修改/etc/nginx/sites-enabled/kodbox,在server_name后加上域名www.yourdomain.com。
frp支持x86、arm等多种系统和架构,根据实际情况下载。VPS运行服务端frps,树莓派运行frpc客户端。具体配置方法不细说,下面是我的frps.ini 、frpc.ini配置内容
frps.ini :
[common]
bind_port = 7000
vhost_http_port = 8080
token = 123456780
frpc.ini
[common]
server_addr = 1.1.1.1
server_port = 7000
token = 123456780
login_fail_exit = false
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
[web]
type = http
local_port = 80
custom_domains = www.yourdomain.com
token参数为服务端客户端验证用,两边一样即可。注意更改VPS主机IP和域名,上面的配置将树莓派22端口转发到VPS的6000端口,将80端口转发到VPS 8080端口,注意6000和8080端口不要被其他软件占用,如果正在使用,可换成别的。配置完成以后,即可通过http://www.yourdomain.com:8080访问网盘,通过6000端口ssh连接树莓派。
推荐 filerun,很好用.
感谢推荐,我装一下试试看
按教程成功建好了,但我想使用webdav插件,提示“您当前服务器不支持PATH_INFO模式”,官方教程http://doc.kodcloud.com/v2/#/help/pathInfo
麻烦博主帮忙看下
WebDav插件 PATH_INFO模式报错解决了,虽然直接访问网址会出错,但用软件同步是正常的,记录下
/etc/nginx/sites-enabled/kodbox文件,改动3处
修改
location ~\.php(.*)$ {
增加
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
代码具体位置见官方文档:http://doc.kodcloud.com/v2/#/help/pathInfo
感谢反馈!
2021-1-30:已在文章中并入以上设置
兄弟你也推荐用openfans的debian啊,不错不错,我最近写的文章和你不谋而合,你看看尝试下在docker上跑呢,既然都装了openfans的系统,哈哈,https://www.evling.me/articles/2020/12/16/1608048288649.html
seafile用docker搭建起来挺快的。
提供的fuse脚本也能预览文件。
备份的时候把数据库和data备份了就行了。换个地方docker直接挂载起来就好了呀。