windows10下利用docker安装nextcloud及相关踩坑
终于在家里的windows NAS里用docker装好了nextcloud,写出来纪念下吧!
一、安装docker desktop
在window程序和功能,开启wsl支持,下载官网客户端安装。
(一)更新国内源
不得不说,阿里还是!快!
1 | { |
(二)开启wsl集成!!在WSL2中启动docker
这一步应该是在windows10上正确使用docker最重要的一步了。运行在wsl2下的docker desktop实际上是在使用hyper-v虚拟机,如果直接用GUI配合windows下的compose进行操作,那么在挂载windows目录时,如果这个目录用于多个image交互,可能导致权限及通信等各类错误。
在单独安装的wsl的系统下,比如ubuntu中执行docker命令,实质上还是调用docker desktop,但是相当于在一个linux环境下调用,避免了许多报错,也可以方便的更改权限设置。
具体步骤:
之前安装docker的时候应该已经启用过WSL了。
安装windows10下的ubunu。
在docker desktop中
setting-resources-WSLIntegration
中启用ubuntu在ubuntu中使用docker
此时可使用/mnt/c
的挂载方式。
(三)docker-compose.yml设置
使用官方github中的example即可,家用内网强烈建议使用insecure-postgres-fpm,性能最佳。朋友们。。。至少换掉apache啊。。1202年了。
1 | version: '3' |
初次启动后,可以将数据文件复制到其他盘符,再挂载回去,这样数据库使用系统的固态硬盘,数据则可以使用大容量的机械硬盘。app-volume下增加:
/mnt/d/nextclouddata:/var/www/html/data
启动nextcloud时需等待3-10mins,期间会有502错误
二、各种踩坑
(一)申请免费的ssl证书及内网的使用
内网使用let’s encrypt没有研究怎么实现,有路由器介入的情况下,即使有公网ip也会比较麻烦吧。所以就用一年期的免费ssl证书咯。时至今日,貌似只有阿里腾讯还提供比较便捷的免费服务。如果你有其他好的选择请告知。
使用时可以用官方带有nginx-proxy的样例,但设置比较繁琐,同时一般的国内ISP都会屏蔽公网ip的80和443,折腾了很久,最终还是放弃。。。
有几点在这里记录下:
(1)取消HSTS(严格模式)
在docker-compose.yml
的proxy容器下增加
1 | environment: |
本来是为了解决android客户端提示严格模式-禁止http连接
的,但并没有解决,不过关掉hsts也挺好,这功能是安全,也很麻烦,想让HSTS失效的唯二办法,等待和清楚浏览器缓存。。。
不要直接该proxy的配置文件。。。么有用。。
(2)证书的使用
nginx-proxy使用的crt格式的证书,用aliyun生成的apahce证书中的pulic和chain合并,public在前,换行粘贴chain。
(二)windows下挂在本地路径的写法
2021.11在windows10 21H1,docker desktop v4.1.1下,经过多轮测试,对于windows下的volumes写法主要有两种:
1./c/Users/user/xxx:/var/nginx/html
2.C:\Users\user\xxx:/var/nginx/html
3.//var/run/docker.sock:/tmp/docker.sock:ro
在windows下使用反代时的.sock
文件写法,否则proxy跑不起来一直重启,当然,这一条在最终的compose中完美避开了。在ubuntu中执行docker compose可以不用修改,直接用样例的格式即可
另外,测试了可以不在环境变量或.env
、docker-compose.yml
文件中增加COMPOSE_CONVERT_WINDOWS_PATHS=1
,可能是新版本自己进化了。。
还有,指向文件夹前,先创建那个文件夹。
(三)windows下打开volume
1 | \\wsl$\docker-desktop-data\version-pack-data\community\docker\volumes\ |
(四)解决数据目录权限0770提示及http连接问题
外置数据后编辑config.yml解决 :
1 | 'check_data_directory_permissions' => false, |
(五)Too many redirect登录失败,提示多次失败
1 | 进入postgres容器 |
(六)本地连接登录及增加其他域名
在config.php中找到
1 | 'trusted_domains' => |
增加本地ip即可。
(七)限制preview生成图片的大小
nextcloud默认的preview很庞大,不要浪费空间,改一下吧。在config.php中加入:
1 | 'preview_max_x' => 1080, |
(八)docker container中运行occ命令
1 | docker exec --user www-data <nextcloud-container-name> php occ <your-command> |
(九)备份nextcloud时的必选项目
- The config folder
- The data folder
- The theme folder
- The database
(三)参考链接
- Docker中国源 - 简书 (jianshu.com)
- Docker Volume - 目录挂载以及文件共享 | Zach Ke’s Notes (kebingzao.com)
- docker/docker-compose.yml at master · nextcloud/docker (github.com)
- Volume binding using docker compose on Windows - Stack Overflow
- Volumes mounted from a Linux WSL instance don’t resolve in container · Issue #2151 · docker/for-win (github.com)
- Bind to docker socket on Windows - Stack Overflow
- wahyd4/aria2-ariang-x-docker-compose: Docker compose files for Aria2+ AriaNg+ filerun/ Nextcloud/ h5ai + Plex. 图形化BT,磁力,离线下载,文件管理,播放,投屏 (github.com)
- 使用Nginx在Ubuntu 20.04上安装NextCloud(LEMP堆栈) - 月灯依旧 (bynss.com)
- Locating data volumes in Docker Desktop (Windows) - Stack Overflow
- nginx-proxy/nginx-proxy: Automated nginx proxy for Docker containers using docker-gen (github.com)
- Strict mode: no http connection allowed
- Docker下Nextcloud的Trusted domains添加 - 知乎 (zhihu.com)
- Can I move files direct to Nextcloud? - 🚧 Installation - Nextcloud community
- Cannot write to data directory with check_data_directory_permissions set to false · Issue #1003 · nextcloud/docker (github.com)
- How to install NextCloud on Ubuntu 20.04 LTS WSL Windows 10 (how2shout.com)