从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第1张图片

从入门到入坟搭建FreeNAS服务器并配置NextCloud

2021-01-06 23:15:38 173点赞 963收藏 100评论

创作立场声明:本文所有商品皆自费购入,第一次发表文章,若有不当之处愿意接受大家的批评指点。NextCloud搭建部分主要转载Reven_L大佬的教程,在此感谢这位大佬的分享。

追加修改(2021-01-21 21:55:31):
4.2映射目录里面JMyDisk多了一个J 5.8将redis应用到NextCloud上面的后两条代码应为: su -m www -c 'php /usr/local/www/nextcloud/occ config:system:set memcache.local --value="OCMemcacheAPCu"' su -m www -c 'php /usr/local/www/nextcloud/occ config:system:set memcache.locking --value="OCMemcacheRedis"' 如果漏了''路径标识,就会出现页面无法打开问题。如果已经出现问题,可以在/usr/local/www/nextcloud/config/config.php文件里面修改
 

  • 心路历程

从大学的时候就有过打算建自己的一套NAS系统,苦于没有公网ip,高昂的DDNS内网穿透价格以及狭窄的宿舍没地方放置NAS只得作罢

毕业之后,家里由长城宽带更换为电信宽带 (你知道我这些年是怎么过的吗 ),拨打10000号也顺利地拿到了公网ip,之前更换的华硕RT-AC66U B1路由器刷了梅林之后插件支持阿里ddns(自带的DDNS如果不考虑设置SSL证书的话也是可以的,ddnspod插件似乎有问题并不能使用 ),一切的必要前提都准备好之后,下一步就是开始动手搭建NAS服务器了(入坟的开始 )。


  • 软硬件配置

为了方便起见,先把要用到的软硬件以及网站列出来

  • 公网ip

  • 系统安装工具:Rufus

  • 系统:TrueNAS12.0.U1(FreeNAS从12.0开始跟TrueNAS合并)

  • 系统盘:闪迪CZ73 32GB

  • 集成主板:华擎J3455-ITX

  • 内存:英睿达ddr3l 1600 8G

  • 数据盘:希捷酷鱼1T

  • 机箱:invasion银飞雄 X-1

  • 电源:海盗船SF600

  • 路由器:华硕RT-AC66U B1 梅林固件版本384.13_1

  • 路由器插件:阿里DDNS

  • 域名:阿里云

  • SSL证书:Let's Encrypt

  • SSH工具:Bitvise SSH Client

  • NextCloud-3.1.1(选择后缀为.tar.bz2的安装包和.tar.bz2.sha512的校验文件下载)


  • 入坟目录

  1. 硬件组装

  2. 购买域名

  3. 申请SSL证书

  4. 设置DDNS

  5. 安装系统

  6. 配置FreeNAS

  7. 配置NextCloud


  • 硬件组装

上面的硬件一大堆,其实就主板跟机箱是新买的,其余的要不是旧笔记本里面拆的,要不就是旧的itx主机退烧后一直闲置没用的

 所以才有了SF600来当电源 为了利用好闲置的配置,机箱在淘宝上逛了一圈,找到了invasion银飞雄 X-1这一款。我看重的是它支持较多硬盘,而且支持atx电源,至于侧透什么的就无所谓了。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第2张图片

invasion银飞雄 X-1硬件布局

因为是同城发货,第一天下午下单,第二天早上就到货了。外包装就一简单的牛皮纸盒子,开箱之后万万没想到硬盘架这么脆弱还没有缓冲保护措施,在快递路上就被撞歪了

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第3张图片

对强迫症极其不友好的硬盘架

这个机箱并没有配备sfx转atx电源架,幸好闲置的机箱有进行配备,就顺手拿来装上了。这个机箱如果极限一点,在底部风扇位置加装硬盘架,装十块3.5机械盘应该没问题

 不过J3455自带4个sata接口,要加更多硬盘需要pcie转sata的转接卡。目前只是用来尝试搭建FreeNAS,以后再加装硬盘,所以硬盘位看着挺孤零零的


  • 系统搭建

废话不多说直接开搞

一、购买域名

在万网上面购买域名用来访问家庭里面的网络设备,通过固定的域名解决公网ip不固定的问题。价格从几块钱起步,个人自用目前推荐选择top域名,首年9块,续费26块。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第4张图片

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第5张图片

