目标

建一个个人网盘是我很久以来的想法,最近这些天因为新型冠状病毒的影响,只能待在家,有大把时间可以用来折腾树莓派,就尝试用手里的树莓派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文档说明和下载地址: https://github.com/fatedier/frp/blob/master/README_zh.md#%E9%80%9A%E8%BF%87%E8%87%AA%E5%AE%9A%E4%B9%89%E5%9F%9F%E5%90%8D%E8%AE%BF%E9%97%AE%E9%83%A8%E7%BD%B2%E4%BA%8E%E5%86%85%E7%BD%91%E7%9A%84-web-%E6%9C%8D%E5%8A%A1

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连接树莓派。

7 个评论

  1. 按教程成功建好了,但我想使用webdav插件,提示“您当前服务器不支持PATH_INFO模式”,官方教程http://doc.kodcloud.com/v2/#/help/pathInfo
    麻烦博主帮忙看下

    bill
  2. 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

    bill
  3. 兄弟你也推荐用openfans的debian啊,不错不错,我最近写的文章和你不谋而合,你看看尝试下在docker上跑呢,既然都装了openfans的系统,哈哈,https://www.evling.me/articles/2020/12/16/1608048288649.html

发表评论

您的电子邮箱地址不会被公开。

15 + 12 =