This page looks best with JavaScript enabled

外挂NTFS盘用Docker部署NextCloud+Caddy反向代理及一系列问题的解决

 ·   ·  ☕ 4 min read  ·  ✍️ oser

开始

私有网盘不用多说是大部分人都需要的东西,对比了几个开源的网盘,seafile,nextcloud,owncloud等,最终还是选择部署nextcloud,首先从文件保存上来说nextcloud是不分块的原始文件,可能牺牲了一定的安全性和大文件分块上传的能力,但随时读盘浏览文件这个需求对我来说更加的重要。

另外nextcloud强大的插件功能以及多平台支持的便利性还是非常领先好用的。

我在部署前至少两个需求是要满足的,一是扩展硬盘是NTFS格式,主要考虑到家人使用也可以方便的在Windows上导出和处理部分图片及数据,二是文件是未加密或分块可读的,这点在nextcloud上天然满足。NTFS盘就相对会有一些问题。

下面主要是记录备忘一下在自有服务器上部署的过程。

这篇文章不太会纯粹的敲命令告诉你怎么部署,主要讲一些方法论,知其然也要知其所以然

Docker和非Docker方式

如果不用docker,在ubuntu下可以直接用snap包管理安装和更新nextcloud,其他linux发行版我没试过,可能需要下载安装。

snap安装命令:

sudo snap install nextcloud

直接安装需要用nextcloud.occ脚本配置一些参数选项,需要配置的参数有管理帐户密码可信域等,具体网上有不少资料可以搜索参考。

如果你的80端口被占用了,理论上用snap set nextcloud ports.http=8080可以改非80的监听端口,但我试过貌似没生效。

所以主要还是详细说一下docker下部署nextcloud的一些问题及优化。

  • docker pull最新版本 sudo docker pull nextcloud
  • 映射到本地路径和端口号 sudo docker run -d --name nextcloud -p <your-port>:80 -v <your-path>:/var/www/html nextcloud
  • 在浏览器中打开http://local:your-port,直接按步骤创建一个管理员帐户就ok了,默认是sqlite数据库,一般家庭用的话不会有太大的性能问题,如果有有性能需求的,可以用mysql,这个可以自行找资料设置,后期如果想换数据库,sqlite的数据也可以迁移到mysql上。
  • 修改配置,解决几个无法使用的问题,找到docker映射路径下的config/config.php
  1. 在ntfs格式存储的配置中会有如下的类似报错

错误
你的数据目录可被其他用户读取
请更改权限为 0770 以避免其他用户查看目录.

nextcloud是利用操作系统本身的机制来保证数据隔离的安全性
这样的问题是由ntfs下无法正常支持linux的权限机制。
以如下的方式来挂载硬盘,可以解决root用户运行的容器下权限的问题,但是却给我们正常访问带来了障碍
sudo mount /dev/sd(x) /mnt/nextcloud -t ntfs -o umask=007,uid=0,gid=0
所以推荐改config.php的$CONFIG的array配置中加入’check_data_directory_permissions’ => false

  1. 设置外部访问的可信域 'trusted_domains' => array ( 0 => 'xxx.yourdomain.xxx', ),

  2. Nextcloud在17版本以上(本文写时最高版本20)对主机名和协议头做了更严格的检测,导致了反向代理配置http到https转移的失败,表现为登陆后在登陆页面无法正常跳转,此时需要加入设置'overwriteprotocol' => 'https',

  3. 加入ffmpeg开启视频的预览

    • 进入容器 sudo docker exec -it nextcloud bash
    • 安装ffmpeg apt install ffmpeg
    • config.php中加入配置项
    'enabledPreviewProviders' => 
     array (
       0 => 'OC\\Preview\\PNG',
       1 => 'OC\\Preview\\JPEG',
       2 => 'OC\\Preview\\GIF',
       3 => 'OC\\Preview\\HEIC',
       4 => 'OC\\Preview\\BMP',
       5 => 'OC\\Preview\\XBitmap',
       6 => 'OC\\Preview\\MP3',
       7 => 'OC\\Preview\\TXT',
       8 => 'OC\\Preview\\MarkDown',
       9 => 'OC\\Preview\\Movie',
     ),
    
  4. 安装smbclient开启外挂存储

    • 在设置里面找到外部存储,外部存储可以挂载本地路径,支持SMB,WebDAV,FTP,SFTP等,甚至可以和其他部署的nextcloud组一个集群
    • 可能提示samba的问题,同样进入docker容器,安装smbclient并配置即可
apt install smbclient libsmbclient-dev
pecl install smbclient
docker-php-ext-enable smbclient

Caddy反向代理及配置Collabora协作文档

Collabora是一个很强大的在线文档,支持ms office文档格式,并且可以多人在线协作,这里说个题外话,nextcloud的应用商店因为众所周知的原因国内是访问不了的,所以我们一般用离线安装,离线安装也很简单,在nextcloud商店下载对应的安装包,离线解压到nextcloud/apps路径下,管理员账户再应用中启用对应的应用即可。我们对Collabora Online就可以这样来安装。

Collabora麻烦的地方在于光装个应用包并不能正常运行使用,还得部署一个自有的服务端。

局域内网做域名劫持优化访问速度

其他有意思的事

Share on

oser
WRITTEN BY
oser
愿我的狗子在天堂也能每天开心咧嘴笑