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

2021-01-06 23:15:38 181点赞 951收藏 104评论

创作立场声明:本文所有商品皆自费购入,第一次发表文章,若有不当之处愿意接受大家的批评指点。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只得作罢从入门到入坟搭建FreeNAS服务器并配置NextCloud毕业之后,家里由长城宽带更换为电信宽带从入门到入坟搭建FreeNAS服务器并配置NextCloud (你知道我这些年是怎么过的吗从入门到入坟搭建FreeNAS服务器并配置NextCloud ),拨打10000号也顺利地拿到了公网ip,之前更换的华硕RT-AC66U B1路由器刷了梅林之后插件支持阿里ddns(自带的DDNS如果不考虑设置SSL证书的话也是可以的,ddnspod插件似乎有问题并不能使用从入门到入坟搭建FreeNAS服务器并配置NextCloud ),一切的必要前提都准备好之后,下一步就是开始动手搭建NAS服务器了(入坟的开始从入门到入坟搭建FreeNAS服务器并配置NextCloud )。


  • 软硬件配置

为了方便起见,先把要用到的软硬件以及网站列出来从入门到入坟搭建FreeNAS服务器并配置NextCloud

  • 公网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主机退烧后一直闲置没用的从入门到入坟搭建FreeNAS服务器并配置NextCloud 所以才有了SF600来当电源从入门到入坟搭建FreeNAS服务器并配置NextCloud 为了利用好闲置的配置,机箱在淘宝上逛了一圈,找到了invasion银飞雄 X-1这一款。我看重的是它支持较多硬盘,而且支持atx电源,至于侧透什么的就无所谓了。

invasion银飞雄 X-1硬件布局invasion银飞雄 X-1硬件布局

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

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

这个机箱并没有配备sfx转atx电源架,幸好闲置的机箱有进行配备,就顺手拿来装上了。这个机箱如果极限一点,在底部风扇位置加装硬盘架,装十块3.5机械盘应该没问题从入门到入坟搭建FreeNAS服务器并配置NextCloud 不过J3455自带4个sata接口,要加更多硬盘需要pcie转sata的转接卡。目前只是用来尝试搭建FreeNAS,以后再加装硬盘,所以硬盘位看着挺孤零零的从入门到入坟搭建FreeNAS服务器并配置NextCloud


  • 系统搭建

废话不多说直接开搞从入门到入坟搭建FreeNAS服务器并配置NextCloud

一、购买域名

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

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

top域名价格top域名价格

二、申请SSL证书

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

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

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

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

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

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

三、设置DDNS

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

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

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

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

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

四、安装系统

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

Rufus安装Rufus安装

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

回车进入第一项。

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

回车进入第一项。

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

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

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

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

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

设置root用户密码。

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

引导模式我选择的UEFI。

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

成功安装提示。

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

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

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

五、配置FreeNAS

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

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

FreeNAS管理界面FreeNAS管理界面

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

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

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


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

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


1. 设置FreeNAS二级域名

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

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

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

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

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

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

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

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

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

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

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

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


六、配置NextCloud

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

NextCloud在插件里面是可以直接安装然后进行配置的,但是不知道为什么一直安装不上,只能手动安装,可以说搞定一个坑又遇到另一个坑从入门到入坟搭建FreeNAS服务器并配置NextCloud

1. 添加数据池

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

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

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

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

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


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

2. 创建数据集

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

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

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

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

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

3. 创建用户并设置权限

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

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

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

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

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

4. 创建Jail并进行配置

4.1 添加监狱

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

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

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

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

用记事本打开/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

保存并重启Nginx:

service nginx restart

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

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

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

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

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

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

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

数据目录:

/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


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

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


总结

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

我的元旦.jpg我的元旦.jpg


参考资料

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

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

FreeBSD安装使用

ssh/sftp配置和权限设置


展开 收起

ASUS 华硕 AS6702T 4盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

ASUS 华硕 AS6702T 4盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

4299元起

ASUS 华硕 FS6706T 穿云箭6位盘位NAS网络存储 无盘版

ASUS 华硕 FS6706T 穿云箭6位盘位NAS网络存储 无盘版

3999元起

SEAGATE 希捷 极空间私有云Z4Pro 8G 16G版四盘位Nas网络存储家庭个人云备份

SEAGATE 希捷 极空间私有云Z4Pro 8G 16G版四盘位Nas网络存储家庭个人云备份

2599元起

ASUS 华硕 AS6702T 双盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

ASUS 华硕 AS6702T 双盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

2999元起

ASUS 华硕 穿云箭 12盘位NAS存储(赛扬N5105、4GB)

