Table of Contents
nextcloud 在 dockerhub 上有两个用得比较多的镜像,一个是官方的 nextcloud,还有一个是 linuxserver/nextcloud。这里我使用后者。
创建容器
linuxserver/nextcloud – Docker Image | Docker Hub
这个页面里把创建容器时需要的参数列出来了。使用 portainer 部署的时候只需要把相关参数按照页面设置就可以。
端口部分我是把宿主机 10080 和 10443 映射到了容器的 80 和 443。
容器的 /data 则对应宿主机的 /mnt/xxx 文件夹。我这里的文件夹是通过 nfs 挂载的 nas 文件夹。
容器生成之后,通过 ip:10443 就可以访问了(不知道为什么 10080 不可以)。数据库选的宿主机的 MySQL,所以地址是 172.17.0.1。
但没有连接成功。
第一个问题是,点击安装之后就进入 502 页面了。进入容器查看了 nginx 日志发现是没有文件写入权限。通过 id 命令查看后发现容器里的用户为 991–abc。这是因为我在创建容器的时候把环境变量写错了。PUID 和 PGID 写成了 GUID 和 GPID。没办法,销毁重建吧。
数据库连接
这一次出现了另一个问题:数据库用户名或者密码错误???我可以确定用户名和密码是正确的(用的就是 root)。尝试了把密码加密方式改成 caching_sha2_password 还是无效。没办法,只能创建一个新账户,只授权 nextcloud 要用到的数据库。
这次总算连接数据库成功了。但是,一直在转圈,然后就 504 Gateway Time-out 了。[黑人问号]
改 nginx 超时时间应该可以解决,但没动手。我看了眼数据库,nextcloud 下各种表都创建了。于是刷新了页面,可以登录了。
总算进入 nextcloud 欢迎页面了。一波三折。太累。
您正在访问来自不信任域名的服务器
通过 zerotier 将本地 nextcloud 代理到公网。在中转服务器配置好域名之后打开就出现了“您正在访问来自不信任域名的服务器”的提示。
根据文档,修改了 config.php 文件的 “trusted_domains” 部分,把域名,服务器 ip,zerotier 虚拟局域网 ip 都加上了,还是无效。根据这篇文章(Nextcloud 通过不被信任的域名访问 动态IP解决方案,允许所有IP访问)的修改还是无效。最后,添加了一条通配符记录可以了。
部分文件 404
比如这个文件:remote.php/dav/files/root/。通过域名访问的时候会 404,导致页面一直 loading。这个是因为我服务器 nginx 的配置问题。
server { listen 443 ssl http2; #listen [::]:443 ssl http2; server_name xxx.xxx.xx; index index.html index.htm index.php default.html default.htm default.php; root /xxx; include rewrite/other.conf; #error_page 404 /404.html; # Deny access to PHP files in specific directory #location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; } include enable-php.conf; location / { proxy_pass https://xxx.xxx.xxx; proxy_http_version 1.1; proxy_connect_timeout 4s; proxy_read_timeout 60s; proxy_send_timeout 12s; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; #proxy_set_header Host $http_host; } access_log /home/wwwlogs/xxx.xxx.xxx.log; }
zerotier 反向代理的时候不需要太多配置,把除了 proxy_pass 的部分删掉。proxy_set_header 部分放开,否则 nextcloud 无法得知真实的请求域名。rewrite 和 enable-php.conf 部分也删掉就好了。
server { listen 443 ssl http2; #listen [::]:443 ssl http2; server_name xxx.xxx.xx; index index.html index.htm index.php default.html default.htm default.php; location / { proxy_pass https://xxx.xxx.xxx; proxy_set_header Host $http_host; } access_log /home/wwwlogs/xxx.xxx.xxx.log; }
应用商店安装失败
nextcloud 的应用商店有很多实用性较强的应用,这些应用可以丰富网盘的功能。比如笔记(notes)。
但是,这些应用是需要连接 github 下载的。而总所周知,github 是 404 网站。
关于商城无法下载的问题,网上也有解决方案:Nextcloud应用页面空白加载不出来、Nextcloud应用商店无法打开 – 下一朵云 (orcy.net.cn)。但根据文章的说法,这个只是代理的商城列表部分,下载还是要 github 的。没办法,我只能配置 nextcloud 的代理,让其访问局域网里另一台可以访问 github 的系统。
// config.php 'proxy' => '192.168.0.130:7890'
在 nextcloud 的配置文件里增加这么一行就可以了。当然,我的过程没这么顺利。因为 192.168.0.130 访问不了。这一点我很奇怪,192.168.0.130 是宿主机(windows10),nextcloud 是装在虚拟机(ubuntuserver22.04)里的 docker 里。宿主机可以 ping 通虚拟机,但虚拟机 ping 不通宿主机。接下来就是折腾网络配置,确认 windows10 的防护墙全部关闭了,把 hyper-v 的桥接网卡删了重建,重启windows10。凌晨的时候,终于可以 ping 通宿主机了,nextcloud 也可以安装应用了。
至于,如何让 windows10 成为代理服务器,有空另写一篇。
总结
与桌面应用的易用性和稳定性比较起来,这些网络应用真的无力吐槽。正如 linux 的依赖地狱一样,一直在解决,但从未解决。
另外,通过代理访问 nextcloud 体验并不好。主要还是受制于延迟和带宽。