0%

Nextcloud私有云盘大名鼎鼎,在此之前都是用Ftp做同步,比较Low,老婆也提意见,照片归档后也不方便查看。

那就再折腾一下这个老战友吧。

决定安装nextcloud之前,我的版本还是FreeNAS-11.1-U6,没事不去升级它,但这次的需求需要升级一下了。11.2新的Jail机制,是不再支持老的warden,以后都用iocage,虽然不懂区别,为了以后主系统升级时,Jail不成为拖累,还是升级了。目前版本FreeNAS-11.2-U7。

在此之前一直没折腾过Jails,而Nextcloud是安装在Jails中的,相当于虚拟机。

启用Jails,先考虑到节能问题,主阵列不能放Jails数据集,Jails的运行,必会导致零星读写,使得机械硬盘就无法进入节能模式。

先迁移Jails到SSD,由于Jails本来就没用过,影响不大,注意Jails不能放在共享目录中,也不要手欠,人工给它新建一个数据集再指向过去,人工建的数据集在后面创建虚拟机时会产生各种问题,这个坑很大,大家不要往里跳了,指定好Pool,让系统自己创建最好了。

然后说一下为什么不用最简单的插件安装。FreeNas的插件,在墙内非常难用,下载Pbi再上传也遇到问题(11.2已经不能上传pbi了吧)。同时,插件是很难有更新的,11.1的FreeNas官方还在推荐装9.0时代的插件。相对的,各应用自家的官网上,版本更迭很快,还是手工创建Jails,然后在FreeBSD下面自己安装比较知根知底。当然,装完NextCloud之后,我发现后台是可以在线更新的,不知道插件版的有没有这个选项。

先创建一个Jail,初次创建会报错,先用iocage fetch 11.2-RELEASE -r命令,来获取版本为11.2-RELEASE的模版,可能比较慢,完成之后创建Jail就很快了。创建好Jail之后,SSH到FreeNas,用jls查看jails列表,用jexec JID(1或2) csh 进入对应虚拟机的命令行。Web页面也有Shell,我觉得没有SSH方便。

iocage fetch 11.2-RELEASE -r

root@Xinew-FreeNas:~ # jls
   JID  IP Address      Hostname                      Path
     11                  TestJail1                     /mnt/iocage/jails/TestJail1/root
     12                  TestJail2                     /mnt/iocage/jails/TestJail2/root

root@Xinew-FreeNas:~ # jexec 2 csh 
root@TestJail2:/ # 

下面的问题就变成了在FreeBSD下,如何搭建FAMP环境,再安装NextCloud的问题了。下面的流水账没什么技术含量,但是是写这篇文章的本意,未来某一天,很可能要重装NextCloud时,把步骤翻出来,方便自己查阅。需要说明的是,下面的步骤不是第一次安装时的步骤了,初次安装成功之后,使用了一两周,发现有不少规划方面的问题,也算是学习新平台的成本吧。本来初衷就是利用NextCloud解决归档问题的,第二次安装 ,把各个存储所用的数据集都考虑好,使用起来就要合理多了、安全多了。

规划数据集的主要思想是,仅仅把Jail当做一个容器,NextCloud当做app,把app本身及其配置文件、数据库、主题网格目录,存档数据都通过挂载的方式在Jail中使用,如果Jail崩溃,只要再创建一套运行环境就可以了。临时存储的数据都在FreeNas物理机的SSD上,归档的数据都在FreeNas物理机的机械硬盘阵列中,Jail中无孤本数据。

下面流水帐记一下大致步骤,有可能有些小过程没有记录完全,不影响大局,关键步骤都在这里了。

先在FreeNas的SSD上的Movie数据集,创建nextcloud目录,然后在下面创建db、data、config、themes四个子目录。(由于是二次安装,这几个目录本身就存在了。)

然后在FreeNas的命令行下,运行下面的命令开机,当然在图形界面点启动按钮也可以,都用命令行来进行完整的表述,免得通过web操作,未来再次重装时,按钮位置或操作方式变化,导致截图无用。

几秒钟后,就进入刚刚开机的Jail,按照下面的命令创建目录,新建的目录都要做为挂载点供nextcloud使用的。

mkdir /usr/local/www/nextcloudmkdir /usr/local/www/nextcloud/configmkdir /usr/local/www/nextcloud/themes

然后再退回到FreeNas命令行执行各种挂载。注意机械硬盘的Nas数据集,存放的是归档后的文件,要只读挂载,以防误删。 

iocage fstab -a TestJail2 /mnt/Nas/test /mnt/Nas nullfs ro 0 0iocage fstab -a TestJail2 /mnt/Movie/nextcloud/data /mnt/data nullfs rw 0 0iocage fstab -a TestJail2 /mnt/Movie/nextcloud/db /var/db/mysql nullfs rw 0 0iocage fstab -a TestJail2 /mnt/Movie/nextcloud/config /usr/local/www/nextcloud/config nullfs rw 0 0iocage fstab -a TestJail2 /mnt/Movie/nextcloud/themes /usr/local/www/nextcloud/themes nullfs rw 0 0