top域名价格

二、申请SSL证书

由于国内80端口在家庭宽带是不能使用的,因此华硕路由器自带的ddns下面的证书签发不能完成认证,还得要自己去申请SSL证书。我申请的是Let's Encrypt证书,刚开始的时候不会操作,磕磕碰碰之后回过头看其实还挺简单的。按照下图进行输入:

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第6张图片

点击【申请证书】之后选择DNS验证,打开万网域名控制台【域名列表】-【解析】进入解析设置,添加解析记录,A记录是域名跳转ip,记录值填写当前获取到的公网ip,TXT记录是用于SSL证书签发时的域名验证,由于勾选泛域名和根域,要添加两条TXT记录。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第7张图片

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第8张图片

设置好之后回到Let's Encrypt进行验证,一般来说验证几分钟就能搞定。

三、设置DDNS

证书申请成功后,回到万网域名控制台,鼠标移动到右上角头像,点击【AccessKey管理】-【创建AccessKey】。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第9张图片

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第10张图片

把获取的AccessKey ID和Secret填写到插件上面,域名处填写所注册的域名,填写完毕后点击【提交】。这些步骤都完成以后,就能够在外面访问家庭网络了,接下来就是部署FreeNAS和安装NextCloud。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第11张图片

四、安装系统

直接在Windows电脑上面插入引导盘,在引导类型选择里面选择FreeNAS.iso文件,然后点击开始。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第12张图片

Rufus安装

系统引导完成后,把两个u盘都接入硬件,在BIOS设置好u盘加载顺序之后进入到系统安装界面:

回车进入第一项。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第13张图片

回车进入第一项。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第14张图片

选择安装系统的硬盘,按空格来选中硬盘。(因为是虚拟机进行的安装,所以只显示了一个硬盘,实际安装的时候要注意有没有正确选择硬盘)

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第15张图片

提示安装会抹除硬盘数据。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第16张图片

设置root用户密码。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第17张图片

引导模式我选择的UEFI。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第18张图片

成功安装提示。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第19张图片

选择第四项关闭系统,拔掉引导u盘后重新开机。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第20张图片

五、配置FreeNAS

重启后等待配置完成进入到如下界面,输入ip地址进入管理界面,现在就可以开始进行配置FreeNAS并安装NextCloud了。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第21张图片

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第22张图片

FreeNAS管理界面

刚打开管理界面的时候默认为英文,需要点击左侧菜单栏【System】-【General】-【Localization】-【Simplified Chinese】来进行管理界面语言修改。语言修改完毕后,其他按照下图进行设置,时区设置为东八区即可:

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第23张图片

注:如果不需要外网通过https访问FreeNAS管理界面,以下步骤可跳过:


端口记得在路由器里面设置端口转发,本地ip填写FreeNAS的本地ip地址,外部端口填写非80、443端口即可,如果端口发生冲突则进行修改。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第24张图片

1. 设置FreeNAS二级域名

主要用于在外网访问FreeNAS管理界面,在左侧菜单栏点击【网络】-【全局配置】,按下图进行配置,完成后通过外网访问FreeNAS管理界面的格式为"主机名.域名:端口":

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第25张图片

2. 添加证书,实现https访问

在设置完毕FreeNAS二级域名之后,就能够通过外网访问FreeNAS了,不过使用的链接协议是不安全的http,考虑到安全性,我们接下来要进行SSL证书设置。在左侧菜单栏点击【系统】-【证书】,点击右上角【添加】。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第26张图片

名称自定义,证书栏填写Let's Encyrpt下发的fullchain.crt文本内容,私钥填写private.pem文本内容,两者都可以通过记事本打开,完成后点击【提交】。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第27张图片

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第28张图片

回到【系统】-【常规】,在GUI SSL证书中选择刚刚添加的证书,完成后就能够在外网通过https协议访问FreeNAS了。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第29张图片

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第30张图片

至此,通过外网https访问FreeNAS管理界面的设置就完成了。


六、配置NextCloud

这部分基本是对照从零开始在FreeNAS的Jail上安装NextCloud这篇博客进行的,当时快放弃的时候刚好搜到这篇文章,抱着试试看的心态对着操作,最终成功安装好了NextCloud,在此对这位大佬表示感谢

