FreeNas 11.3插件教程之一:安装nextcloud并用https访问
本文开始,将介绍一下freenas11.3中几个常用插件的安装配置。今天先介绍一下nextcloud插件的安装、配置https,以及优化。
一、安装
打开freenas的插件页面,选择nextcloud:

点击安装,出现下面的界面:

jail名称自己随便填一个,网络选择“DHCP”,然后点“保存”,系统会自动进行安装。安装完成后,在插件页面就会看到安装好的nextcloud插件,如下图所示:

安装说明里面有数据库和nextcloud的管理账号和密码。点击“管理”按钮打开nextcloud页面,如果能够正常打开,输入账号密码就行了。不过我的出现了如下提示:

提示说需要编辑“config/config.php”这个文件,这就需要进入到插件里面。可是在插件这个页面并没有什么可以操作的入口。其实,插件本身就是一个jail,安装完插件之后,我们可以在jails菜单里面找到它。

在这里,可以点击“命令行”菜单对插件进行操作。大家可以参考《使用JAIL自建服务教程之一:JAIL创建和优化》这篇教程,开启nextcloud插件的ssh访问,之后就可以用putty等软件对插件进行操作了。
现在我们对config.php文件进行修改:
nano /usr/local/www/nextcloud/config/config.php

将“trusted_domains”里的地址改成你的插件IP地址,保存。再试试,发现可以打开nextcloud登录页面了。

然后输入“安装说明”里的账号密码就可以登录使用了。
二、修改数据目录
我的插件是放在一个SSD存储池上,容量只有240G,也就是说此nextcloud最多也只能存储240G数据,这明显不能够满足要求。因此,就需要把数据目录映射到freenas存储池里。
先在nextcloud插件中建立一个目标目录:
mkdir /mnt/ncdata
然后在“插件”页面中停止nextcloud,点击“挂载点”按钮,出现如下页面

再点击右上角“动作”–“添加”,如下图

“源”选择freenas主机中的目录,“目标”选择插件中新建立的目录“/mnt/ncdata”,保存。
然后转到插件页面,打开nextcloud插件。使用ssh连接到nextcloud,先停止nginx服务,再将原来数据目录内的文件复制到新的数据目录:
service nginx stop chown www:www /mnt/ncdata cp -rfp /usr/local/www/nextcloud/data/. /mnt/ncdata
然后修改nextcloud的配置文件:
nano /usr/local/www/nextcloud/config/config.php

将“datadirectory”这一项改成“/mnt/ncdata”,保存退出。
启动nginx:
service nginx start
然后再打开nextcloud就可以了。
到现在为止,我们就可以正常使用nextcloud了。如果你的nextcloud仅应用于局域网内,或者你对数据传输安全不那么重视的话,那么接下来的配置ssl就不需要了。
三、配置SSL
1、用WinSCP等工具将证书文件到“/usr/local/etc/ssl/”目录下,我的证书是在“ssl for free”网站上申请的,如下图

2、编辑配置文件。
先将原先的nginx配置文件复制一份,并将原来的文件改名:
cp /usr/local/etc/nginx/conf.d/nextcloud.conf /usr/local/etc/nginx/conf.d/nextcloud-ssl.conf mv /usr/local/etc/nginx/conf.d/nextcloud.conf /usr/local/etc/nginx/conf.d/nextcloud.conf.bak
然后修改nextcloud-ssl.conf文件,因为文件比较长,建议使用winscp等工具进行修改。找到左边以下几个地方,改成右边的样子。其中“server_name”、“ssl_certificate”、“ssl_certificate_key”这几个地方要按照你自己的实际情况修改。


然后重启nginx服务:
service nginx restart
现在我在浏览器中输入https://域名,就可以使用ssl传输了,证书也显示正常。这里提一下,你还需要按第一步中的方法将你的域名添加到nextcloud的配置文件config.php中的“trusted_domains”里才可以正常访问。

四、优化
现在我们在nextcloud中打开“设置”–“概览”,会看到一些安全与设置警告

