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

从入门到入坟搭建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 的 Jail 上安装 NextCloud 并配置 Nginx 作为网页服务器而且 设置SSL证书 使用 https 访问 以及 oc_filecache 修复方法_Reven_L的博客-CSDN博客

    FreeBSD安装使用

    ssh/sftp配置和权限设置

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

    相关推荐

    相关文章