Docker 搭建 Nextcloud
参考: 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
文件夹
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
docker-compose up -d
本人开启了 Cloudflare CDN, 因此才做下方操作, 否者应该是编写 Nginx 配置, 这里是因为 Cloudflare CDN 重写了响应头
实测成功解决
参考:
config/config.php
'trusted_domains' =>
array (
0 => 'nextcloud.moeci.com',
),
'overwriteprotocol' => 'https',
实测成功, 无需重启,刷新页面发现即刻生效
现在还可以发现所有 相关 URL 已经替换为 https
参考:
TODO: 经过测试, 下方未成功解决, 依然有上方提示
nginx.conf
location /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
经过实测, 不对 Nextcloud 服务端 使用 https, 无法使用 安卓app 登录, 注意: Nextcloud 服务端内部需要使用 https, 即需 解决 Q&A: 1,2
# 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 打包到
Dockerfile
里, 并在容器启动时, 自动启动挂载 外部云存储下方镜像添加了
rclone 外部云存储
, 以及 官方的full
示例 (所有可选包和 cron 功能的依赖项)关联仓库: - awesome-docker/nextcloud-docker at main · yiyungent/awesome-docker
/rclone-storage
下失败, 因此尝试其它文件夹, 让
apache
有权限, 并赋予权限
加上 --allow-other
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
下,并赋予权限, 结果还是不行
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
挂载的地方, 权限修改失败
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
目测改权限失败了, 不知道为什么
参考: - rclone mount
--allow-other Allow access to other users (not supported on Windows)
挂载时加一个选项: --allow-other
rclone mount pcloud-1: /var/www/html/data/rclone-storage/pcloud-1 --vfs-cache-mode full --allow-other
> 尽管权限仍然没修改成功, 但加上此选项即可成功
Linux 查看所有用户
cat /etc/passwd
参考:
注意:
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:
Defaults to the following providers:
默认
config.php
里压根没这选项, 需要自己添加此配置./nextcloud/nextcloud/config/config.php
添加到最后
'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
预览图生成成功
参考:
解决
注意:
yiyungent/nextcloud
中已经打包完成, 只需要修改config.php
即可
ghostscript
, imagemagick
imagemagick
的一个配置文件vi /etc/ImageMagick-6/policy.xml
该行
<policy domain="coder" rights="none" pattern="PDF" />
必须更改为
<policy domain="coder" rights="read|write" pattern="PDF" />
docker-compose restart
成功
PS: 中途尝试: 未测试, 不知道最后成功是否与这个应用有关( 是否缺少此应用还是可行, 大多数教程未涉及此应用 ), 最后成功时, 这个插件是启用状态 安装并启用了这个应用 (
Preview Generator
) , 还是没有 pdf 预览缩略图
感谢帮助!
本文作者: yiyun
本文链接: https://moeci.com/posts/分类-docker/docker-nextcloud/
版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!