NextCloud在插件里面是可以直接安装然后进行配置的,但是不知道为什么一直安装不上,只能手动安装,可以说搞定一个坑又遇到另一个坑

1. 添加数据池

添加池用于数据存储,在左侧菜单栏点击【存储】-【池】,再点击右上角【添加】。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第31张图片

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第32张图片

如果设置缓存盘,则点击【添加VDEV】,在左边的硬盘序列中勾选硬盘到右边相应位置,设置完成后点击【创建】。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第33张图片

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第34张图片

2. 创建数据集

在新建的存储池里面,我们需要新建数个数据集:NextCloudDataBase,nextcloud。再到nextcloud数据集里面新建三个数据集config、themes和db。首先在左侧菜单栏点击【存储】-【池】,点击池右侧三个点的标准添加新数据集NextCloudDataBase,atime值设置为off

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第35张图片

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第36张图片

和新建数据集NextCloudDataBase过程相同,新建nextcloud数据集和它的子集,区别在于atime值设置为on。新建完成后,池目录如下图所示:

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第37张图片

3. 创建用户并设置权限

在左侧菜单栏点击【账户】-【用户】,再点击右上角【添加】,按下图进行配置来创建mysql用户:

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第38张图片

回到池目录进行权限设置,将db数据集所有者的用户和群组都设置为mysql,并且记得勾选Apply User和Apply Group,然后点击【保存】。用相同步骤,将数据集NextCloudDataBase、config和themes的权限所有者用户和群组都设置为www

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第39张图片

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第40张图片

4. 创建Jail并进行配置

4.1 添加监狱

点击左侧菜单栏【监狱】-右上角【添加】-【高级监狱创建】,【基本属性】如下图进行配置,【网络属性】resolver修改为none:

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第41张图片

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第42张图片

4.2 映射目录

点击左侧菜单栏【命令行】输入以下命令,在Jail中创建目录(命令行使用shift+insert来实现粘贴):

iocage exec NextCloud mkdir -p /mnt/data

iocage exec NextCloud mkdir -p /var/db/mysql

iocage exec NextCloud mkdir -p /usr/local/www/nextcloud/config

iocage exec NextCloud mkdir -p /usr/local/www/nextcloud/themes

先在【监狱】中停止NextCloud监狱,再使用下面命令将Jail的目录映射映射到数据集里面(注意路径名称,前面路径为FreeNAS主机路径,后面路径为Jail目录路径):

iocage fstab -a NextCloud /mnt/MyDisk/NextCloudDataBase /mnt/data nullfs rw 0 0

iocage fstab -a NextCloud /mnt/JMyDisk/nextcloud/db /var/db/mysql nullfs rw 0 0

iocage fstab -a NextCloud /mnt/JMyDisk/nextcloud/config /usr/local/www/nextcloud/config nullfs rw 0 0

iocage fstab -a NextCloud /mnt/MyDisk/nextcloud/themes /usr/local/www/nextcloud/themes nullfs rw 0 0

成功执行会提示"Successfully added mount to NextCloud's fstab"。

4.3 设置FreeNAS缓存

命令行输入:

zfs set primarycache=metadata MyDisk/nextcloud/db

5. 安装NextCloud

5.1设置中科大软件源

默认软件下载速度很慢,需要我们更换下载源。

5.1.1 命令行设置中科大软件源

NextCloud监狱(注:【监狱】-【>】-【命令行】)打开命令行并输入:

nano /etc/pkg/FreeBSD.conf

nano编辑器需要使用命令"pkg install nano"进行下载,下载过程若有提示,输入y即可。

文本按照以下内容进行修改:

FreeBSD: {

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

mirror_type: "srv",

signature_type: "fingerprints",

fingerprints: "/usr/share/keys/pkg",

enabled: yes

}

修改完成后,按下CTRL+O并按回车键确认进行保存,CTRL+X退出文件编辑。

输入pkg update进行更新,有提示就输入y。


如果提示以下错误,需要关闭本地源并开启网络源:

pkg: file:///usr/ports/packages/meta.txz: No such file or directory
repository local has no meta file, using default settings
pkg: file:///usr/ports/packages/packagesite.txz: No such file or directory
Unable to update repository local
Error updating repositories!

