欢迎光临散文网 会员登陆 & 注册

Docker安装Nextcloud,非AIO方式,并配置HTTPS

2023-08-10 10:45 作者:Laser5252  | 我要投稿

Nextcloud应该是大家首选的私有网盘了吧,官方教程里面虽然提供了Docker的部署方式,但是属于all in one的自动部署方式,必须要有80和433端口的域名才能进行部署,还不支持“纯本地内网”或者“名+其他端口号”域的方式进行部署,对我们来说非常不方便。

所以这篇文章讲的是通过非AIO的方式,在Docker里面部署Nextcloud服务。

前期预备:

公网IP、域名、数字证书

Docker、Docker-compose、portainer、SSH等服务的安装

那么正文开始:

1、Docker部署,我们使用Docker-compose配置文件的方式来部署最方便,这样可以详细设置一些部署的参数。

compose文件如下:

这里有几个注意事项:

(1)compose文件由三个组件组成,分别是主程序、缓存、数据库。缓存和数据库都是选用官方推荐的,自己有需要也可以改成别的,比如progressqsl之类的。

(2)三个组件都需要配置好各自的安装路径,建议的路径格式是一个主文件夹里面放三个子文件夹,分别对应三个组件,组件文件夹之间相互独立,如果相互包含后续会存在数据库路径权限不足无法打开的问题

(3)数据库和缓存的密码按需设置,可以设置的很复杂,但是部署之前就要设置好,部署后再想修改密码,我试过数据库会报错无法启动。

(4)主程序里面80端口的外部映射端口按照自己的需求进行修改即可。

(5)三个服务的时区需要设置成上海,否则安装好Nextcloud后日志里面会频繁有警告提示:“Request does not pass strict cookie check”

   

2、compose文件写好就点击部署,这一步拉取三个服务的镜像是需要时间的,拉取完之后,Docker里面对应的容器虽然会显示running,但是Nextcloud服务其实还在初始化的过程中。

这里面主要就是Nextcloud主程序初始化很慢,有很多东西要安装。

docker里面主程序的log可以看到程序正在初始化,初始化完成后如下图所示。

初始化过程中也可以去看Nextcloud主程序的安装路径,可以看到路径下的文件数量是在一直不断的增长的。


3、等主程序初始化完了之后,就可以通过“ip+端口号”的方式访问Nextcloud的网页了。

这个时候需要创建一个管理员账户,然后点击安装。这个安装的也需要一点时间。

安装好后会弹出推荐的应用页面,如果你那边网络不好,就会跟这里一样加载不出来。你可以选择等一会然后点击跳过。或者手动重新在浏览器的新窗口输入“ip+端口号”,就能进入网盘页面了。到这一步服务的安装就算完成了,剩下的就是各种配置了。


4、进入网盘页面后,点击右上角头像-管理设置-概览,可以看到系统自检后提示的各种错误信息。


这里我们首先配置网盘的缓存。

找到刚才部署Docker服务时,Nextcloud主程序的安装目录,在目录下 config/config.php 找到主程序的配置文件并打开。(你们可以用各种方式和软件进行打开)

在配置文件中增加如下参数,注意标点符号,否则主程序运行报错。


配置文件里面,local缓存保持原来的apcu,官方并不推荐local缓存用redis。

然后在配置文件里面随便找个地方加一行这个参数,解决系统关于电话区域的警告。

修改完配置文件后记得点击保存,配置文件会自动生效,一般不用重启主程序。


5、然后就是修改后台任务的配置了。我们进到 管理设置-基本设置-后台任务 这里。看到系统默认是使用AJAX的方式。而官方推荐是使用cron。这个需要主机每隔5分钟自动执行一次脚本。

这里我们首选先把选项改为cron,然后进行cron参数的配置。

因为我们这个是docker部署,官方文档里面没有对这种使用场景进行特别说明,所以官方文档里面关于cron脚本的设置方法不适用。

这里大概的配置思路就是,因为Nextcloud服务是docker部署,所以脚本的运行是要在宿主机上运行容器里的脚本,而不是在容器中运行脚本。

所以这里首先使用 docker ps 先找到Nextcloud主程序的docker名称,我们这种安装方式的名称一般为“nextcloud-app-1”

然后我们首先在宿主机的ssh里面执行下面的命令,看看是否能执行成功,以确保docker名称设置正确。     

