前言
厌倦了百度云的限速、阿里云的存储付费,又担心手机相册、工作文件存在第三方平台的隐私泄露风险?那 Nextcloud 绝对是你的理想选择。
它是一款开源免费、功能全能的私有云盘解决方案,既能部署在个人服务器、NAS(如群晖、威联通)上,也支持多端同步(Windows、Mac、手机、网页),文件存储、共享、备份一站式搞定。
和第三方网盘比,Nextcloud 的优势肉眼可见:
- 数据完全私有:存在自己的设备上,不经过第三方服务器,隐私零风险
- 无限速无广告:上传下载速度取决于自己的带宽,没有隐藏消费
- 拓展性极强:支持插件扩展(如相册管理、办公协作、视频预览、密码管理器)
- 多场景适配:家庭文件共享、个人数据备份、小型团队协作都能用
如果你想摆脱第三方网盘的束缚,用 Docker 快速搭建一套属于自己的私有云盘,跟着这篇教程做,新手也能轻松上手!
准备工作
在开始部署前,先确认你的设备满足以下条件:
- 已安装 Docker 和 Docker Compose
- 服务器 / NAS 有足够存储空间(建议至少 10GB,根据存储需求调整)
- 开放目标端口(默认 28080,可自定义)
为了方便管理配置和数据,先创建独立的工作目录:
# 自定义路径,可修改为自己习惯的目录
mkdir -p ~/docker/nextcloud
# 进入目录
cd ~/docker/nextcloud
需要开放 Nextcloud 的访问端口(28080)和 Redis 缓存端口(6379):
# 开放28080端口(Nextcloud访问)
sudo ufw allow 28080/tcp comment 'nextcloud访问端口' && sudo ufw reload
# 开放6379端口(Redis缓存,可选,容器内部通信可省略)
sudo ufw allow 6379/tcp comment 'nextcloud Redis缓存' && sudo ufw reload
官方提供两种主流镜像,根据需求选择:
- 基础镜像(
nextcloud:latest):基于 Apache,仅包含核心功能,体积小、部署快,适合普通用户 - 完整镜像(需自行构建):包含 ffmpeg、ImageMagick 等工具,支持视频预览、图片处理等高级功能,适合有多媒体存储需求的用户
完整镜像构建参考:Nextcloud 官方完整镜像示例,按文档执行docker build即可。
Docker Compose部署服务
在~/docker/nextcloud目录下创建配置文件:
vim docker-compose.yml
以下配置使用 DaoCloud 镜像加速,避免国内拉取镜像缓慢,关键参数已标注说明:
services:
# 数据库容器(MariaDB,兼容MySQL)
db:
image: docker.m.daocloud.io/mariadb:latest
restart: always # 自动重启
# 数据库核心参数,确保Nextcloud兼容
command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
volumes:
- ./db:/var/lib/mysql # 数据持久化到本地,容器重启不丢失
environment:
- MYSQL_ROOT_PASSWORD=nextcloud_password_root # 数据库root密码,需修改(禁止含$字符)
- MYSQL_PASSWORD=nextcloud_password # Nextcloud数据库用户密码,需修改(禁止含$字符)
- MYSQL_DATABASE=nextcloud # 数据库名,建议默认
- MYSQL_USER=nextcloud # 数据库用户,建议默认
networks:
- default
# Redis缓存容器(提升Nextcloud访问速度)
cache:
image: docker.m.daocloud.io/redis
restart: unless-stopped
expose:
- "6379" # 容器内部暴露端口,无需映射到主机
volumes:
- ./cache:/data # 缓存数据持久化
command: redis-server --requirepass 'redis_password' # Redis密码,需修改(禁止含$字符)
networks:
- default
# Nextcloud应用容器
app:
image: docker.m.daocloud.io/nextcloud
restart: always
ports:
- 28080:80 # 端口映射(主机:容器),28080可自定义
links:
- db # 关联数据库容器
- cache # 关联Redis缓存容器
volumes:
- ./app:/var/www/html # 应用配置和文件存储目录
environment:
- MYSQL_PASSWORD=nextcloud_password # 与数据库的MYSQL_PASSWORD一致
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db # 数据库容器名称
networks:
- default
# 自定义网络,隔离容器环境
networks:
default:
name: nextcloud
- 所有密码(
MYSQL_ROOT_PASSWORD、MYSQL_PASSWORD、redis_password)需修改为复杂密码,禁止包含$字符,否则会导致配置失效。 - 端口映射:若 28080 端口已被占用,可修改为其他端口(如
28081:80)。 - 存储目录:
./db、./app、./cache分别对应数据库、应用文件、缓存数据,建议确保目录有足够权限(可执行chmod 775 ./*临时授权)。
保存配置文件后,执行以下命令启动容器:
# 后台启动服务
docker-compose up -d
启动成功后,检查容器状态(确保app、db、cache均为Up状态):

反向代理:用域名访问并启用 HTTPS
部署成功后,在浏览器中输入 NAS_IP:28080 即可进行访问。直接通过IP:端口访问不够安全,也不便于记忆,建议配置反向代理,绑定域名并启用 HTTPS。

在域名托管商(如阿里云、腾讯云)将域名(如nextcloud.example.com)解析到服务器 IP。
可以通过宝塔面板/NPM等工具对域名反向代理,将域名反向代理到本地的28080端口,将本地服务暴露到域名上,这样就可以通过域名访问本地的nextcloud服务。
如果将 Nextcloud 部署在群晖 NAS 上,可通过 Web Station 快速配置反向代理:
部署 Nextcloud 时,勾选 “通过 Web Station 设置网页门户”:

群晖会自动创建网页服务,绑定 28080 端口:

接下来,在网页服务门户界面,选择新增网页门户,选择上一步创建的网页服务,门户类型选择基于名称,主机名就填之前解析好域名nextcloud.example.com。

这一步的操作和NPM/nginx原理上是一样的,不过是群晖将其集成到可视化界面Web Station里了。
关键配置:解决 “不信任域名” 问题
配置反向代理后,直接访问域名可能会出现 “不被信任的域名” 提示,需修改 Nextcloud 的配置文件授权域名。

配置文件路径为:~/docker/nextcloud/app/config/config.php(群晖 NAS 路径需对应 Docker 挂载目录)。
编辑文件,添加域名到trusted_domains数组,并补充 HTTPS 相关配置:
'trusted_domains' =>
array (
0 => '192.168.1.100:28080', # 服务器/NAS内网IP+端口
1 => 'nextcloud.example.com', # 你的域名
),
'datadirectory' => '/var/www/html/data',
'dbtype' => 'mysql',
'version' => '32.0.1.2',
'overwritehost' => 'nextcloud.example.com', # 域名
'overwriteprotocol' => 'https', # 强制HTTPS
'overwrite.cli.url' => 'https://nextcloud.example.com', # 完整域名
'redis' => array( # 启用Redis缓存(提升性能)
'host' => 'cache',
'port' => 6379,
'password' => 'redis_password', # 与docker-compose中的Redis密码一致
),
修改配置后,重启容器使配置生效。这样就可以通过nextcloud.example.com域名访问Nextcloud服务了。
进入初始化页面,第一次登录需要设置管理员账号和密码(建议强密码,保管好)。

设置完成后初始化需要的时间较长,耐心等待后进入主界面,如下图所示,这样就完成安装了。

公网访问:无公网 IPv4?IPv6 转 IPv4 方案(可选)
很多家庭宽带只有 IPv6,无法在 IPv4 网络(如公共场所 WiFi)访问内网 Nextcloud,推荐用腾讯云 EdgeOne 或 Cloudflare 实现 IPv6-IPv4 转发。
我这里选择使用腾讯云的EdgeOne的CDN服务进行IPV6-IPV4的转发,效果和cloudflare的cdn是类似的,我用腾讯云的EdgeOne服务单纯是为了国内访问快一点,cloudflare提供的免费cdn在国内有时还是挺卡的。这里可以参考我之前的一篇文章2025最新版:基于腾讯云EdgeOne 的 IPv6 内网穿透指南(无公网 IPv4 也能实现博客 + 图床公网访问) - 阿雷的小窝。
这里需要使用到两个域名,第一个域名synology.example.com,用于DDNS-GO指向本地的IPV6地址。第二个域名nextcloud.example.com,为我们配置反向代理的域名。
- 配置 DDNS-GO:将动态 IPv6 地址绑定到域名(如
synology.example.com),确保内网服务可通过固定域名访问。

用两个域名的原因是腾讯云EdgeOne设置回源时,需要填IP地址或者域名,而群晖的IPV6地址是动态的,设置地址显然不行,只能曲线救国通过回源DDNS-GO设置的域名来实现,这样就实现了外网无ipv6也能访问本地的nextcloud服务。
- 配置腾讯云 EdgeOne:
- 源站类型选择 “域名”,填写 DDNS 绑定的域名(
synology.example.com)。 - 开启 “IPv6 回源” 和 HTTPS,实现 IPv6-IPv4 转换。

- 访问方式:通过 Nextcloud 域名(
nextcloud.example.com)即可在任何网络访问,CDN 还能提升访问速度。
小结
Nextcloud 作为开源私有云盘的标杆,不仅解决了第三方网盘的隐私和限速问题,还能通过插件拓展功能。无论是家庭文件共享、个人数据备份,还是小型团队协作,都能完美适配。
通过 Docker 部署,简化了环境配置;配合反向代理和 CDN,实现了公网安全访问。按照本文步骤,你也能拥有一套数据完全可控、使用无限制的私有云盘服务!