nano /usr/local/etc/pkg/repos/local.conf

enable: no #关闭本地源

如果提示错误:No repositories are enabled. 需要开启网络镜像源。

nano /usr/local/etc/pkg/repos/FreeBSD.conf

enabled: yes #开启网络镜像源

更新pkg。

pkg update -f #更新


5.1.2 使用SSH工具设置中科大软件源

除了使用命令行打开FreeBSD.conf文件,我们还可以通过WINSCP、BitviseSSH等工具进行修改。点击【服务】,打开SSH并勾选自动启动,点击右边的编辑按钮,选中【使用密码以root身份登录】。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第43张图片

用记事本打开/mnt/MyDisk/iocage/jails/NextCloud/root/etc/pkg路径下FreeBSD.conf文件,修改为以下内容:

FreeBSD: {

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

mirror_type: "srv",

signature_type: "fingerprints",

fingerprints: "/usr/share/keys/pkg",

enabled: yes

}

保存文件并输入pkg update进行更新,有提示就输入y。

怕因为路径太长导致出错,可以在Jail里面开启SSH服务。

命令行如下:

nano /etc/ssh/sshd_config

去掉以下文本开头的#号:

port 22

PermitRootLogin no #将no改为yes

UseDNS yes

可选:Subsystem sftp internal-sftp #限定非root用户只能使用stfp连接

CTRL+O保存,CTRL+X退出。

开启ssh服务:

service sshd start

设置ssh自启动:

sysrc sshd_enable=yes

设置root用户密码:

passwd root

5.2 安装所需软件

pkg install nano #若已下载则不需要重新下载

pkg install wget ca_root_nss

pkg install nginx

pkg install mariadb104-server

pkg install redis

设置开机启动

sysrc nginx_enable=yes

sysrc mysql_enable=yes

sysrc redis_enable=yes

5.3 安装NextCloud文件

用SSH工具将前面下载好的NextCloud安装包上传到/mnt/MyDisk/iocage/jails/NextCloud/root/tmp,并用命令检验文件完整性。

使用监狱命令行,输入

cd /tmp

shasum -a 512 -c nextcloud-20.0.4.tar.bz2.sha512 #注意文件名

返回ok后将文件解压到NextCloud监狱目录下/usr/local/www/nextcloud,然后给www添加权限。

tar -xf nextcloud-20.0.4.tar.bz2 -C /usr/local/www

chown -R www:www /usr/local/www/nextcloud

5.4 设置MYSQL数据库

5.4.1 修改配置

打开/usr/local/etc/mysql/my.cnf:

nano /usr/local/etc/mysql/my.cnf

找到"socket = /var/run/mysql/mysql.sock"并修改为"socket = /tmp/mysql.sock",完成后保存并退出。

5.4.2 配置MySQL

启动MySQL并完成设置:

service mysql-server start

mysql_secure_installation --socket=/tmp/mysql.sock

遇到提示选择y,直到设置输入数据库密码,输入新密码无反馈,设置完成后继续选y。

完成后登录MySQL:

mysql -u root -p 新密码

然后逐行输入以下密码进行MySQl配置:

CREATE DATABASE nextcloud;

CREATE USER 'nextcloud_admin'@'localhost' IDENTIFIED BY '改成刚刚设置的密码';

GRANT ALL ON nextcloud.* TO 'nextcloud_admin'@'localhost';

FLUSH PRIVILEGES;

exit

5.5 安装并配置PHP

5.5.1 安装PHP

用以下命令将安装PHP 7.4和Nextcloud运行所需的软件包:

pkg install php74 php74-bz2 php74-ctype php74-curl php74-dom php74-exif php74-fileinfo php74-filter php74-gd php74-iconv php74-intl php74-json php74-ldap php74-mbstring php74-opcache php74-openssl php74-pdo php74-pdo_mysql php74-pecl-APCu php74-pecl-imagick php74-pecl-redis php74-posix php74-session php74-simplexml php74-xml php74-xmlreader php74-xmlwriter php74-xsl php74-zip php74-zlib php74-bcmath php74-gmp php74-pecl-smbclient php74-ftp

设置php-fpm自启动并启动php-fpm服务:

sysrc php_fpm_enable=yes

service php-fpm start