ASUS 华硕 穿云箭 12盘位NAS存储(赛扬N5105、4GB)

6999元起

ASUS 华硕 AS6602T 2盘位NAS(J4125、4GB)

ASUS 华硕 AS6602T 2盘位NAS(J4125、4GB)

2659.05元起

ASUS 华硕 AS6604T NAS 四盘位 办公网络存储

ASUS 华硕 AS6604T NAS 四盘位 办公网络存储

3499元起

ASUS 华硕 AS6702T NAS网络存储 2盘位四核心

ASUS 华硕 AS6702T NAS网络存储 2盘位四核心

暂无报价

ASUS 华硕 AS6212RD 12盘位NAS (Intel Celeron、4GB)

ASUS 华硕 AS6212RD 12盘位NAS (Intel Celeron、4GB)

20000元起

SEAGATE 希捷 STCT300 2盘位 NAS网络存储 (无内置硬盘)

SEAGATE 希捷 STCT300 2盘位 NAS网络存储 (无内置硬盘)

暂无报价

华硕穿云箭 全M.2方案云存储NAS家庭家用储存服务器个人私有云盘M.2盘位网络存储器局域网文件共享硬盘

华硕穿云箭 全M.2方案云存储NAS家庭家用储存服务器个人私有云盘M.2盘位网络存储器局域网文件共享硬盘

3999元起

华硕穿云箭 全M.2方案云存储NAS家庭家用储存服务器个人私有云盘M.2盘位网络存储器局域网文件共享硬盘

华硕穿云箭 全M.2方案云存储NAS家庭家用储存服务器个人私有云盘M.2盘位网络存储器局域网文件共享硬盘

暂无报价

Seagate希捷银河网络存储raid磁盘阵列NAS服务器大容量氦气企业级硬盘8T/10T/12T/14T/16TB/18TB

Seagate希捷银河网络存储raid磁盘阵列NAS服务器大容量氦气企业级硬盘8T/10T/12T/14T/16TB/18TB

1249元起

希捷酷狼QNAP威联通nas网络存储器TS-462C-4G内存可拓展家用4盘位

希捷酷狼QNAP威联通nas网络存储器TS-462C-4G内存可拓展家用4盘位

1900元起

希捷酷狼 极空间私有云Q2服务器家庭办公个人云储存wifi连接nas

希捷酷狼 极空间私有云Q2服务器家庭办公个人云储存wifi连接nas

2099元起

12TB硬盘 Seagate/希捷 酷狼PRO 12TB

12TB硬盘 Seagate/希捷 酷狼PRO 12TB

