freenas:从入门到入坟搭建FreeNAS服务器并配置NextCloud_NAS存储 2024-04-22 13:49:34 0 0 从入门到入坟搭建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存储_什么值得买 收藏(0)