5.5.2 配置php.ini

用命令复制一份php配置并编辑:

cd /usr/local/etc

cp php.ini-production php.ini

用SSH工具打开 /usr/local/etc路径下的php.ini文件并编辑:

取消行开头的“;”注释并设定以下参数值:

cgi.fix_pathinfo=1

date.timezone ="Asia/Shanghai"

opcache.enable=1

opcache.enable_cli=1

opcache.memory_consumption=128

opcache.interned_strings_buffer=8

opcache.max_accelerated_files=10000

opcache.revalidate_freq=1

opcache.save_comments=1

按自己需要设定上传文件限制:

memory_limit = 1024M

post_max_size = 10240M

upload_max_filesize = 10240M

取消配置文件/usr/local/etc/php-fpm.d/www.conf下面的注释:

clear_env = no

重启php-fpm:

service php-fpm restart

5.6 设置Nginx和SSL证书

使用SSH工具在NextCloud监狱目录/usr/local/etc/nginx中新建nextcloud.conf配置文件,并输入以下设置(注意要在路由器中转发内部的443端口):

upstream php-handler {

server 127.0.0.1:9000;

#server unix:/var/run/php/php7.4-fpm.sock;

}

server {

listen 443 ssl http2;

listen [::]:443 ssl http2;

server_name 换成你证书对应的域名;

# Use Mozilla's guidelines for SSL/TLS settings

# https://mozilla.github.io/server-side-tls/ssl-config-generator/

ssl_certificate 换成你证书对应的pem文件路径;

ssl_certificate_key 换成你证书对应的key文件路径;

# HSTS settings

# WARNING: Only add the preload option once you read about

# the consequences in https://hstspreload.org/. This option

# will add the domain to a hardcoded list that is shipped

# in all major browsers and getting removed from this list

# could take several months.

add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;

location = /.well-known/carddav {

return 301 $scheme://$server_name:$server_port/remote.php/dav;

}

location = /.well-known/caldav {

return 301 $scheme://$server_name:$server_port/remote.php/dav;

}

# set max upload size

client_max_body_size 10240M;# 可以改成你所需的值

fastcgi_buffers 64 4K;

# Enable gzip but do not remove ETag headers

gzip on;

gzip_vary on;

gzip_comp_level 4;

gzip_min_length 256;

gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;

gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

# Pagespeed is not supported by Nextcloud, so if your server is built

# with the `ngx_pagespeed` module, uncomment this line to disable it.

#pagespeed off;

# HTTP response headers borrowed from Nextcloud `.htaccess`

add_header Referrer-Policy "no-referrer" always;

add_header X-Content-Type-Options "nosniff" always;

add_header X-Download-Options "noopen" always;

add_header X-Frame-Options "SAMEORIGIN" always;

add_header X-Permitted-Cross-Domain-Policies "none" always;

add_header X-Robots-Tag "none" always;

add_header X-XSS-Protection "1; mode=block" always;

# Remove X-Powered-By, which is an information leak

fastcgi_hide_header X-Powered-By;

# Path to the root of your installation

root /usr/local/www/nextcloud;

# Specify how to handle directories -- specifying `/index.php$request_uri`

# here as the fallback means that Nginx always exhibits the desired behaviour

# when a client requests a path that corresponds to a directory that exists

# on the server. In particular, if that directory contains an index.php file,

# that file is correctly served; if it doesn't, then the request is passed to

# the front-end controller. This consistent behaviour means that we don't need

# to specify custom rules for certain paths (e.g. images and other assets,

# `/updater`, `/ocm-provider`, `/ocs-provider`), and thus

# `try_files $uri $uri/ /index.php$request_uri`

# always provides the desired behaviour.

index index.php index.html /index.php$request_uri;

# Default Cache-Control policy

expires 1m;

# Rule borrowed from `.htaccess` to handle Microsoft DAV clients

location = / {

if ( $http_user_agent ~ ^DavClnt ) {

return 302 /remote.php/webdav/$is_args$args;

}

}

location = /robots.txt {

allow all;

log_not_found off;

access_log off;

}

# Make a regex exception for `/.well-known` so that clients can still

# access it despite the existence of the regex rule

# `location ~ /(.|autotest|...)` which would otherwise handle requests

# for `/.well-known`.

location ^~ /.well-known {

# The following 6 rules are borrowed from `.htaccess`

rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

rewrite ^/.well-known/host-meta /public.php?service=host-meta last;

rewrite ^/.well-known/webfinger /public.php?service=webfinger last;

rewrite ^/.well-known/nodeinfo /public.php?service=nodeinfo last;

location = /.well-known/carddav { return 301 /remote.php/dav/; }

location = /.well-known/caldav { return 301 /remote.php/dav/; }

try_files $uri $uri/ =404;

}

# Rules borrowed from `.htaccess` to hide certain paths from clients

location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) { return 404; }

