本帖最后由 tony197511 于 2018-4-16 21:42 编辑
虽然前几年,免费网盘纷纷关闭,但是因为苹果iCloud空间费大幅降价,所以近年来个人数据大多存放在iCloud,每月6元就能享受50G容量,实现手机、电脑的数据同步与共享。
但是,去年风云突变,苹果也没法抗拒我朝的网络监管政策,被迫将iCloud迁移到云上贵州,虽然,本人自认为自己的数据既没有敏感内容,也没有什么见不得人的,但是,总感觉有一丝的不爽,加上最近听说各种隐私泄露的传闻,自然就产生了搭建私有云的想法。
心动不如行动,研究了一下网上的攻略,对于开源的Nextcloud(即著名的Owncloud的分支)一直心仪,只是当时感觉有下列问题: 1) Nextcloud可以建立在多种操作系统上,如Windows/Linux,但是都需要另外架设服务器,如果租赁云服务器,国内的价格也不低,国外的速度无法保证; 2) 如果服务器放在家里,又感觉大材小用,另外,电费估计也是不小的开销; 3) 由于没有仔细研究过,对于Nextcloud使用的便利性也有点疑问。
后来,偶然的机会,发现了Entware-ng+ONMP的绝佳搭配,正好可以配合家里LEDE软路由,加上手头闲置的大容量硬盘,完成个人私有云的拼图。
其实,刷了Koolshare编译的最新LEDE版本,软件中心里已经可以安装Entware环境,并进一步部署ONMP,但是,折腾了一下发现,还是存在一些问题,所以,下面的教程,主要是采用SSH远程登录路由器,运行安装脚本自行部署。
硬件配置: 路由器:CPU:Atom D525,内存:2GDDR3,硬盘:4G SSD 存储:希捷 2TB 绿盘(内置于绿联USB 3.0硬盘盒) 硬盘盒采用外置电源供电,连接路由器USB 2.0接口。 由于本人软路由配置稍低,没有USB 3.0接口,所以访问速度上有点硬伤,但是考虑到家里宽带上行速率才20Mbps,真正的瓶颈在于网速,在大多数应用情况中,也不是大问题。
软件信息: LEDE固件版本:Openwrt Koolsharemod V2.15 r6665-4758158 Linux内核版本:4.9.77
关于Entware-ng就不说明了,其实就是一个适用于嵌入式系统的软件仓库,跟openwrt自带源一样,只是里面的应用更多。ONMP是Opkg+Nginx+MySQL+PHP首字母的缩写,就是一个轻量级的云服务器环境,上面已经编译了若干个软件系统,Nextcloud只是其中一个,其他包括WordPress、KodExplorer等。
整个部署过程,包括安装Entware-ng环境,部署ONMP服务器环境及安装配置Nextcloud系统。需要通过SSH工具软件,登陆路由器进行安装,本人是用Putty。
(一)安装Entware-ng环境 进入路由器后,首先挂载外置硬盘,挂载方法有很多,包括安装软件中心的自动挂载应用,本人推荐下列的方法,便于管理。
1. 编辑/etc/fstab配置文件 $ vim/etc/fstab # 按一下i编辑文件 #<file system> <mount point> <type> <options><dump> <pass> /dev/sdb1/mnt/onmp ext4 defaults 0 1 # 添加这一行,如果挂载的是第2块硬盘,就是sdc1 # 按一下Esc再输入冒号`:`,输入wq回车保存
2. 输入挂载命令 $mount -a # 以后每次要挂载就直接输入这个命令
3. 为了保证路由器重启后自动挂载,编辑/etc/rc.local配置文件 $ vim/etc/rc.local mount-a # 在exit0之前添加命令,开机后自动执行挂载 exit0 # 按一下Esc再输入冒号`:`,输入wq回车保存
4. 输入查看命令 $ df-h 如果挂载成功,将显示如下信息: Filesystem Size Used Available Use% Mountedon /dev/sdb1 1875.5M 2.5M 1873M 0% /mnt/onmp
然后,在挂载硬盘上安装Entware-ng环境。
1. 挂载安装目录,即将硬盘实际文件夹与路由器系统文件夹进行绑定。 $mkdir /mnt/onmp/opt #创建硬盘上的文件夹 $mkdir /opt #创建系统文件夹 $mount -o bind /mnt/onmp/opt /opt #建立映射关系 同理,输入查看命令$ df -h,可以查看绑定是否成功。
2. 运行 Entware-ng 安装命令,由于本人软路由器是LEDE x86系统,直接输入如下命令: 安装完成后,会出现四行提示信息,前面两行是表示恭喜安装成功并没有错误,后面两行是提示需要编辑配置文件,实现开机自动启动Entware-ng环境。
注意两点: (1) 由于Entware-ng安装源在国外服务器上,所以要有点耐性等待,当然最好是有直通外网的端口,至于如何实现就不多说了; (2) 如果安装失败了,也没关系,删除/opt下面的所有文件夹,重新运行安装命令就可以了。
3. 配置/etc/rc.local文件,实现开机运行。 在 exit 0 之前,mount -a 之后增加如下命令行: mkdir-p /opt mount-o bind /mnt/onmp/opt /opt /opt/etc/init.d/rc.unslungstart # 按一下Esc再输入冒号`:`,输入wq回车保存
4. 配置/etc/profile文件,自动添加环境变量。 文件最后加入以下代码行 ./opt/etc/profile # 按一下Esc再输入冒号`:`,输入wq回车保存 上面4步完成后,重启路由器系统,然后,通过如下方式,确认Entware-ng环境是否正确安装与运行。 # 检查环境变量 $echo $PATH /opt/bin:/opt/sbin:/usr/sbin:/usr/bin:/sbin:/bin# 可以看到已经有/opt的路径了 # 检查 `/opt` 挂载情况 $ df-h /dev/sdb1 1875.5M 13.9M 1861.6M 1% /mnt/onmp # 硬盘挂载成功 /dev/sdb1 1875.5M 13.9M 1861.6M 1% /opt # /opt挂载成功 #opkg 更新数据 $opkg update Updatedlist of available packages in /opt/var/opkg-lists/packages # 成功
由于Entware-ng环境是安装在外置存储上的,首先不用再顾虑路由器自带SSD容量的限制,其次,适合反复折腾,反正对于路由器本身没有任何影响,后续路由器系统固件升级后,如果生效了,只要编辑/etc/rc.local与/etc/profile就可以了,非常简单方便。
(二)部署ONMP服务器环境
ONMP是通过一键安装脚本进行部署的,网上有好多自行编译的版本,本人是用了GitHub上的一个版本。 由于ONMP的安装源都在国外服务器上,同理,如果能配置直通外网的端口,效率会更高,否则,就要耐性地等待了。
1. 下载运行ONMP安装脚本 安装ONMP有两种方式,一种是通过一键脚本直接安装,另一种是运行多个脚本分布安装,看个人喜好了。 方式一: 方式二: cd /opt && opkg install wgetunzip # 进入entware 挂载目录 # 下载软件包 unzip /opt/onmp.zip # 解压 cd /opt/ONMP-master chmod +x ./onmp.sh ./onmp.sh # 运行
2. 安装ONMP环境 不管是哪种方式,最终都会出现如下界面:
输入1,首先安装ONMP环境,安装成功得到如下结果:
在浏览器输入: 路由器IP:81,如果显示雅黑PHP探针的页面,就说明安装成功了。在探针页面里,可以看到服务器(路由器)硬件配置、Nginx/MySQL/PHP版本信息、运行状况等。
3. 设置数据库密码 这一步很重要,因为后续安装的所有软件系统都是用同一个数据库,如果不修改,后果很严重,呵呵。 $ onmp open #回车后选择3 $ Enter password: #输入原数据库密码,初始密码是123456 $ New password: #如果原密码正确,回车后会提示输入新密码 $ Re-enter password: #回车后会提示再次输入新密码确认
ONMP部署成功后,在路由器系统界面,可以输入如下命令实现ONMP基本功能: 管理:onmp open 启动、停止、重启:onmp start|stop|restart 查看网站列表:onmp list
(三)安装配置Nextcloud系统 本人安装运行的ONMP脚本内置下列软件系统: (1) phpMyAdmin(数据库管理工具) (2) WordPress(使用最广泛的CMS) (3) Owncloud(经典的私有云) (4) Nextcloud(Owncloud团队的新作,美观强大的个人云盘) (5) h5ai(优秀的文件目录) (6) Lychee(一个很好看,易于使用的Web相册) (7) Kodexplorer(可道云aka芒果云在线文档管理器) (8) Netdata(详细得惊人的服务器监控面板) (9) Typecho (流畅的轻量级开源博客程序) (10) Z-Blog (体积小,速度快的PHP博客程序)
可以根据个人喜好选择安装,本人折腾的初衷就是搭建私有云,当然就直入主题了。Nextcloud与Owncloud本是同源,只是前端界面不同,所以,部署与配置方法基本相同,本人有点喜新厌旧,所以就直接上Nextcloud了,毕竟是新作呀!
1. 安装Nextcloud程序 直接输入命令 $ onmp open 选择7回车,然后在程序列表中选择4回车。
安装脚本会提示输入端口号(默认是99)以及数据库名称(默认是Nextcloud),建议直接回车选择默认值。
安装脚本将先下载安装压缩包,然后自行解压安装。
2. Nextcloud初始化配置 安装成功后,在浏览器输入:路由器IP:99,进行Nextcloud配置。 打开页面后,会提示输入网站管理员账号与密码,数据库管理员账号与密码,数据库名称与端口号,其中除了数据库管理员账号(默认为root)与密码(就是上一步设置的密码),其他都可以根据页面提示自行设置,下面是建议设置: 网站管理员:admin 网站密码:自行设置 数据库管理员:root 数据库密码:第二步设置的密码 数据库名称:Nextcloud 数据库端口:localhost:5432 其中比较容易让人误解的是数据库端口,其实如果后续安装了管理程序,也用不上,那是数据库内部端口,访问网站还是默认99端口,当然,后面可以通过修改配置文件的方式变更为其他端口。
3. 配置Nextcloud系统 如果各位英文能力不错,完全可以通过访问https://nextcloud.com,上面有详细的帮助信息,也可以注册论坛,寻求技术支持,不过由于该网站好像是注册在一个德国公司下面,不管是查资料还是发帖子都是需要英文的。 凭心而论,Nextcloud经过诸多优化,功能已经非常不过,可以通过桌面端与移动端进行同步与访问,支持包括Windows/macOS/Linux主流PC操作系统及iOS/Android移动操作系统,后续好像要开发Windows UWP客户端,这些都比我朝国内那些公有云要好的多。
上述安装部署教程参照了下列论坛的帖子:
由于是开源系统,所以就允许技术开发者或者应用者,通过修改配置文件,实现不同的应用场景。下面就通过几个典型应用场景,分享配置文件修改的心得。
(一) 关于上传文件的大小限制问题
Nextcloud默认好像只支持512M文件的上传,官方给出了修改配置文件,实现大文件上传的指导。
开场白总结一下,主要有下面几点: 1. 浏览器对于上传文件的限制是无法通过修改配置文件消除的,如32位浏览器及IE6-IE8仅支持2GB、IE9-IE11仅支持4GB 2. 最新的64位浏览器的限制自行查询 3. 同步客户端在上传时将自动切割文件,所以对于文件大小没有限制(个人也建议尽量安装客户端同步文件)
这里简单解释一下Nextcloud的文件上传与存储机制,根据理解,应该是先统一上传到服务器的暂存文件夹(即缓存),然后后端程序进行文件的拼接与转存至正式文件夹,因此,配置文件的修改主要包括三个方面: 1. Web服务器配置文件 这里就是Nginx配置文件/opt/etc/nginx/nginx.conf,由于Nginx的版本不同,需要修改的参数略有差异。 主要参数: client_max_body_size 前端单次上传的文件大小限制,如需要上传最大8GB大小文件,那么就设置为8192M,为什么不是8000M呢?稍后解释。 fastcgi_read_timeout Fastcgi是Nginx服务器上处理前端请求的代理协议,参数越大,说明读取请求的等待时间越长,对于大文件上传,自然需要更多的时间,本人参考网上介绍设置为600 client_body_temp_path 上传文件在服务器的暂存目录,目前是/opt/tmp,这是程序共用的缓存,只要保证这个目录有足够的空间就可以了,因为ONMP环境与上传文件存放在同一个硬盘上,因此,如果用到一定的时间,硬盘空间可能就不能支撑了。 client_header_buffer_size 这个参数官网上没有提到,但查了一些帖子,似乎也有点关系,所以就设置成1048576k,即1G 其他参数: fastcgi_request_buffering 这个参数需要在/opt/ect/nginx/conf/nextcloud.conf中查询,应该是Fastcgi请求是否要缓存,需要设为off,目前初始就是off状态。 网上还提到其他几个参数,看了一下,要么是在这个版本中没有找到,要不是根据网友介绍说不一定需要,所以都没有修改。 下面是两个修改后的配置文件截图。
2. PHP配置文件 PHP主配置文件是/opt/etc/php.ini,因为这里安装了PHP7,还有一些配置文件在/opt/etc/php7及/opt/etc/php7-fpm.d/www.conf,但看了一下,应该只要修改php.ini里的参数就够了。 官网里提及了四个主要参数: post_max_size 在“Data Handling”部分中,现在安装脚本的默认值是1000M,先修改成8000M,就是允许上传最大8G的文件,跟上部分同理,比8192略小,原因下面一起解释。 upload_max_filesize 在“File Uploads”部分中,现在安装脚本的默认值是8000M,修改成8192M,为什么比之前两个值要略大呢?主要是根据查询的一些帖子,这个值是限制上传文件大小的关键值,8G换算公式,应该是8x1024=8192M,上面两个参数理论上应该比这个参数略小,所以都是设成8000。 upload_tmp_dir 在“File Uploads”部分中,应该是上传文件的暂存文件夹,只要保证足够的空间即可。 output_buffering 在“Language Options”部分中,个人感觉与上传没太大关系,官网说明要设成off,目前配置是4096,就暂时没有修改,实测下来好像也没什么影响。 还有三个参数 max_file_uploads 在“File Uploads”部分中,很理解就是一次最多上传的文件数,默认值是20,实测中,如果单次同步大文件比较多的话,最多把这个值调低,因为在文件上传过程中,都要占用缓存文件夹容量,如果同时上传太多的话,会占用非常大的空间,从而导致不可预计的错误。 max_execution_time 在“Resource Limits”部分中,应该是PHP脚本的执行时间,默认值是200,感觉太小了,修改成1800. max_input_time 在“Resource Limits”部分中,注释是PHP脚本的请求时间,默认值是60,修改成3600。 上述三个参数并没有在官网里提及,但是查阅了一些资料,可能有影响,所以就修改了。 下面是修改后的配置文件截图。
3. Nextcloud配置文件 官网的意思是如果没有权限修改php.ini里的缓存文件夹,可以通过修改/opt/wwwroot/Nextcloud/config/config.php来设置,实际应用中,发觉没有参数与上传文件有关系,所以也就没有修改。
调整好配置后,重启一下路由器或者ONMP环境,实测下来发现两点: (1) 通过桌面端同步文件时,当大文件上传比较集中室,仍然会发生出错,报错信息一般是Gateway timeout,后来,调整了一下,控制一次传送大文件的数量,这样报错的情况就基本没有了。估计是硬件性能的瓶颈,毕竟不是专属服务器,即使调整了配置,但是实际使用过程当中,硬件的限制就没法规避了。 (2) 同步过程中,偶尔也会会文件上传或下载失败的情况,报错信息一般是Internal Server Error,但是观察一下,稍后会再次同步,经过一段时间后,错误就消除了。估计可能是网络闪断或者文件后台转存时出错,应该不是本质的问题,毕竟Nextcloud已经具备了纠错能力。
(二) 修改Nextcloud网站端口号 虽然默认99端口并不与原系统配置冲突,但是为了安全起见,最好还是修改一下端口号,修改的方法除了初始安装阶段,还可以通过修改配置文件的方式实现,分别是/opt/etc/nginx/vhost/Nextcloud.conf与/opt/wwwroot/Nextcloud/config/config.php。
同理,修改完配置文件后,需要重新启动路由器后者ONMP环境。
(三) 实现外网连接 部署了个人私有云,肯定不会满足于只在家里使用,当然希望在外的时候也可以连接域名访问,通过LEDE的koolddns服务,及开放防火墙的对应端口,可以完美实现外网使用Nextcloud服务。 具体过程就不多说了,应该通过菜单配置,非常简单。 只是有一点提醒一下,在设置防火墙端口转发的同时,还是设置wan接口接受入网数据。
|