如果执行成功,回到Nextcloud的后台任务的设置界面,会提示cron最近执行过。

如果出现上图说明命令正确。接下来我们只需要让这条命令自动执行即可。

 我们在宿主机中,先执行:

如果提示权限不够,就在前面加sudo

然后在弹出的窗口中增加下面这一条参数:

 这一条参数的后半部分跟前面测试的命令是一模一样的,直接复制过来就行。然后保存即可。到这里后台服务也设置完了。

原文参考:

      

6、这个时候在回到概览的自检界面,会发现还提示一个“文件完整性检查”的错误。

我们点击“无效文件列表”,看一下里面是什么错误。

一般情况下是有一个文件不具备访问权限,我们只要给他赋予权限即可。


我们进到主程序的安装目录下,可以找到这个nextcloud-init-sync.lock文件。

我们进到这个目录下,开启命令行,然后在这个目录下执行 

让这个文件有访问权限即可消除这个警告。


到此,我们内网访问的各种错误就都解决完了,只有内网需求的到这就算完成了。

下面就是反向代理的设置问题了。


7、开始配置反向代理,以nginx为例。 

这里我以nginxWebUI为例,这是一个有可视化界面的nginx,对于新手来说更加友好,配置更加方便,推荐使用。纯nginx用户直接看我后面的配置文件就行了。

首先我们新增一条反向代理条目,配置好域名和端口号的监听,然后开启ssl,选择好密钥文件和其他参数。

然后点击“设置额外参数”,增加下图的参数。

值这里没有分号,自动添加的

这个参数是解决反代之后提示的HSTS警告问题。


配置完基本参数之后,在代理目标这里要添加三个条目,一个是动态http,另外两个是自定义location。

动态http就是主程序的http地址。

两个自定义location的路径分别是/.well-known/carddav 和  /.well-known/caldav

两个自定义location的额外参数里面。都需要设置额外参数。

这个参数是解决主程序自检时候提示的 well-konwn 问题的。

配置文件的最终效果就是这样的,如果不是nginxWebUI,纯nginx代码就按最后这个效果就行了。


9、设置反代后,我们直接浏览器直接输入“域名+端口号”访问Nextcloud服务,会提示不信任域名,所以我们要在配置文件中添加信任。


打开主程序config文件,增加如下参数。

truested_domain这一条是本来就有的,第0行就是主程序的http地址,我们把我们自己的域名加在后面就行,保存文件后再使用“域名+端口号”的方式访问,这时候就不会提示不信任域名了。


9、虽然不会提示不信任域名,但是马上会出现新的问题。就是直接在浏览器中输入“域名+端口号”进行访问会出错。

                                  

仔细一看,会发现端口号被自动去掉了,导致域名指向错误。

这个时候我们手动输入带后缀的网址,就可以正常进入登录页面了。

https://域名:端口号/login/

点登录之后,网页会一直转圈不响应。

这个时候再输入网址:https://域名:端口号/apps/dashboard/

最终可以进入nextcloud的web页面。

      

10、这时候再去看系统设置的概览页面,主要就是提示代理头部的错误,这个问题也跟上面“域名+端口号”访问会自动去掉端口号的故障是同一个。

这个时候我们需要修改配置文件,重写域名映射,并添加代理信任。

(1)重写域名映射:

修改前:

             

修改后:

这里面,overwrite.cli.url参数是原来就有的,需要改写。然后再增加 overwritehost 和 overwriteprotocol 两个参数。 其中overwrite.cli.url是需要添加https前缀的,而overwritehost不需要。


(2)添加代理信任:

这里面,172.30.33.0/24 网段是nginx的内网网段,所以要添加信任。     

             

最终效果:

      

 通过上面的配置方式,应该是解决了Nextcloud主程序中所有的错误和警告问题了。

后面配置onlyoffice和邮件服务的方法在后续的文章里面再讲了。

 

参考:

https://blog.csdn.net/qq_16688317/article/details/124769730

https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/caching_configuration.html

https://cloudkid.fr/nextcloud-cron-setup/

https://docs.nextcloud.com/server/25/admin_manual/configuration_server/reverse_proxy_configuration.html#service-discovery

https://docs.nextcloud.com/server/latest/admin_manual/installation/nginx.html?highlight=strict%20transport%20security




Docker安装Nextcloud,非AIO方式,并配置HTTPS的评论 (共 条)

分享到微博请遵守国家法律