location ~ ^/(?:.|autotest|occ|issue|indie|db_|console) { return 404; }

# Ensure this block, which passes PHP files to the PHP process, is above the blocks

# which handle static assets (as seen below). If this block is not declared first,

# then Nginx will encounter an infinite rewriting loop when it prepends `/index.php`

# to the URI, resulting in a HTTP 500 error response.

location ~ .php(?:$|/) {

fastcgi_split_path_info ^(.+?.php)(/.*)$;

set $path_info $fastcgi_path_info;

try_files $fastcgi_script_name =404;

include fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param PATH_INFO $path_info;

fastcgi_param HTTPS on;

fastcgi_param modHeadersAvailable true; # Avoid sending the security headers twice

fastcgi_param front_controller_active true; # Enable pretty urls

fastcgi_pass php-handler;

fastcgi_intercept_errors on;

fastcgi_request_buffering off;

}

location ~ .(?:css|js|svg|gif)$ {

try_files $uri /index.php$request_uri;

expires 6M; # Cache-Control policy borrowed from `.htaccess`

access_log off; # Optional: Don't log access to assets

}

location ~ .woff2?$ {

try_files $uri /index.php$request_uri;

expires 7d; # Cache-Control policy borrowed from `.htaccess`

access_log off; # Optional: Don't log access to assets

}

location / {

try_files $uri $uri/ /index.php$request_uri;

}

}

再打开相同目录下的nginx.conf文件,如下图进行编辑:

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第44张图片

保存并重启Nginx:

service nginx restart

如果输入地址后,网络界面如图所示:

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第45张图片

打开/usr/local/www/nextcloud/config路径下的config.php文件,对trusted_domains进行如下设置:

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第46张图片

成功安装后,输入地址之后网页会显示类似界面:

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第47张图片

成功安装并完成初始化设置之后的登录界面

初始化设置主要是创建管理员账号,设置数据目录等:

数据目录:

/mnt/data

配备数据库:

nextcloud_admin

之前数据库设置的密码

nextcloud

localhost:/tmp/mysql.sock

5.7 配置缓存REDIS

将REDIS设置为本地监听:

nano /usr/local/etc/redis.conf

将port改为0

取消“#”注释并修改对应值:

unixsocket /var/run/redis/redis.sock

unixsocketperm 770

重启redis:

service redis restart

5.8 确认Redis配置正确

运行命令:

ls -al /var/run/redis

若出现如下提示则配置正确,否则需要重新确认上面的配置:

srwxrwx--- 1 redis redis 0 MMM D HH:MM redis.sock

接着将redis应用到NextCloud上面:

su -m www -c 'php /usr/local/www/nextcloud/occ config:system:set redis host --value="/var/run/redis/redis.sock"'

su -m www -c 'php /usr/local/www/nextcloud/occ config:system:set redis port --value=0 --type=integer'

su -m www -c 'php /usr/local/www/nextcloud/occ config:system:set memcache.local --value="OCMemcacheAPCu"'

su -m www -c 'php /usr/local/www/nextcloud/occ config:system:set memcache.locking --value="OCMemcacheRedis"'

将www用户添加到redis组以允许其访问redis:

pw usermod www -G redis

重启Nginx:

service nginx restart

5.8 优化NextCloud

5.8.1 配置Cron文件

先将环境编辑器更改为nano,然后配置“ www”用户的crontab:

setenv EDITOR nano

crontab -u www -e

写入以下内容来运行nextcloud cron脚本:

# minute (0-59),

# | hour (0-23),

# | | day of the month (1-31),

# | | | month of the year (1-12),

# | | | | day of the week (0-6 with 0=Sunday).

