前言
家里部署 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 或访问网页就可以管理文件。