前言
家里部署 NAS 已经好几年了,但是基本只有我一个人再用,总想让老爸放弃他的 360 企业云盘,但是没成功,说 QNAP 默认的 webUI 太难操作了。之前有试过应用商店自带的 nextcloud,但是默认存储路径在系统盘,我的系统盘只有 500g,本身就不够用了,只能作罢。最近在对手上使用的各种服务进行容器化改造方便未来迁移,故而撰写这篇文章记录 nextcloud 的构建过程。
一、部署
1.1 compose 文件配置
关于威联通系统的 container station 就不必过多介绍,唯一的缺点就是不支持 ipv6,希望以后会改进。为了方便部署也为了整合,这里直接使用 docker compose 的方式进行部署,数据库采用 PostgreSQL,中间件采用 Redis。
配置文件参考了 官方文档,但是将数据库实现改为了 postgresql,并增加了 redis 作为缓存组件。其中 postgres 的数据库目录,nextcloud 的数据目录做了挂载卷映射,以便数据的持久化管理,具体路径可根据需求修改,同时加上了时区信息。以下为 compose 文件内容:
yaml123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051version: "3.2" services: db: image: postgres container_name: nextcloud_db restart: unless-stopped volumes: - /path/to/yourdir:/var/lib/postgresql/data # 自行修改 environment: POSTGRES_DB: nextcloud POSTGRES_USER: nextcloud POSTGRES_PASSWORD: your_database_password # 自行修改 TZ: Asia/Shanghai networks: - network_nextcloud redis: image: redis container_name: nextcloud_redis environment: TZ: Asia/Shanghai restart: unless-stopped networks: - network_nextcloud app: image: nextcloud restart: unless-stopped container_name: nextcloud ports: - 25001:80 # 自行修改 volumes: - /path/to/yourdir:/var/www/html # 自行修改 environment: POSTGRES_HOST: db POSTGRES_DB: nextcloud POSTGRES_USER: nextcloud POSTGRES_PASSWORD: your_database_password # 自行修改 NEXTCLOUD_ADMIN_PASSWORD: your_admin_account # 自行修改 NEXTCLOUD_ADMIN_USER: your_admin_password # 自行修改 REDIS_HOST: redis TZ: Asia/Shanghai networks: - network_nextcloud depends_on: - db - redis networks: # 加上 network 的原因是 qnap 会默认为每个 compose 文件提供分离的网络栈,显式指定后方便后续共享 network_nextcloud:
1.2 部署流程
1.2.1 目录准备
通过 控制台-共享文件夹-创建,构建新的共享文件夹,文件夹名称设置为 nextcloud,磁盘自行选择,本文使用了一块 16T 的西数 HC550 硬盘作为存储路径。
随后通过 File station文件总管 在该共享目录中创建 data 和 postgresql/data 两个目录,在 QNAP 系统中的相对路径分别为 /share/nextcloud/data 和 /share/nextcloud/postgresql/data ,最后的目录结构如下所示:
bash1234. ├── postgresql │ └── data └── data
1.2.2 创建容器
通过 Container Station 容器工作站,在创建选项卡中选择右侧的 +创建应用程序 即可使用前文提供的 compose 文件,将其中用户名密码以及存储路径和端口进行相应替换即可。(注意删去文件中的注释,否则无法通过自带的校验功能.)
1.2.3 (option) 配置反向代理
如果你使用了威联通自带的 ddns 服务并配置了 ssl 证书,则可以通过 控制台-网络访问-反向代理 功能为 nextcloud 服务添加 ssl 代理,此处协议为 HTTPS,开启 HSTS,假定 compose 文件中配置的端口为 25001,反向代理所用端口为 21443。(建议对容器端口和代理端口有一个统一的规划)
在配置完反向代理后,需要修改 nextcloud 的 可信域名配置 和 dav 配置,以适配反向代理。可以首先通过 Container Station 容器工作站 的总览找到 nextcloud 所在容器,点击右侧的 终端机 按钮,输入 /bin/bash 进入终端。
进入终端后,执行如下命令修改配置:
bash123456789101112131415161718192021apt update apt install vim # 安装文本编辑器 vi /var/www/html/config/config.php # 执行修改命令,添加以下内容到文件尾部(可信代理) 'trusted_proxies' => array ( 0 => '233.233.233.233.1/24', # 将IP修改为你的nas所对应的静态地址网段 ), 'overwritehost' => 'example.domain:21443', # 修改为前文自行设置的域名和端口 'overwriteprotocol' => 'https', # 保存退出时,在英文输入环境下,使用`shift+:`调出命令行,然后输入`wq`并回车 vi /var/www/html/.htaccess # 执行修改命令,找到并修改以下内容(dav) # 修改前 RewriteRule ^\.well-known/carddav /remote.php/dav/ [R=301,L] # 修改为前文自行设置的域名和端口 RewriteRule ^\.well-known/caldav /remote.php/dav/ [R=301,L] # 修改为前文自行设置的域名和端口 # 修改后 RewriteRule ^\.well-known/carddav https://example.domain:21443/remote.php/dav/ [R=301,L] # 修改为前文自行设置的域名和端口 RewriteRule ^\.well-known/caldav https://example.domain:21443/remote.php/dav/ [R=301,L] # 修改为前文自行设置的域名和端口
1.2.4 修改配置默认
nextcloud 默认地区和语言均为美国,并且未设置电话区域,需要进行修改,参考官方管理手册的 language_configuration 和 default-phone-region。
参考上一节进入容器的命令行,并执行如下命令:
bash1234567vi /var/www/html/config/config.php # 执行修改命令 #添加以下内容到文件尾部(语言区域) 'default_language' => 'zh_CN', 'default_locate' => 'zh', #添加以下内容到文件尾部(电话区域) 'default_phone_region' => 'CN',
1.2.5 (option) 修改定时策略
nextcloud 默认的定时策略为 ajax,官方推荐修改为 Cron。(官方手册的修改方式存在问题,无法使用.)
首先参考 1.2.3 节进入终端,执行如下命令:
bash123456apt install cron # 安装定时任务工具 apt install vim # 如果没有执行2.2.3节内容,则需要安装文本编辑器 service cron start # 启动定时任务服务 crontab -e # 修改定时任务,添加以下内容 */5 * * * * su www-data -s /bin/bash -c "/usr/local/bin/php /var/www/html/cron.php"
接下来通过之前设置的网页和端口进入 nextcloud 网页,登录后点击右上方头像,在 管理设置-基本设置-后台任务 中将方式改为 cron。
1.2.6 (option) 配置邮件服务
同样在在 管理设置-基本设置 中,可以对 电子邮件服务进行配置,这里推荐使用阿里云的邮件推送服务,我尝试使用企业邮箱的 smtp 代理时,总提示连接失败。
1.2.7 (option) 添加外部存储服务
nextcloud 可以通过 smb 等方式连接外部存储,这样就不需要将 NAS 中的每个需要的目录都映射到 docker 中,只需要以 smb 的形式进行挂载,就可以动态的配置文件。
具体配置过程如下:
- 进入
nextcloud网页,登录后点击右上方头像,在应用中找到精选应用,在应用列表中选择下载并启用External storage support。 docker中默认未安装smbclient,需要参考前文进入容器命令行,执行apt install smbclient。- 重新进入
nextcloud网页,登录后点击右上方头像,在管理设置-外部存储中添加smb目录。
二、总结
nextcloud 作为一款发行多年的开源私人存储管理软件,提供了多平台的客户端,同时上手难度远低于 qnap 自带的文件管理体系,配置好服务以后只需要简单的安装 app 或访问网页就可以管理文件。