# | | | | | commands

*/15 * * * * /usr/local/bin/php -f /usr/local/www/nextcloud/cron.php

在NextCloud中点击头像【设置】-【基本设置】-【后台任务】选择Cron作为后台任务:

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第48张图片

5.8.2 启用FreeBSD的系统安全模块

FreeBSD自带有以下的安全选项控制:

1.隐藏以其他用户身份运行的进程

2.隐藏以其他组身份运行的进程

3.禁止为非特权用户读取内核消息缓冲区

4.为非特权用户禁用过程调试功能

5.随机化新创建进程的PID

6.在可扩展段之前插入堆栈保护页面

7.启动时清理/ tmp文件系统

8.禁用打开syslogd网络套接字(禁用远程日志记录)

9.禁用SendMail服务

打开内核参数配置文件:nano /etc/sysctl.conf,输入以下命令,这些命令将启用选项1-6:

security.bsd.see_other_uids=0

security.bsd.see_other_gids=0

security.bsd.unprivileged_read_msgbuf=0

security.bsd.unprivileged_proc_debug=0

kern.randompid=$(jot -r 1 9999)

security.bsd.stack_guard_page=1

要启用选项7-9,请运行以下命令:

sysrc clear_tmp_enable=YES

sysrc sendmail_enable="NONE"

sysrc sendmail_submit_enable="NO"

sysrc sendmail_outbound_enable="NO"

sysrc sendmail_msp_queue_enable="NO"

sysrc syslogd_flags="-c -ss"

5.9 设置NextCloud默认语言和地区为简体中文

输入以下命令:

su -m www -c 'php /usr/local/www/nextcloud/occ config:system:set default_language --value="zh_CN"'

5.10 设置服务器邮箱

主要用来在管理员不方便的情况下,让子用户自己重置密码等。这里我选择的是谷歌的服务器,服务器地址和端口如下图填写:

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第49张图片

来自地址和证书填写自己的邮箱地址,密码填写邮箱登录密码或者应用专用密码(【账号】-【安全性】-【登录谷歌】-【应用专用密码】)。除了谷歌邮箱以外,qq邮箱、微软邮箱也支持SMTP功能,具体可以查看各邮箱的SMTP功能说明。

总结

至此,装载有NextCloud的FreeNAS服务器就搭建完毕了,手动安装比较繁琐,但是插件安装失败我也没得选

 起初并没有搭建NextCloud的想法,只是想做一个简单的家庭云盘,但是在使用WebDAV和sftp的时候,觉得需要进行文件分享的操作,就尝试着自己搭建NextCloud云盘,没想到又是一个坑 但好歹是目前能填的最后一个坑了,前面从购买域名开始,走一步踩一个坑,元旦这几天都是在踩坑填坑中度过。至于为什么选择要踩那么多坑的FreeNAS而不是其他系统(对我这个小白来说,反正选啥都那么多坑,估计哪个都差不多 ),FreeNAS吸引我入坑的最大原因就是它作为一款开源软件(说白了系统不要钱 ),并不需要在系统上支出额外的开销。虽然一步步搭建起来有点繁琐,但是从开始走下来其实也蛮有成就感的,无论是购买域名、设置DDNS还是搭建NextCloud等,都是从零开始学起 当然短短几天并不能够说掌握了这一套流程所需要的知识,只能说知道要这么做,至于为什么要这么做,那又需要进一步去学习了解了。这篇文章之所以会发布,一方面是用来做搭建NAS记录,防止以后忘记了操作不知道从哪里着手;另一方面是分享搭建NAS的思路以及大佬们的搭建方案,在小白力所能及的情况下帮助其他小白。在这里再次感谢分享搭建教程的大佬们,也感谢各位读者能抽空观看这篇文章。

从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_第50张图片

我的元旦.jpg

参考资料

FreeNas 11.3 安装及常用系统设置 | NASGEEK

从零开始在 FreeNAS 的 Jail 上安装 NextCloud 并配置 Nginx 作为网页服务器而且 设置SSL证书 使用 https 访问 以及 oc_filecache 修复方法_Reven_L的博客-CSDN博客

FreeBSD安装使用

ssh/sftp配置和权限设置

 原文链接:从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_什么值得买

你可能感兴趣的:(linux,linux)