下面改一下Jail的pkg源,用中科大的源,不然FreeBSD.org的小水管会把人急死的。

修改 /etc/pkg/FreeBSD.conf 

改为下面的内容: 

url: "pkg+http://mirrors.ustc.edu.cn/freebsd-pkg/${ABI}/quarterly",fingerprints: "/usr/share/keys/pkg",

我不太追求最新版,如果想用最新版,可以再修改一下,把url中的“quarterly”改为“latest”。

然后pkg update,pkg upgrade,升个级,如有确认,一路按“Y”。

我预计要配置的F.A.M.P环境是:

FreeBSD 11.2-STABLE

Apache 2.4

MariaDB 10.2

PHP 7.2

下面,一样一样的来:

1、装Apache 2.4

sysrc apache24_enable=yes

这时通过浏览器可以看到Apache默认页面了: It works!

2、装mysql

pkg install mariadb102-serverservice mysql-server startmysql_secure_installation

这时进入安全配置,如果有出错提示:(你挂载的如果是空目录,有可能不会出错,可跳过下面的内容。我挂载的是mysql目录是有数据,运行了2周多的数据都在里面。)

Enter current password for root (enter for none): 
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)

Ctrl+C中止脚本,停掉mysql服务,再检查 /usr/local/etc/my.cnf 是否存在,不存在的话就要拷贝一份small环境下的模版再启动。而当前mysql的root密码,还是老密码,直接敲回车是不行的,要注意下。

安全选项,我都选了Y:

Remove anonymous users? [Y/n] yDisallow root login remotely? [Y/n] yRemove test database and access to it? [Y/n] yReload privilege tables now? [Y/n] y

3、装redis。

4、装nextcloud-php,版本多,先 pkg search nextcloud,然后选择如下:

pkg install nextcloud-php72-17.0.2

这一条安装命令,在安装过程中,会把依赖的相关php包60多个自动装上,就不必专门去安装php了。  

5、配置Apache

添加对php、php-fpm的支持。

vi /usr/local/etc/apache24/httpd.confLoadModule proxy_module libexec/apache24/mod_proxy.soLoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.sovi /usr/local/etc/apache24/Includes/nc.confDocumentRoot "/usr/local/www/apache24/data"ProxyPassMatch ^/(.*.php(/.*)?)$ fcgi://127.0.0.1:9000/usr/local/www/apache24/data/$1  DirectoryIndex /index.php index.phpcp php.ini-production php.inidate.timezone = Asia/Shanghaiupload_max_filesize = 1999Mopcache.memory_consumption=128opcache.interned_strings_buffer=8opcache.max_accelerated_files=10000opcache.revalidate_freq=1cd /usr/local/www/apache24/datavi /usr/local/etc/apache24/httpd.confDocumentRoot "/usr/local/www/apache24/data" <Directory "/usr/local/www/apache24/data">DocumentRoot "/usr/local/www/nextcloud"<Directory "/usr/local/www/nextcloud">chown -R www:www /usr/local/www/nextcloud /mnt/datavi /usr/local/etc/apache24/Includes/nc.confDocumentRoot "/usr/local/www/nextcloud"SetHandler "proxy:fcgi://127.0.0.1:9000/"DirectoryIndex /index.php index.phpAH00558: httpd: Could not reliably determine the server‘s fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message#需要编辑 /usr/local/etc/apache24/httpd.conf,搜索“ServerName”,把前面的注释去掉,并改为IP。vi /usr/local/etc/apache24/httpd.confServerName 192.168.1.70:80Performing sanity check on apache24 configuration:Performing sanity check on apache24 configuration:

此时,nextcloud已经启动起来了,由于我是迁移过来的,初始配置都做过的,这里就不列举步骤了,有需要的同学可以查看初始化文档。 

迁移而来的nextcloud,启动界面报了错,界面上提示:”请确保文件根目录下包含有一个名为“.ocdata”的文件。”

解决方法也很简单,创建一个就好了,在哪创建却是个问题,可以用这个命令查看一下:

more /usr/local/www/nextcloud/config/config.php | grep datadirectory

我的位置在这里,每个人有可能不一样:

'datadirectory' => '/usr/local/www/nextcloud/data'

创建一个空文件,然后存盘。递归修改属主和权限,再次刷新,就可以打开界面拉。

vi /usr/local/www/nextcloud/data/.ocdata chown www:www /usr/local/www/nextcloud/data/.ocdatachmod 777 /usr/local/www/nextcloud/data/.ocdata

迁移后,首次进入后台,检查一下“安全及设置警告”,提示imagick未安装,记得初次安装之后也有这个提示。

6、装imagick

安装时会自动安装依赖的35个包,安装完成后,模块自动加载到php-fpm.conf中,不用手工添加了。不放心可以创建个phpinfo()检查一下。

pkg install php72-pecl-imagick-3.4.4 

还有些细节问题,比如https、sudo、crontab、视频缩略图ffmpeg、外部存储、移动终端同步策略、跨平台多终端协同、外网穿透等,就不一一介绍了,放两张手机截图来结束本文吧。