私有云-nextcloud

概述

nextcloud是一个开源的私有云项目,项目本身是从owncloud项目fork来的,两个项目是同一个作者。nextcloud本身支持一些常见格式的在线预览。同时支持webdav协议,这就极大的方便与各个平台对接操作。

部署流程

  1. 创建docker-compose文件
vim ~/docker-compose.yml
version: '2'

volumes:
  nextcloud:

services:
  app:
    image: nextcloud
    ports:
      - 8080:80
    volumes:
      - /path/of/nextcloud/data/:/var/www/html
    restart: always

把本机的8080端口映射到容器内的80端口
把本机的/path/of/nextcloud/data映射到容器内的/var/www/html路径
2. 启动

docker-compose up

现在可以打开浏览器的127.0.0.1:8080访问nextcloud,完成基本设置。(服务器上配置,需要使用服务器IP)
3. 修改域名信息

vim /path/of/nextcloud/data/config/config.php
'overwrite.cli.url' => 'https://yun.example.com',
'overwritehost' => 'yun.example.com',
'overwriteprotocol' => 'https',
  1. 重新启动容器,后台运行
# control-C 终值docker-compose
docker-compose up -d

注意事项
由于我在部署过程中一直在服务器上操作,所以提前配置好了域名映射。在第一次启动nextcloud完成初始化操作后,nextcloud会自动跳转到127.0.0.1:8080
这个时候127.0.0.1:8080/app/files/显然无法访问nextcloud,但是可以手动修改url,使用yun.example.com/app/files访问,这显然不是我想要的,所以才有了步骤3的修改操作。

webdav挂载

linux手动挂载

  1. 安装davfs2
emerge davfs2
  1. 挂载
mount https://yun.example.com/remote.php/dav/files/<USERNAME> /mnt/yun
# 输入帐号
# 输入密码

另外发现在xfce4的thunar或者GNOME的Nautilus中,使用davs前缀的url也可以访问webdav

davs://yun.example.com/remote.php/dav/files/<USERNAME>

如果,你的webdav服务器使用http而非https,则前缀改为dav://

linux systemd自动挂载

  1. 修改locks
vim /etc/davfs2/davfs2.conf
# use_locks 1
use_locks 0
  1. 设置webdav的帐号和密码
vim /etc/davfs2/secrets
# 在文件末尾添加 
/mnt/yun <USERNAME> <PASSWORD>
# 旧版本使用url,出于兼容性考虑,这两种方法是等效的
# https://yun.example.com/remote.php/dav/files/<USERNAME> <USERNAME> <PASSWORD>
  1. 创建挂载脚本
vim /etc/systemd/system/mnt-yun.mount
[Unit]
Description=Mount personal Nextcloud WebDAV
After=network-online.target
Wants=network-online.target

[Mount]
What=https://yun.example.com/remote.php/dav/files/<USERNAME>
Where=/mnt/yun
Options=noauto,user,uid=<USERNAME>,gid=<USREGROUP>
Type=davfs
TimeoutSec=60

[Install]
WantedBy=remote-fs.target

mnt-<NAME>,挂载单元必须以挂载点的目录命令,这里要挂载的目录名称是yun,所以systemd服务脚本名称是mnt-yun
4. 创建自动挂载脚本

vim /etc/systemd/system/mnt-yun.automount
[Unit]
Description=Mount personal Nextcloud WebDAV automount
After=network-online.target
Wants=network-online.target

[Automount]
Where=/mnt/yun
TimeoutIdleSec=300

[Install]
WantedBy=remote-fs.target
  1. 重新加载systemd配置
systemctl daemon-reload
  1. 启用自动挂载服务
systemctl enable mnt-yun.automount
  1. 激活自动挂载服务
systemctl start mnt-yun.automount

windows挂载

网上搜了有关webdav在windows上挂载的方法,刚好身边有windows7和windows10所以都试了下。windows7的挂载没有成功,最后通过第三方工具 RaiDrive 实现的。
windows10则比较简单了

  1. 打开资源管理器
  2. 选择顶部的映射网络驱动器
  3. 输入webdav路径https://yun.example.com/remote.php/webdav,点击下一步
  4. 输入账号密码
  5. 连接成功

部分教程有提到,windows连接webdav依赖于系统的WebClient服务,而该服务默认配置是只允许https连接,可以通过修改注册表的方式兼容http连接。

  1. 打开注册表(开始菜单-运行-regedit)
  2. 找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters,修改BasicAuthLevel的值为2
  3. 打开系统服务,重新运行WebClient服务
  4. 重新映射网络驱动器

在windows10测试的时候,选择连接一个网络位置并不能连接webdav,只有选择创建网络驱动器才可以连接,这一点有些费解

两步验证与插件安装

nextcloud的默认支持fido的无密码验证,但是如果想使用totp的两步验证则需要安装单独的插件(nextcloud称为app),原本可以通过web界面的应用选项打开应用商店,但是猜测由于一些国情原因,无法正常访问。不过好在nextcloud支持以文件方式安装app。操作流程如下:

  1. 访问nextcloud的应用商店
  2. 搜索Two-Factor TOTP Provider,并下载对应的app压缩包.tar.gz
  3. 解压缩为twofactor_totp文件夹,放在/path/of/nextcloud/data/apps/目录。(此目录与之前docker-compose挂载的目录严格对应)
  4. 重新访问web端界面,在下方会看到该插件,激活就可以。
  5. 点击右上角-设置-安全-生成两步验证备用码,下方启用TOTP打钩。
  6. 手机使用两步验证app扫码,并填入验证码,完成两步验证激活操作。

注意事项
在使用两步验证以后,此前的webdav连接密码将无法使用,可以在刚才步骤5的安全页面最下方设置应用密码,然后将/etc/davfs2/secrets里的密码也更改了,就可以正常使用webdav挂载了。

总结

使用nextcloud也是看重了它支持webdav,在通过webdav连接到nextcoud以后,能很好的操作云端文件,实现文件共享。

相关链接

nextcloud官方文档
docker容器
Linux使用systemd挂载webdav
linux挂载webdav
linux挂载webdav
windows挂载webdav
archwiki中关于webdav的介绍
RaiDrive官网
RaiDrive使用教程