引言
Docker 搭建 Nextcloud
docker-compose.yml
参考:
nextcloud/docker: ⛴ Docker image of Nextcloud
Base version - apache
This version will use the apache image and add a mariaDB container. The volumes are set to keep your data persistent. This setup provides no ssl encryption and is intended to run behind a proxy.
Make sure to pass in values for MYSQL_ROOT_PASSWORD and MYSQL_PASSWORD variables before you run this setup.
注意: 修改了官方的 volumes, 直接挂载到当前目录的 ./nextcloud 文件夹
docker-compose.yml 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 version: '2' services: db: image: mariadb:10.5 restart: always command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW volumes: - ./nextcloud/db:/var/lib/mysql environment: - MYSQL_ROOT_PASSWORD= - MYSQL_PASSWORD= - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud app: image: nextcloud restart: always ports: - 8080:80 links: - db volumes: - ./nextcloud/nextcloud:/var/www/html environment: - MYSQL_PASSWORD= - MYSQL_DATABASE=nextcloud - MYSQL_USER=nextcloud - MYSQL_HOST=db
Q&A
1. "Strict-Transport-Security" HTTP 头未设为至少 "15552000" 秒。为了提高安全性,建议启用 HSTS
本人开启了 Cloudflare CDN, 因此才做下方操作, 否者应该是编写 Nginx 配置, 这里是因为 Cloudflare CDN 重写了响应头
实测成功解决
2. 你正通过安全连接访问你的实例,然而你的实例正生成不安全的 URL
参考:
Reverse proxy — Nextcloud latest Administration Manual latest documentation
NextCloud 使用https反向代理后PC端异常 - mouseleo - 博客园
config/config.php
config.php 1 2 3 4 5 'trusted_domains' => array ( 0 => 'nextcloud.moeci.com', ), 'overwriteprotocol' => 'https',
实测成功, 无需重启,刷新页面发现即刻生效
现在还可以发现所有 相关 URL 已经替换为 https
3. 您的网页服务器未正确设置以解析“/.well-known/caldav”
参考:
Reverse proxy — Nextcloud latest Administration Manual latest documentation
General troubleshooting — Nextcloud latest Administration Manual latest documentation
TODO: 经过测试, 下方未成功解决, 依然有上方提示
nginx.conf
nginx.conf 1 2 3 4 5 6 7 location /.well-known/carddav { return 301 $scheme://$host/remote.php/dav; } location /.well-known/caldav { return 301 $scheme://$host/remote.php/dav; }
补充
注意: 不使用 https, 无法登录 安卓app
经过实测, 不对 Nextcloud 服务端 使用 https, 无法使用 安卓app 登录,
注意: Nextcloud 服务端内部需要使用 https, 即需 解决 Q&A: 1,2
Nginx: location ~ /
nginx.conf 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # proxy to 8001 location ~ / { proxy_pass http://localhost:8001; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header REMOTE-HOST $remote_addr; add_header X-Cache $upstream_cache_status; # cache add_header Cache-Control no-cache; expires 12h; # websocket support proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; }
使用 location ~ / 当匹配上 / 时,就不会再向下搜索其它匹配规则了,
而 使用 location / 则会尝试向下搜索其它匹配规则
配合 rclone 挂载 外部云存储
参考:
docker/.examples at master · nextcloud/docker
docker/.examples/dockerfiles/full/apache at master · nextcloud/docker
Local — Nextcloud latest Administration Manual latest documentation
设置外部储存失败【nextcloud吧】_百度贴吧
linux查看所有用户-百度经验
[Linux]Linux里查看所有用户 - Cookies_L - 博客园
为了方便, 直接将 rclone 打包到 Dockerfile 里, 并在容器启动时, 自动启动挂载 外部云存储
下方镜像添加了 rclone 外部云存储, 以及 官方的 full 示例 (所有可选包和 cron 功能的依赖项)
关联仓库:
-
awesome-docker/nextcloud-docker at main · yiyungent/awesome-docker
1. 直接在 /rclone-storage 下
失败, 因此尝试其它文件夹, 让 apache 有权限, 并赋予权限
1.1 经过测试, 解决
加上 --allow-other
1 rclone mount pcloud-1: /rclone-storage/pcloud-1 --vfs-cache-mode full --allow-other
2. 尝试在 /var/www/data 下
TODO: 失败
- rclone 挂载成功
- Nextcloud 添加外部存储没有成功
第一个看似成功, 那是因为使用的 /var/www/data/rclone-storage, 但实际打开文件夹后, 为空
/var/www/data/rclone-storage/pcloud-1 : 直接显示失败
尝试过 权限问题 , 将其挂载到 /var/www/data/rclone-storage/pcloud-1 下,并赋予权限, 结果还是不行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 mkdir -p /var/www/data/rclone-storage/pcloud-1 apt-get install -y screen screen -S pcloud-1 rclone mount pcloud-1: /var/www/data/rclone-storage/pcloud-1 --vfs-cache-mode full # 断开当前 terminal, 新开 terminal screen -ls chown -R www-data:www-data /var/www/data chmod -R 0750 /var/www/data
挂载的地方, 权限修改失败
3. 尝试在 /var/www/html/data 下
1 2 3 4 5 6 7 8 mkdir -p /var/www/html/data/rclone-storage/pcloud-1 # 挂住 terminal rclone mount pcloud-1: /var/www/html/data/rclone-storage/pcloud-1 --vfs-cache-mode full # 新开 terminal chown -R www-data:www-data /var/www/html chmod -R 0750 /var/www/html
目测改权限失败了, 不知道为什么
3.1 经过测试, 解决
参考:
-
rclone mount
1 --allow-other Allow access to other users (not supported on Windows)
挂载时加一个选项: --allow-other
1 rclone mount pcloud-1: /var/www/html/data/rclone-storage/pcloud-1 --vfs-cache-mode full --allow-other
> 尽管权限仍然没修改成功, 但加上此选项即可成功
Linux 查看所有用户
开启其它扩展文件的预览
参考:
docker/.examples at master · nextcloud/docker - 官方 Docker
Nextcloud: Install Preview Generator – Allerstorfer.at
Configuration Parameters — Nextcloud latest Administration Manual latest documentation - 最新 官方文档
注意: yiyungent/nextcloud 中已经打包完成, 只需要修改 config.php 即可
注意:Dockerfile 不会安装 LibreOffice 包(行已注释),因为它会使生成的镜像大小增加大约 500 MB。为了安装它,只需取消注释 Dockerfile 中的相应行。
注意:默认情况下,仅生成 BMP、GIF、JPEG、MarkDown、MP3、PNG、TXT 和 XBitmap 文件的预览。 预览生成的配置可以在 config.php 中完成,如
管理手册中所述
The following providers are disabled by default due to performance or privacy concerns:
OC\Preview\Illustrator
OC\Preview\HEIC
OC\Preview\Movie
OC\Preview\MSOffice2003
OC\Preview\MSOffice2007
OC\Preview\MSOfficeDoc
OC\Preview\PDF
OC\Preview\Photoshop
OC\Preview\Postscript
OC\Preview\StarOffice
OC\Preview\SVG
OC\Preview\TIFF
OC\Preview\Font
Defaults to the following providers:
OC\Preview\BMP
OC\Preview\GIF
OC\Preview\JPEG
OC\Preview\MarkDown
OC\Preview\MP3
OC\Preview\PNG
OC\Preview\TXT
OC\Preview\XBitmap
OC\Preview\OpenDocument
OC\Preview\Krita
默认 config.php 里压根没这选项, 需要自己添加此配置
./nextcloud/nextcloud/config/config.php
添加到最后
config.php 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 'enable_previews' => true, 'enabledPreviewProviders' => array( 'OC\Preview\PNG', 'OC\Preview\JPEG', 'OC\Preview\GIF', 'OC\Preview\BMP', 'OC\Preview\XBitmap', 'OC\Preview\MP3', 'OC\Preview\TXT', 'OC\Preview\MarkDown', 'OC\Preview\OpenDocument', 'OC\Preview\Krita', 'OC\Preview\PDF', 'OC\Preview\Movie', 'OC\Preview\MP4', 'OC\Preview\MKV', 'OC\Preview\AVI', ),
无需重启, mp4 预览图生成成功
生成 pdf 预览图 失败
参考:
PDF Previews are not generated - ℹ️ Support / 📦 Appliances (Docker, Snappy, VM, NCP) - Nextcloud community
Can't see PDF thumbnails in new grid view (but works in the demo instance) - 🍱 Features & apps / previewgenerator - Nextcloud community
previewgenerator with Nextcloud Preview · Issue #211 · nextcloud/previewgenerator
解决
注意: yiyungent/nextcloud 中已经打包完成, 只需要修改 config.php 即可
还需要在 Docker 镜像中安装 ghostscript , imagemagick
还需要修改 imagemagick 的一个配置文件
1 vi /etc/ImageMagick-6/policy.xml
该行
<policy domain="coder" rights="none" pattern="PDF" />
必须更改为
<policy domain="coder" rights="read|write" pattern="PDF" />
重启
成功
PS: 中途尝试:
未测试, 不知道最后成功是否与这个应用有关( 是否缺少此应用还是可行, 大多数教程未涉及此应用 ), 最后成功时, 这个插件是启用状态
安装并启用了这个应用 ( Preview Generator ) , 还是没有 pdf 预览缩略图
X-Forwarded-For 相关
参考:
抓包理解X-Forwarded-For和proxy_add_x_forwarded_for - it610.com
Nginx \(remote_addr和\)proxy_add_x_forwarded_for变量详解 - 授客 - 博客园
参考
感谢帮助!
NextCloud——结合rclone打造个人私有云存储 - 墨天轮
定制优化Nextcloud镜像 - 知乎
搭建NextCloud私有网盘挂载OneDrive - 云+社区 - 腾讯云
丢掉为知笔记用Nextcloud - 知乎
Setting Up NextCloud on Docker w/ NGINX and CloudFlare for Remote Access! - YouTube
咸鱼先锋 - 修复NextCloud启用CloudFlare后出现的HTTP的请求头安全提示
e-alfred/ocdownloader: ocDownloader - AGPL-licensed multi-protocol download manager for Nextcloud using ARIA2, youtube-dl and Curl (supports Youtube, BitTorrent, HTTP, FTP)
自定义docker实现nextcloud集成离线下载 | LeFer
使用nginx反向代理以实现网站镜像 | LeFer