从入门到入坟搭建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的校验文件下载)
-
入坟目录
-
硬件组装
-
购买域名
-
申请SSL证书
-
设置DDNS
-
安装系统
-
配置FreeNAS
-
配置NextCloud
-
硬件组装
上面的硬件一大堆,其实就主板跟机箱是新买的,其余的要不是旧笔记本里面拆的,要不就是旧的itx主机退烧后一直闲置没用的
所以才有了SF600来当电源 为了利用好闲置的配置,机箱在淘宝上逛了一圈,找到了invasion银飞雄 X-1这一款。我看重的是它支持较多硬盘,而且支持atx电源,至于侧透什么的就无所谓了。
invasion银飞雄 X-1硬件布局
因为是同城发货,第一天下午下单,第二天早上就到货了。外包装就一简单的牛皮纸盒子,开箱之后万万没想到硬盘架这么脆弱还没有缓冲保护措施,在快递路上就被撞歪了
对强迫症极其不友好的硬盘架
这个机箱并没有配备sfx转atx电源架,幸好闲置的机箱有进行配备,就顺手拿来装上了。这个机箱如果极限一点,在底部风扇位置加装硬盘架,装十块3.5机械盘应该没问题
不过J3455自带4个sata接口,要加更多硬盘需要pcie转sata的转接卡。目前只是用来尝试搭建FreeNAS,以后再加装硬盘,所以硬盘位看着挺孤零零的
-
系统搭建
废话不多说直接开搞
一、购买域名
在万网上面购买域名用来访问家庭里面的网络设备,通过固定的域名解决公网ip不固定的问题。价格从几块钱起步,个人自用目前推荐选择top域名,首年9块,续费26块。
top域名价格
二、申请SSL证书
由于国内80端口在家庭宽带是不能使用的,因此华硕路由器自带的ddns下面的证书签发不能完成认证,还得要自己去申请SSL证书。我申请的是Let's Encrypt证书,刚开始的时候不会操作,磕磕碰碰之后回过头看其实还挺简单的。按照下图进行输入:
点击【申请证书】之后选择DNS验证,打开万网域名控制台【域名列表】-【解析】进入解析设置,添加解析记录,A记录是域名跳转ip,记录值填写当前获取到的公网ip,TXT记录是用于SSL证书签发时的域名验证,由于勾选泛域名和根域,要添加两条TXT记录。
设置好之后回到Let's Encrypt进行验证,一般来说验证几分钟就能搞定。
三、设置DDNS
证书申请成功后,回到万网域名控制台,鼠标移动到右上角头像,点击【AccessKey管理】-【创建AccessKey】。
把获取的AccessKey ID和Secret填写到插件上面,域名处填写所注册的域名,填写完毕后点击【提交】。这些步骤都完成以后,就能够在外面访问家庭网络了,接下来就是部署FreeNAS和安装NextCloud。
四、安装系统
直接在Windows电脑上面插入引导盘,在引导类型选择里面选择FreeNAS.iso文件,然后点击开始。
Rufus安装
系统引导完成后,把两个u盘都接入硬件,在BIOS设置好u盘加载顺序之后进入到系统安装界面:
回车进入第一项。
回车进入第一项。
选择安装系统的硬盘,按空格来选中硬盘。(因为是虚拟机进行的安装,所以只显示了一个硬盘,实际安装的时候要注意有没有正确选择硬盘)
提示安装会抹除硬盘数据。
设置root用户密码。
引导模式我选择的UEFI。
成功安装提示。
选择第四项关闭系统,拔掉引导u盘后重新开机。
五、配置FreeNAS
重启后等待配置完成进入到如下界面,输入ip地址进入管理界面,现在就可以开始进行配置FreeNAS并安装NextCloud了。
FreeNAS管理界面
刚打开管理界面的时候默认为英文,需要点击左侧菜单栏【System】-【General】-【Localization】-【Simplified Chinese】来进行管理界面语言修改。语言修改完毕后,其他按照下图进行设置,时区设置为东八区即可:
注:如果不需要外网通过https访问FreeNAS管理界面,以下步骤可跳过:
端口记得在路由器里面设置端口转发,本地ip填写FreeNAS的本地ip地址,外部端口填写非80、443端口即可,如果端口发生冲突则进行修改。
1. 设置FreeNAS二级域名
主要用于在外网访问FreeNAS管理界面,在左侧菜单栏点击【网络】-【全局配置】,按下图进行配置,完成后通过外网访问FreeNAS管理界面的格式为"主机名.域名:端口":
2. 添加证书,实现https访问
在设置完毕FreeNAS二级域名之后,就能够通过外网访问FreeNAS了,不过使用的链接协议是不安全的http,考虑到安全性,我们接下来要进行SSL证书设置。在左侧菜单栏点击【系统】-【证书】,点击右上角【添加】。
名称自定义,证书栏填写Let's Encyrpt下发的fullchain.crt文本内容,私钥填写private.pem文本内容,两者都可以通过记事本打开,完成后点击【提交】。
回到【系统】-【常规】,在GUI SSL证书中选择刚刚添加的证书,完成后就能够在外网通过https协议访问FreeNAS了。
至此,通过外网https访问FreeNAS管理界面的设置就完成了。
六、配置NextCloud
这部分基本是对照从零开始在FreeNAS的Jail上安装NextCloud这篇博客进行的,当时快放弃的时候刚好搜到这篇文章,抱着试试看的心态对着操作,最终成功安装好了NextCloud,在此对这位大佬表示感谢
NextCloud在插件里面是可以直接安装然后进行配置的,但是不知道为什么一直安装不上,只能手动安装,可以说搞定一个坑又遇到另一个坑
1. 添加数据池
添加池用于数据存储,在左侧菜单栏点击【存储】-【池】,再点击右上角【添加】。
如果设置缓存盘,则点击【添加VDEV】,在左边的硬盘序列中勾选硬盘到右边相应位置,设置完成后点击【创建】。
2. 创建数据集
在新建的存储池里面,我们需要新建数个数据集:NextCloudDataBase,nextcloud。再到nextcloud数据集里面新建三个数据集config、themes和db。首先在左侧菜单栏点击【存储】-【池】,点击池右侧三个点的标准添加新数据集NextCloudDataBase,atime值设置为off。
和新建数据集NextCloudDataBase过程相同,新建nextcloud数据集和它的子集,区别在于atime值设置为on。新建完成后,池目录如下图所示:
3. 创建用户并设置权限
在左侧菜单栏点击【账户】-【用户】,再点击右上角【添加】,按下图进行配置来创建mysql用户:
回到池目录进行权限设置,将db数据集所有者的用户和群组都设置为mysql,并且记得勾选Apply User和Apply Group,然后点击【保存】。用相同步骤,将数据集NextCloudDataBase、config和themes的权限所有者用户和群组都设置为www。
4. 创建Jail并进行配置
4.1 添加监狱
点击左侧菜单栏【监狱】-右上角【添加】-【高级监狱创建】,【基本属性】如下图进行配置,【网络属性】resolver修改为none:
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身份登录】。
用记事本打开/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文件,如下图进行编辑:
保存并重启Nginx:
service nginx restart
如果输入地址后,网络界面如图所示:
打开/usr/local/www/nextcloud/config路径下的config.php文件,对trusted_domains进行如下设置:
成功安装后,输入地址之后网页会显示类似界面:
成功安装并完成初始化设置之后的登录界面
初始化设置主要是创建管理员账号,设置数据目录等:
数据目录:
/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作为后台任务:
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 设置服务器邮箱
主要用来在管理员不方便的情况下,让子用户自己重置密码等。这里我选择的是谷歌的服务器,服务器地址和端口如下图填写:
来自地址和证书填写自己的邮箱地址,密码填写邮箱登录密码或者应用专用密码(【账号】-【安全性】-【登录谷歌】-【应用专用密码】)。除了谷歌邮箱以外,qq邮箱、微软邮箱也支持SMTP功能,具体可以查看各邮箱的SMTP功能说明。
总结
至此,装载有NextCloud的FreeNAS服务器就搭建完毕了,手动安装比较繁琐,但是插件安装失败我也没得选
起初并没有搭建NextCloud的想法,只是想做一个简单的家庭云盘,但是在使用WebDAV和sftp的时候,觉得需要进行文件分享的操作,就尝试着自己搭建NextCloud云盘,没想到又是一个坑 但好歹是目前能填的最后一个坑了,前面从购买域名开始,走一步踩一个坑,元旦这几天都是在踩坑填坑中度过。至于为什么选择要踩那么多坑的FreeNAS而不是其他系统(对我这个小白来说,反正选啥都那么多坑,估计哪个都差不多 ),FreeNAS吸引我入坑的最大原因就是它作为一款开源软件(说白了系统不要钱 ),并不需要在系统上支出额外的开销。虽然一步步搭建起来有点繁琐,但是从开始走下来其实也蛮有成就感的,无论是购买域名、设置DDNS还是搭建NextCloud等,都是从零开始学起 当然短短几天并不能够说掌握了这一套流程所需要的知识,只能说知道要这么做,至于为什么要这么做,那又需要进一步去学习了解了。这篇文章之所以会发布,一方面是用来做搭建NAS记录,防止以后忘记了操作不知道从哪里着手;另一方面是分享搭建NAS的思路以及大佬们的搭建方案,在小白力所能及的情况下帮助其他小白。在这里再次感谢分享搭建教程的大佬们,也感谢各位读者能抽空观看这篇文章。
我的元旦.jpg
参考资料
FreeNas 11.3 安装及常用系统设置 | NASGEEK
原文链接:从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储_什么值得买