暂无报价
104评论

  • 精彩
  • 最新
  • 置顶 建议作者修改下推荐的SSL证书申请网站,这个“来此加密”和正牌“Let's Encrypt”不是一家,而且来历不明。虽然申请证书能用,但是恐怕不安全,网上有爆坑的 去看看

    校验提示文案

    提交
    行,过几天我修改一下

    校验提示文案

    提交
    收起所有回复
  • 好了,没公网ip。全剧终 [皱眉]

    校验提示文案

    提交
    如果不在意花生壳ddns的1M网速小水管,其实也可以试试 [邪恶]

    校验提示文案

    提交
    花生壳每月只有1g的流量,啥也干不成

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • 可以可以,就是太麻烦了,各种配置 [皱眉]

    校验提示文案

    提交
    其实熟悉之后,搭建NextCloud之前的操作不难。如果在FreeNAS插件里面能成功安装NextCloud的话,也是能够很快完成的 [傻笑]

    校验提示文案

    提交
    收起所有回复
  • 为什么不直接用windows?

    校验提示文案

    提交
    主要考虑到了这几个因素:1.FreeNAS可以用u盘直接装系统,省一个sata口,而且更换系统盘的时候数据也能够保留;2.FreeNAS刚开始虽然十分简洁,可以定制自己需要的功能;3.想尝试一下操作使用Linux系统,学习新的东西 [高兴]

    校验提示文案

    提交
    freenas是基于freebsd,不是linux

    校验提示文案

    提交
    还有5条回复
    收起所有回复
  • 这个内存跑的下来吗?之前看资料都说zfs狂吃内存,所以就放弃了

    校验提示文案

    提交
    查过网上的资料,FreeNAS一般1t硬盘对应1g内存,理论上来说j3455最大可以支持16tb的硬盘总量

    校验提示文案

    提交
    那看来我128t的存储用128g内存刚好,我还以为浪费了呢

    校验提示文案

    提交
    收起所有回复
  • 哪有这么麻烦,truenas的官方插件库自带nextcloud...需要折腾的就是ddns 端口转发和ssl,sql那些都不用

    校验提示文案

    提交
    参考资料里面有用插件安装的,但是不知道为什么装不上 [倒地]

    校验提示文案

    提交
    因为ixsystem服务器在国外

    校验提示文案

    提交
    还有2条回复
    收起所有回复
  • FreeBSD可玩性太差,没原生docker且不支持硬件直通,只适合做存储系统
    unraid加pve加freenas路过 [邪恶]

    校验提示文案

    提交
    那我改天也尝试一下unraid [得意]

    校验提示文案

    提交
    docker的话也是一种虚拟机,轻系统就jail,大型虚拟机就bhyve,技术新,就是配置麻烦点。

    校验提示文案

    提交
    还有7条回复
    收起所有回复
  • 刷了梅林以后,自带的ddns也是有ssl的

    校验提示文案

    提交
    梅林自带的ssl我这里认证不了,一直提示正在注册

    校验提示文案

    提交
    收起所有回复
  • 功耗多少?

    校验提示文案

    提交
    手头没有功耗仪测试 [喜极而泣] chh有一篇j3455开箱的功耗测试可以参考一下:待机17w,满载31.5w

    校验提示文案

    提交
    收起所有回复
  • 老哥,这机箱能不能多拍点照片发一下啊?想入手,这个机箱做工怎么样

    校验提示文案

    提交
    我晚些时候补充几张吧。材质的话钢化玻璃3mm,钢板0.8-0.9mm左右,由于只是简单用卷尺测量,所以可能会跟实际有一点出入。

    校验提示文案

    提交
    在我新发布的另一篇文章发了

    校验提示文案

    提交
    收起所有回复
  • 请问freenas 可以用公网ipv6地址直接外网访问吗?

    校验提示文案

    提交
    支持ipv6的,不过还没试过

    校验提示文案

    提交
    [喜极而泣] 我试了,可以外网访问管理界面,不知带能不能访问里面的内容。

    校验提示文案

    提交
    还有1条回复
    收起所有回复
  • 建立条带的池,坏一个硬盘是丢失所有数据么,还是坏哪个丢哪个?

    校验提示文案

    提交
    如果没记错的话,条带比较类似raid0,一个条带坏了会丢失所有数据,相对来说raid z1和z2安全一点

    校验提示文案

    提交
    收起所有回复
  • truenas的zfs不是要用ecc嘛,不用ecc不会有啥问题吧

    校验提示文案

    提交
    ecc是推荐使用,个人的话不用ecc也不会有什么问题。

    校验提示文案

    提交
    收起所有回复
  • 大佬,TrueNAS系列教程不要停(⊙o⊙)哇。跟着你入的坑,可要负责到底

    校验提示文案

    提交
    过几天我搬运个truenas安装aqc107万兆网卡驱动的教程吧,主要是搭了之后能用就懒得捣鼓了 [狂汗]

    校验提示文案

    提交
    [喜极而泣] [喜极而泣] 大佬方便留个联系方式吗?我想请你喝咖啡,帮我配置一下呗

    校验提示文案

    提交
    收起所有回复
  • 你好,请教一下:5.6 设置Nginx和SSL证书里面设置ssl_certificate 换成你证书对应的pem文件路径;ssl_certificate_key 换成你证书对应的key文件路径;这两个地方可以具体描述一下么?我不是很明白。谢谢

    校验提示文案

    提交
    就是pem和key这两个文件在监狱里面的位置

    校验提示文案

    提交
    收起所有回复
  • 作为第100楼,我想说,我刚刚入了组TureNas的坑,u、板子、内存和硬盘都准备好了。前面的域名啊,ddns我都已经填平了,看到后面的你手动搭建NextCloud的那些个代码和命令,我有点崩了。。。。。。

    校验提示文案

    提交
    如果能挂代理的话,其实可以直接一键安装nextcloud [傻笑]

    校验提示文案

    提交
    你好,很少看到这个机箱,请问做工怎么样?硬盘放上去稳吗?

    校验提示文案

    提交
    收起所有回复
  • 看到这复杂的方法,我觉得自己快要被劝退了……

    校验提示文案

    提交
  • 阿里云国际站的.cyou域名新用户首年0.01刀,十年8刀左右。

    校验提示文案

    提交
  • 大机箱居然用itx,多浪费

    校验提示文案

    提交
  • zfs…真得慎重啊

    校验提示文案

    提交
    这怎么说?

    校验提示文案

    提交
    性能问题,出问题后的恢复和重建,还有zfs做调整什么的,生产环境用过一次,用了挺久才稳定,还怕出问题

    校验提示文案

    提交
    还有1条回复
    收起所有回复
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
951
扫一下,分享更方便,购买更轻松