前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker 搭建 Nextcloud

Docker 搭建 Nextcloud

作者头像
yiyun
发布2022-04-11 09:26:01
5K0
发布2022-04-11 09:26:01
举报
文章被收录于专栏:yiyun 的专栏yiyun 的专栏

引言

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 文件夹

代码语言:javascript
复制
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
代码语言:javascript
复制
docker-compose up -d

Q&A

1. "Strict-Transport-Security" HTTP 头未设为至少 "15552000" 秒。为了提高安全性,建议启用 HSTS

本人开启了 Cloudflare CDN, 因此才做下方操作, 否者应该是编写 Nginx 配置, 这里是因为 Cloudflare CDN 重写了响应头

实测成功解决

2. 你正通过安全连接访问你的实例,然而你的实例正生成不安全的 URL

参考:

config/config.php

代码语言:javascript
复制
'trusted_domains' => 
array (
  0 => 'nextcloud.moeci.com',
),
'overwriteprotocol' => 'https',

实测成功, 无需重启,刷新页面发现即刻生效

现在还可以发现所有 相关 URL 已经替换为 https

3. 您的网页服务器未正确设置以解析“/.well-known/caldav”

参考:

TODO: 经过测试, 下方未成功解决, 依然有上方提示

nginx.conf

代码语言:javascript
复制
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 ~ /

代码语言:javascript
复制
# 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 挂载 外部云存储

参考:

为了方便, 直接将 rclone 打包到 Dockerfile 里, 并在容器启动时, 自动启动挂载 外部云存储

下方镜像添加了 rclone 外部云存储, 以及 官方的 full 示例 (所有可选包和 cron 功能的依赖项)

关联仓库: - awesome-docker/nextcloud-docker at main · yiyungent/awesome-docker

1. 直接在 /rclone-storage

失败, 因此尝试其它文件夹, 让 apache 有权限, 并赋予权限

1.1 经过测试, 解决

加上 --allow-other

代码语言:javascript
复制
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 下,并赋予权限, 结果还是不行

代码语言:javascript
复制
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 下

代码语言:javascript
复制
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

代码语言:javascript
复制
--allow-other                            Allow access to other users (not supported on Windows)

挂载时加一个选项: --allow-other

代码语言:javascript
复制
rclone mount pcloud-1: /var/www/html/data/rclone-storage/pcloud-1 --vfs-cache-mode full --allow-other

> 尽管权限仍然没修改成功, 但加上此选项即可成功

Linux 查看所有用户

代码语言:javascript
复制
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:

  • 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

添加到最后

代码语言:javascript
复制
'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 预览图 失败

参考:

解决

注意: yiyungent/nextcloud 中已经打包完成, 只需要修改 config.php 即可

  1. 还需要在 Docker 镜像中安装 ghostscript , imagemagick
  2. 还需要修改 imagemagick 的一个配置文件
代码语言:javascript
复制
vi /etc/ImageMagick-6/policy.xml

该行

<policy domain="coder" rights="none" pattern="PDF" />

必须更改为

<policy domain="coder" rights="read|write" pattern="PDF" />

  1. 重启
代码语言:javascript
复制
docker-compose restart

成功

PS: 中途尝试: 未测试, 不知道最后成功是否与这个应用有关( 是否缺少此应用还是可行, 大多数教程未涉及此应用 ), 最后成功时, 这个插件是启用状态 安装并启用了这个应用 ( Preview Generator ) , 还是没有 pdf 预览缩略图

参考

感谢帮助!

本文作者: yiyun

本文链接: https://moeci.com/posts/分类-docker/docker-nextcloud/

版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引言
  • docker-compose.yml
  • Q&A
    • 1. "Strict-Transport-Security" HTTP 头未设为至少 "15552000" 秒。为了提高安全性,建议启用 HSTS
      • 2. 你正通过安全连接访问你的实例,然而你的实例正生成不安全的 URL
        • 3. 您的网页服务器未正确设置以解析“/.well-known/caldav”
        • 补充
          • 注意: 不使用 https, 无法登录 安卓app
          • Nginx: location ~ /
            • 配合 rclone 挂载 外部云存储
              • 1. 直接在 /rclone-storage 下
              • 3. 尝试在 /var/www/html/data 下
            • 开启其它扩展文件的预览
              • 生成 pdf 预览图 失败
          • 参考
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档