下面我们一项一项来消除它们。
1.解决getenv(“PATH”)为空的问题
用winscp打开“/usr/local/etc/php-fpm.d/nextcloud.conf”这个文件,在最后加上一句:
env[PATH] = /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
然后重启php-fpm:
service php-fpm restart
刷新页面,发现第一个错误已经没有了。
2.解决“数据库丢失了一些索引”的问题
先安装sudo工具:
pkg install sudo
再运行修复命令:
sudo -u www php /usr/local/www/nextcloud/occ db:add-missing-indices
3.解决“数据库中的一些列由于进行长整型转换而缺失”的问题
运行修复命令:
sudo -u www php /usr/local/www/nextcloud/occ db:convert-filecache-bigint
提示“Continue with the conversion (y/n)? [n]”时,输入“y”确定。
4.解决“该实例缺失了一些推荐的 PHP 模块”的问题
提示缺少“imagick”模块,我们就安装这个模块:
pkg install php74-pecl-imagick
这里需要注意一下,安装的模块版本要与你php版本一致。可以用“php -v”查看一下你的php版本。
重启php-fpm
service php-fpm restart
现在刷新一下管理页面,发现所有检查已通过。

声明:本文为本站【NASGEEK】原创文章,未经许可不得转载!
博主好 看到您的教程 对于我这种英文盲来说 真的恨感谢!!
若博主有空的话 看看能否 针对 FreeNAS-11.3-U3.2 版本 出个 安装 Resilio-Sync 的教程 现在的新版本插件里 已经不包含Resilio-Sync了.我到官网看到 有针对fFreeBSD 系统的程序下载 不知道 能否实现自定义安装到Jails里.恳请博主有空的时候 发布一篇教程.
最近有空我写一篇
已经发布了一篇安装resilio的教程,https://www.nasgeek.cn/?p=686
你好博主,
关于优化,我这边提示缺少 bcmatch 和 gmp 组件在命令行下如何安装
应该是bcmath吧,你可以使用命令pkg install php74-bcmath,pkg install php74-gmp(根据你的php版本)。安装完别忘了重启一下web服务。
其实需要安装什么组件,你可以使用pkg search XXX,查找一下这个包的名称是什么
好的谢谢
博主大大,我在花生壳上申请了域名并做了ddns 。你这个下文提到的ssl证书 ,我可以效仿吗?还是只能在花生壳买它这个ssl证书?因为域名和ddns都在它那边做的这个会有绑定么?
你的证书是要和你的域名一致才行。如果你是用花生壳的域名,那么你就要用它的证书。如果你解析到自己的域名,那就可以用自己的证书。
花生壳内网穿透限速太狠了,我改阿里DDNS了。 阿里上面有免费ssl 我申请了一个。下载证书的时候服务类型选Nginx 吧 下载完成后 证书只有。xxx.key 和 xxx.pem 这个怎么搞。
看你上面.crt 有两个文件
两个就行了,pem文件是“ssl_certificate”、key文件是“ssl_certificate_key”。
我的域名是 lab.e0575.cloud
证书名称是 4122790_lab.e0575.cloud.key和pem
———————————-
server {
listen 443 ssl http2;
server_name lab.e0575.cloud;
ssl_certificate /usr/local/etc/ssl/e0575.cloud/4122790_lab.e0575.cloud.pem;
ssl_certificate_key /usr/local/etc/ssl/e0575.cloud/4122790_lab.e0575.cloud.key
;
——–这样没错吧
root@nextcloud:~ # service nginx restart
Performing sanity check on nginx configuration:
nginx: [emerg] cannot load certificate “/usr/local/etc/ssl/e0575.cloud/4122790_lab.e0575.cloud.pem”: BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen(‘/usr/local/etc/ssl/e0575.cloud/4122790_lab.e0575.cloud.pem’,’r’) error:2006D080:BIO routines:BIO_new_file:no such file)
nginx: configuration file /usr/local/etc/nginx/nginx.conf test failed
下面那个目录错了,已经好了
用ddns 域名访问 怎么比花生壳给的100K 还慢。网页显示根本显示不全那状态。我是100M电信独立给nextcloud用的。博主是否也有这个问题。内网访问我都是好的
博主的 nasgeek.cn 是否也是ddns .我看访问速度什么的都还行。服务器挂云上的还是搁家里的。专线否?
我是在软路由器上DDNS的
入站: 3.17 kbit/s (0.4 kB/s) 平均: 2.87 kbit/s (0.36 kB/s) 峰值:
——————————————
开nextcloud就这速度。不太正常。是不是哪里设置的不对
freebad 下有没有测速工具。我测试下
1.ddns访问慢的问题应该是你路由器上的问题,网络环境问题还得你自己排查。
2.本站是架设在vps上的,走的CN2 GIA线路,所以速度还不错。
3.freebsd网络测速我没有用过,不过可以使用ping命令。
博主您好,我按照本贴的操作除了一些问题,还希望能够得到博主的解答。
我目前的情况是用自己在阿里云购买的域名解析到no-ip的动态解析域名再通过我本地路由器的端口映射,将443端口映射到我的nextcloud上。
ssl证书是在阿里云上签发的和我域名一致的证书
按照本贴的思路,我在config.php中添加了对该域名的访问许可
新建了可以挂载的数据集,并将nextcloud的数据存放点挂载到了该数据集
证书存放在了/usr/local/etc/ssl/域名/目录下
nextcloud-ssl.conf也按照本贴的说明进行了修改
之后重启nginx和整个nextcloud插件,
现在通过我的域名可以访问到nextcloud服务器
但是直接首页报错服务器内部错误
内容如下
内部服务器错误
服务器不能完成您的请求。
如果再次发生这种情况,请将下面的技术详细信息发送给服务器管理员。
更多细节可以在服务器日志中找到。
技术细节
远程地址:192.168.31.1
请求 ID:ubIbGGngwKd6bcr4p3Ox
我查看了该日志信息。每一个请求产生了5条错误日志
前三条的内容都是
“message”:”ini_set(): Headers already sent. You cannot change the session module’s ini settings at this time at /usr/local/www/nextcloud/lib/base.php#408
“message”:”ini_set(): Headers already sent. You cannot change the session module’s ini settings at this time at /usr/local/www/nextcloud/lib/base.php#412
“message”:”ini_set(): Headers already sent. You cannot change the session module’s ini settings at this time at /usr/local/www/nextcloud/lib/base.php#416
跪求博主指点
你试试看直接ddns到阿里云的域名呢
我只有动态公网IP,使用的是NO-IP.COM的DDNS服务,主机是在自己家里的。所以目前的链路顺序就是“阿里云域名geekphoto.cn→NO-IP的geekphoto.ddns.net二级域名→我家路由器→freenas上的nextcloud服务器”
如果用别名解析到阿里云的域名的话,好像没有办法把访问请求转到我的主机上来
这样,你先试一下修改电脑主机的host文件,直接域名劫持解析到你的nextcloud服务器,看看是你服务器搭建的问题,还是多重域名解析的问题。
非常感谢博主的帮助!
解决了我折腾好几天都没弄明白的问题!
改host绕过DNS之后,确实可以直接访问了。
基本验证应该是多重解析的问题,
之后我用了aliddns的脚本放在Freenas下定期自动执行直接用阿里云的域名实现DDNS,
不再经过no-ip的跳转
算是初步解决了由外部网络通过阿里云域名加密访问的问题
现在只剩下nextcloud概览自检报错CLI任务无法执行,数据目录下没有.ocdata文件。
这个也是费解的事情。
这个.ocdata是由原本的数据目录迁移过来的
文件所有权现在是www:www 权限770
删掉重新创建也是这样
不过我的倒是没遇到数据库丢失索引的报错信息
那你整个数据目录的权限设置对了吗
/mnt目录的所有者是root wheel
用来存储用户数据的/mnt/nextcloud_data目录所有者是www www 权限770
所以才百思不得其解
您正在通过安全连接访问实例,但是您的实例生成的 URL 不安全。 这很可能意味着您正在使用反向代理,并且覆盖配置变量未正确设置。 请阅读有关此内容的文档页面。
您的网页服务器未正确设置以解析“/.well-known/caldav”。更多信息请参见文档。
您的网页服务器未正确设置以解析“/.well-known/carddav”。更多信息请参见文档。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~请问这三个问题可以如何解决?
另发现Nextcloud 19的“App商店”和最后的“系统”打不开,提示网关超时,以前的17版没这种提示,重新安装了NC好几遍都是这样。
第1个问题,是你使用反向代理了吗?配置正确?
第2个和第3个问题,web服务配置一下.htaccess重定向就行了。
第4个问题,我还没升级到19,等我升级后看看。
感谢博主的回复。
第一个问题:我没有配置反向代理,就是普通的Internet->无线路由器(获得公网IP)->Freenas13->Nextcloud,以前19版之前是没有这个提示的,更新到19版就出现这个提示了。
第二和第三个问题,我在网上找了一下解决方案,发现基本上都使用Linux的,如Debian、Ubantu、CeOS或者阿里云VPS之类的,和Freenas的结构和文件是不一样,所以一直就没搞定过。希望博主能给个比较清晰的指导。
谢谢!
你先说说你的环境。是插件安装还是自己在jail里安装的nextcloud?用的是nginx还是apache?
博主,你好!
我是在Freenas中的Jail中安装的Nextcoud,不是手动安装的,就是在Freenas的Plusins中选择NC安装,用的是默认值。所以NC默认用的应该是nginx吧,我在NC的shell中用nginx -v看了下,显示:nginx/1.18.0。谢谢!
另,NC后台任务方式是AJAX,下面的Cron和Webcron两种方式特别是Cron方式据说性能更好,但选择以后就会出错,说是XX小时没执行,不会设置。好尴尬
cron默认配置是基于Linux的,需要手动修改。
# crontab -u www-data -e
然后添加
*/5 * * * * php -f /usr/local/www/nextcloud/cron.php
保存,
再在管理页面中选择cron即可正常使用。
我执行了:crontab -u www-data -e,提示:crontab:user ‘www-data’ unknown
估计是Freenas系统和Linux命令是不一样的,所以请问在Freenas命令是如何键入?谢谢!
您的网页服务器未正确设置以解析“/.well-known/caldav”。更多信息请参见文档。
您的网页服务器未正确设置以解析“/.well-known/carddav”。更多信息请参见文档。
这个问题是由于Nginx中Nextcloud.conf文件未能获取当前端口号导致的,
修改/usr/local/etc/nginx/conf.d/nextcloud.conf文件中两处
$scheme://$host:$server_port/remote.php/dav;
为
$scheme://$host:8282/remote.php/dav;
8282为NAT模式随机分配的端口,这个根据实际情况修改。
请问这个例子中的8282的端口,实际上如何才能获得端口信息,也就是如何知道自己用了哪个端口?是安装时Nextcloud的访问端口吗?谢谢
应该www-data替换为www,;
端口号可以在插件中选择所安装nextcloud,可以看到IP地址,冒号后的数字(应该是4位)就是端口号。
兄弟:
您的网页服务器未正确设置以解析“/.well-known/caldav”。更多信息请参见文档。
您的网页服务器未正确设置以解析“/.well-known/carddav”。更多信息请参见文档。
这个问题是由于Nginx中Nextcloud.conf文件未能获取当前端口号导致的,
修改/usr/local/etc/nginx/conf.d/nextcloud.conf文件中两处
$scheme://$host:$server_port/remote.php/dav;
为
$scheme://$host:8282/remote.php/dav;
8282为NAT模式随机分配的端口,这个根据实际情况修改。
我知道为啥看不到端口了,因为我没有启用NAT模式,在网络参数里,我没有选“NAT Port Forwarding”这个项目,所以没有端口信息。
请问,如果不选择NAT模式,那端口那里应填入什么内容,填80端口应该不用吧。谢谢!
Dear Zrecovery,当升级到Nextcloud 20.0.0以后,用这种修改nextcloud.conf的方法已经不适用了,因为20.0.0版的这个文件中没有$scheme://$host:$server_port/remote.php/dav;这个内容了。请问还有办法修改吗?
应该把www-data替换为www;
端口号可以在插件中选择所安装nextcloud,可以看到IP地址,冒号后的数字(应该是4位)就是端口号。
第一个换用www了以后可以执行了,效果再观察一下看看。先谢谢您了。
第二个我在插件选择所安装的nextcloud,能看到IP地址,但没有显示端口号,如下:
Boot:
on
IPv4:
192.168.50.11/24
IPv6:
none
Type:
pluginv2
Template:
N/A
Basejail:
yes
能否再帮忙指导下,谢谢!:)
看样子是启用了NAT,你在插件页面查看所安装的nextcloud插件的管理门户,冒号后的就是。
我查看了下,应该没有启用NAT,在NC插件的管理门户中,没看到有冒号。
如:
Post Install Notes
Database Name: nextcloud
Database User: dbadmin
Database Password: qY2sdfs5r9i1aAqJ
Nextcloud Admin User: ncadmin
Nextcloud Admin Password: BVN4ewYRXpjZpPpr
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~请问是这个内容吗?
升级到19.0.x以后,进入Nextcloud应用商店时都会遇到nginx报告“504 Gateway Time-out”而失败,之前进入设置中的“系统”也会这么提示,今天试了一下“系统”功能能正常进入了。
应用商店失败会导致升级时,检查应用时失败,最终导致Nextcloud无法升级。请问博主和各位兄弟是否有解决的办法?谢谢!
发现这个问题是因为网络问题。这段时间时好时坏。
只要系统那里好用,应用商店就好用了。但一会儿就不行了。
博主你好,很感谢你的教程,让我能够模仿实践。
但是在操作把旧文件通过命令’cp -rfp /usr/local/www/nextcloud/data/. /mnt/ncdata’复制到存储池之后,并将“datadirectory”这一项改成”/mnt/ncdata”,并不能在NextCloud管理台看到迁移过来的旧文件,实际上能通过ssh的ls命令看到旧文件是在NextCloud的根目录下面。后面看到NextCloud在存储池的路径其实是根据用户来划分数据的,所有我又把旧文件,复制一份到新创建的一个用户,依然看不到旧文件,所以恳请博主能指点一下。
感谢博主的教程,按照一步步走来。
有个问题比较迷惑,就是复制已有文件到’/mnt/ncdata’之后,应该怎么更新缓存?因为直接复制过去的文件好像是没更新到NextCloud的缓存数据库,在网上找了快半天都不行,网上大多数用的是sudo指令,我改成su之后还是一直不行…
目前用的NextCloud版本是19.0.3,FreeNas版本是11.3-U4.1。
求指导,万分感谢~
重新扫描一下文件就可以了。用sudo命令,没有的话,安装一下:pkg install sudo
楼主您好,我按照您的方法,第一次在PC机上用11.3按装正常,直接输入用户名密码即可进入管理面板,后面换了设备,安装后网盘页需要输入数据库信息,而且按安装说明里面的数据库配置,host填127.0.0.1:3307,提示:Error while trying to create admin user: Failed to connect to the database: An exception occurred in driver: SQLSTATE[HY000] [2002] Connection refused
数据库连接错误,你看一下端口是否正确,数据库是否正常运行,如果没问题,将127.0.0.1改成localhost试试
博主你好:
按照你的文章,我一步步下来都很顺利,只是在启用ssl部分出现问题,上传那两个文件,修改nextcloud-ssl.conf后,重启服务:
root@NextCloud:~ # service nginx restart
Performing sanity check on nginx configuration:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Stopping nginx.
Waiting for PIDS: 23815.
Performing sanity check on nginx configuration:
nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok
nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful
Starting nginx.
看起来一起顺利,除了,无法访问,用默认的443访问是打开freenas的登陆界面,或者我指定的其他端口就没办法显示。
我感觉应该就是某个细节出了问题,就是一下子没法查找,请博主帮忙提示下,谢谢1!
你打开的是freenas登录界面,那应该是你域名解析不对
很感谢博主的文章,解决了我绝大部分的问题,特意来评论,再次感谢~
大神,感谢您的分享,教程写的很详细,我按照您的教程设置了挂载,出现了内部错误的提示,我尝试将配置文件改回去,文件移动回原目录,才可以正常访问,请问是哪个环节出现了问题呢?
内部错误有可能是你目录的权限没给对。
出错可能是有两个隐含文件没有被cp到目标目录,一个是.h开头的,一个是.o开头的,你可以试试
插件界面无法打开,挂梯子也不行,报错提示如下,麻烦看下是啥原因。
Cmd(‘git’) failed due to: exit code(128) cmdline: git clone -v https://github.com/freenas/iocage-ix-plugins.git /mnt/storage/iocage/.plugins/github_com_freenas_iocage-ix-plugins_git stderr: ‘Cloning into ‘/mnt/storage/iocage/.plugins/github_com_freenas_iocage-ix-plugins_git’… fatal: unable to access ‘https://github.com/freenas/iocage-ix-plugins.git/’: Could not resolve host: github.com ‘
Error: Traceback (most recent call last):
File “/usr/local/lib/python3.7/site-packages/iocage_lib/ioc_plugin.py”, line 1566, in _clone_repo
repo = git.Repo(destination)
File “/usr/local/lib/python3.7/site-packages/git/repo/base.py”, line 131, in __init__
raise NoSuchPathError(epath)
git.exc.NoSuchPathError: /mnt/storage/iocage/.plugins/github_com_freenas_iocage-ix-plugins_git
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File “/usr/local/lib/python3.7/site-packages/middlewared/job.py”, line 349, in run
await self.future
File “/usr/local/lib/python3.7/site-packages/middlewared/job.py”, line 387, in __run_body
rv = await self.middleware.run_in_thread(self.method, *([self] + args))
File “/usr/local/lib/python3.7/site-packages/middlewared/utils/run_in_thread.py”, line 10, in run_in_thread
return await self.loop.run_in_executor(self.run_in_thread_executor, functools.partial(method, *args, **kwargs))
File “/usr/local/lib/python3.7/site-packages/middlewared/utils/io_thread_pool_executor.py”, line 25, in run
result = self.fn(*self.args, **self.kwargs)
File “/usr/local/lib/python3.7/site-packages/middlewared/schema.py”, line 965, in nf
return f(*args, **kwargs)
File “/usr/local/lib/python3.7/site-packages/middlewared/plugins/jail.py”, line 409, in available
plugins_versions_data = IOCPlugin(branch=branch, git_repository=plugin_repository).fetch_plugin_versions()
File “/usr/local/lib/python3.7/site-packages/iocage_lib/ioc_plugin.py”, line 266, in fetch_plugin_versions
self.pull_clone_git_repo()
File “/usr/local/lib/python3.7/site-packages/iocage_lib/ioc_plugin.py”, line 137, in pull_clone_git_repo
depth, self.callback
File “/usr/local/lib/python3.7/site-packages/iocage_lib/ioc_plugin.py”, line 1631, in _clone_repo
k: v for k, v in kwargs.items() if v
File “/usr/local/lib/python3.7/site-packages/git/repo/base.py”, line 988, in clone_from
return cls._clone(git, url, to_path, GitCmdObjectDB, progress, **kwargs)
File “/usr/local/lib/python3.7/site-packages/git/repo/base.py”, line 939, in _clone
finalize_process(proc, stderr=stderr)
File “/usr/local/lib/python3.7/site-packages/git/util.py”, line 333, in finalize_process
proc.wait(**kwargs)
File “/usr/local/lib/python3.7/site-packages/git/cmd.py”, line 415, in wait
raise GitCommandError(self.args, status, errstr)
git.exc.GitCommandError: Cmd(‘git’) failed due to: exit code(128)
cmdline: git clone -v https://github.com/freenas/iocage-ix-plugins.git /mnt/storage/iocage/.plugins/github_com_freenas_iocage-ix-plugins_git
stderr: ‘Cloning into ‘/mnt/storage/iocage/.plugins/github_com_freenas_iocage-ix-plugins_git’…
fatal: unable to access ‘https://github.com/freenas/iocage-ix-plugins.git/’: Could not resolve host: github.com
有时候会出现无法打开的情况,可能过几天又好了
这问题我今天已经解决了,原来是我在设置网关和DNS的时候设置错了,并不是我当前路由的网关,改回来之后就好了。