被网盘限速逼疯后,我花了一个下午搭了个属于自己的"私有云"
事情的起因很俗套——我被某度盘的限速再一次搞破防了。
那天晚上赶着给客户传一个项目文件,不到 800MB 的东西,下载速度死死卡在 60KB/s。我盯着进度条看了十分钟,进度条纹丝不动地回望着我,仿佛在说:"你充会员啊。"
说实话,这些年我也不是没充过会员。但问题是,充了会员之后呢?你的文件放在别人的服务器上,人家说审查就审查,说和谐就和谐。我之前存的一些学习资料,隔三差五就变成一个"违规文件已失效"的提示,连个通知都没有。
后来跟一个搞运维的朋友吃饭,聊到这个事,他说:"你搞台服务器,自己装个 Nextcloud,啥问题都解决了。"
于是就有了今天这篇东西。
Nextcloud 到底是个什么东西
先简单说一下,Nextcloud 是一个开源的私有云盘系统。你可以把它理解成一个"自己部署的百度网盘 + 飞书 + 日历"的集合体。
它能干嘛呢?我列几个我实际在用的:
- 文件存储和同步:这是基本功能,支持 Windows、macOS、Linux 桌面客户端,也有 iOS 和 Android 手机 APP。你在电脑上改了文件,手机上自动同步,反过来也一样。
- 文件分享:生成一个链接发给别人,可以设置密码、有效期,跟某度盘的分享体验差不多,但没有限速。
- WebDAV 支持:这个功能我特别喜欢。简单说就是你可以把 Nextcloud 的云端存储直接挂载到电脑上当一个网络磁盘用,在"我的电脑"里就能直接操作云端文件。
- 在线预览和编辑:图片、视频、PDF、Office 文档都能在线预览,装了对应的插件还能在线编辑。
- Nextcloud Talk:类似飞书/钉钉的音视频通话功能,支持群聊和屏幕共享。
- 日历和通讯录:可以跟手机、Outlook 等同步,替代 Google 日历。
- 应用商店:有几百个插件可以装,什么思维导图、密码管理、笔记、RSS 阅读器……可玩性很高。
目前最新版本是 33.0.1(2026 年 3 月 27 日刚发布的),迭代非常活跃。整个项目在 GitHub 上有几万个 star,社区也挺活跃的。
我觉得最核心的一点是:数据完全在你自己手里。没有审查,没有限速,没有"您的文件涉嫌违规"。这对我来说,比什么都重要。
部署前的准备
在开始之前,你需要准备几样东西:
一台服务器。最低配置的话,1 核 2G 内存其实就能跑起来,但我建议至少 2 核 4G,用起来会流畅很多。我自己用的是一台 2 核 4G 的云服务器,系统选的 Ubuntu 22.04。硬盘的话,看你需要存多少东西,我给了 100GB SSD。
一个域名(可选但强烈建议)。用 IP 加端口访问当然也行,但有个域名会方便很多,而且配 HTTPS 也更顺畅。域名不贵,一年几十块钱的事。
Docker 和 Docker Compose。这两个是部署的前提,安装方法也很简单。
先装 Docker
# 更新一下软件源
sudo apt update
# 安装 Docker
curl -fsSL https://get.docker.com | sudo sh
# 启动 Docker 并设为开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 验证一下,看到版本号就说明装好了
docker --version
验证安装成功的示意:
$ docker --version
Docker version 27.5.1, build 9f9e405
$ sudo systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled)
Active: active (running) since Sat 2026-03-28 10:00:00 CST
再确认 Docker Compose
现在新版 Docker 自带了 Compose 插件,直接用 docker compose(注意没有横杠)就行:
docker compose version
如果能输出版本号,就说明没问题。如果提示找不到命令,可以手动装一下:
sudo apt install docker-compose-plugin
核心:docker-compose.yml 文件
这一步是最关键的。我们需要创建一个 docker-compose.yml 文件,把 Nextcloud 本体、数据库、缓存服务一次性全配好。
先建一个工作目录:
mkdir -p /opt/nextcloud
cd /opt/nextcloud
然后创建配置文件:
vim docker-compose.yml
把下面的内容粘贴进去(记得把密码改成你自己的):
services:
db:
image: mariadb:11
container_name: nextcloud-db
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=你的ROOT密码
- MYSQL_PASSWORD=你的数据库密码
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
networks:
- nextcloud-net
redis:
image: redis:7-alpine
container_name: nextcloud-redis
restart: always
networks:
- nextcloud-net
app:
image: nextcloud:apache
container_name: nextcloud-app
restart: always
ports:
- "18081:80"
links:
- db
- redis
volumes:
- nextcloud_data:/var/www/html
- ./custom_apps:/var/www/html/custom_apps
- ./config:/var/www/html/config
environment:
- MYSQL_HOST=db
- MYSQL_PASSWORD=你的数据库密码
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- REDIS_HOST=redis
- NEXTCLOUD_ADMIN_USER=admin
- NEXTCLOUD_ADMIN_PASSWORD=你的管理员密码
- NEXTCLOUD_TRUSTED_DOMAINS=你的域名或者服务器IP
depends_on:
- db
- redis
networks:
- nextcloud-net
volumes:
db_data:
nextcloud_data:
networks:
nextcloud-net:
💡 快速生成安全密码:可以用
openssl rand -base26 16快速生成随机密码,安全性远高于手动设置。
有几个地方我想提醒一下,因为这些都是我实际踩过的坑:
第一,Redis 一定要加。 你可能会想"我先不加 Redis 试试",我劝你别。不加 Redis 的 Nextcloud 用起来那个慢啊,打开个文件夹都要转半天圈。加了 Redis 缓存之后速度提升非常明显,基本是质的飞跃。
第二,数据库选 MariaDB,别选 SQLite。 Nextcloud 默认支持 SQLite,看起来省事,但数据量一多就会变得非常慢。MariaDB 是官方推荐的搭配,性能好很多。MySQL 也行,但 MariaDB 兼容性更好一些。
第三,密码别用太简单的。 这里有三个密码要设(数据库 root 密码、数据库用户密码、管理员密码),别偷懒全用 123456,毕竟这是你自己的私有云,安全还是要顾一下的。
第四,记得放行18081端口。 如果时云服务器需要在服务商后台和服务器安全组放行18081端口,若是局域网设备部署,仅需在安全组放行18081。
启动!跑起来看看
配置文件写好之后,在 /opt/nextcloud 目录下执行:
docker compose up -d
第一次运行会下载三个镜像,根据你的网络速度,可能需要几分钟到十几分钟不等。耐心等一下就好。
[+] Pulling 3/3
✔ db Pulled 45.2s
✔ redis Pulled 12.8s
✔ app Pulled 68.3s
[+] Running 4/4
✔ Network nextcloud_nextcloud-net Created 0.1s
✔ Container nextcloud-redis Started 0.5s
✔ Container nextcloud-db Started 0.5s
✔ Container nextcloud-app Started 1.2s
下载完成后,三个容器就自动启动了。你可以用以下命令确认一下状态:
docker compose ps
如果三个服务的 Status 都显示 Up(healthy),那就说明一切正常:
NAME IMAGE STATUS PORTS
nextcloud-app nextcloud:apache Up (healthy) 0.0.0.0:18081->80/tcp
nextcloud-db mariadb:11 Up (healthy) 3306/tcp
nextcloud-redis redis:7-alpine Up (healthy) 6379/tcp
然后打开浏览器,访问:
http://你的服务器IP:18081
如果一切顺利,你会看到 Nextcloud 的登录页面。用你在 compose 文件里配置的管理员账号密码登录,就进入后台了。
默认用户名为:admin,密码为compose中设置的管理员密码。

我第一次搞的时候在这一步卡了一会儿。 原因是我服务器上之前跑了个 Nginx,占用了 8080 端口,然后我 compose 里映射到 8080 端口就冲突了。折腾了半天才发现问题,改成 18081 就好了。所以提醒大家,端口号别跟已有服务撞了。
🔍 端口冲突排查:如果遇到端口占用,用
sudo lsof -i :80或sudo ss -tlnp | grep :80查看是谁占用了端口。
进阶:配 HTTPS(强烈建议)
如果你打算长期使用,HTTPS 是一定要配的。原因很简单:没有 HTTPS 的话,你在外面用手机连你的云盘,传输的数据都是明文的,不太安全。若单纯在家里使用,可忽略该步骤。
最简单的方案是用 Caddy 做反向代理,它能自动申请和续期 Let's Encrypt 证书,基本不用手动操心。
完整的 docker-compose.yml(含 Caddy)
在之前的配置基础上,加上 Caddy 服务:
services:
db:
image: mariadb:11
container_name: nextcloud-db
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=你的ROOT密码
- MYSQL_PASSWORD=你的数据库密码
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
networks:
- nextcloud-net
redis:
image: redis:7-alpine
container_name: nextcloud-redis
restart: always
networks:
- nextcloud-net
app:
image: nextcloud:apache
container_name: nextcloud-app
restart: always
# 去掉 ports 映射,改由 Caddy 代理
# ports:
# - "18081:80"
links:
- db
- redis
volumes:
- nextcloud_data:/var/www/html
- ./custom_apps:/var/www/html/custom_apps
- ./config:/var/www/html/config
environment:
- MYSQL_HOST=db
- MYSQL_PASSWORD=你的数据库密码
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- REDIS_HOST=redis
- NEXTCLOUD_ADMIN_USER=admin
- NEXTCLOUD_ADMIN_PASSWORD=你的管理员密码
- NEXTCLOUD_TRUSTED_DOMAINS=cloud.yourdomain.com
depends_on:
- db
- redis
networks:
- nextcloud-net
caddy:
image: caddy:2-alpine
container_name: nextcloud-caddy
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile:ro
- caddy_data:/data
- caddy_config:/config
networks:
- nextcloud-net
volumes:
db_data:
nextcloud_data:
caddy_data:
caddy_config:
networks:
nextcloud-net:
创建 Caddyfile
cat > /opt/nextcloud/Caddyfile << 'EOF'
cloud.yourdomain.com {
reverse_proxy app:80
header {
Strict-Transport-Security "max-age=31536000; includeSubDomains"
X-Content-Type-Options "nosniff"
X-Frame-Options "SAMEORIGIN"
Referrer-Policy "no-referrer"
}
log {
output file /data/access.log
}
}
EOF
DNS 配置
在你的域名管理后台,添加一条 A 记录:
类型: A
主机记录: cloud
记录值: 你的服务器IP
TTL: 600
⚠️ 域名必须正确解析到你的服务器 IP,否则 Caddy 无法自动申请 SSL 证书。
配置好 DNS 后,重启所有服务:
cd /opt/nextcloud
docker compose up -d
Caddy 会自动帮你申请 SSL 证书,大概等个几十秒就能用 https://cloud.yourdomain.com 访问了。整个过程完全自动化,不需要手动配置证书,这是我比较推荐 Caddy 的原因——省心。
验证 HTTPS 是否生效
# 检查证书状态
curl -I https://cloud.yourdomain.com
# 应该看到类似输出:
# HTTP/2 200
# strict-transport-security: max-age=31536000; includeSubDomains
📚 实用教程篇
接下来是这篇教程的重头戏——各种实际操作的详细教程。

教程一:桌面客户端安装与文件同步
装完 Nextcloud 服务端只是第一步,要真正用起来,客户端才是日常打交道最多的工具。
Windows / macOS 客户端
第一步:下载客户端
前往 Nextcloud 官网下载页面:https://nextcloud.com/install/#install-clients
选择对应的系统版本下载安装。

安装过程就是普通的下一步下一步,没有坑。
第二步:首次配置连接
安装完成后启动客户端,会弹出一个窗口:

点击“登录”

填入你的 Nextcloud 地址(如 https://cloud.yourdomain.com),点击登录,会跳转到浏览器进行 OAuth 授权。输入你的用户名密码,授权客户端访问即可。

第三步:选择同步文件夹
授权通过后,客户端会问你要同步哪些内容:

💡 推荐选择「虚拟文件」模式。这个模式很省空间——文件在本地只显示一个占位图标,点开时才真正下载。适合硬盘空间紧张的情况。1TB 的云端数据,在本地可能只占几 GB。
第四步:开始同步
配置完成后,客户端会自动开始同步。你可以在系统托盘看到 Nextcloud 图标:
- 🟢 绿色对勾 = 已同步
- 🔵 蓝色圆圈 = 正在同步
- ⚠️ 黄色感叹号 = 有冲突需要处理
Linux 客户端
Linux 用户可以用命令行安装:
# Ubuntu / Debian
sudo add-apt-repository ppa:nextcloud-devs/client
sudo apt update
sudo apt install nextcloud-desktop
# 或者用 AppImage(不依赖发行版)
# 从官网下载 .AppImage 文件
chmod +x Nextcloud-*-x86_64.AppImage
./Nextcloud-*-x86_64.AppImage
手机 APP 配置
Android:在 Google Play 或 F-Droid 搜索 "Nextcloud" 安装。
iOS:在 App Store 搜索 "Nextcloud" 安装。
安装后打开 APP,输入服务器地址和账号密码即可。首次使用建议进入设置:
设置 → 自动上传 → 开启照片自动上传
├── 上传路径: /Photos/手机备份
├── 仅 Wi-Fi 下上传: ✅ 开启
└── 充电时才上传: ✅ 开启(省电)
这样你的手机照片就能自动备份到私有云了,再也不怕换手机丢照片。
教程二:WebDAV 挂载——把云端变成"本地硬盘"
这是我最喜欢的功能之一。通过 WebDAV,你可以把 Nextcloud 的存储空间挂载到电脑上,像操作本地硬盘一样操作云端文件。
Windows 挂载方法
方法一:通过资源管理器(最简单)
-
打开「此电脑」→ 右键空白处 →「添加一个网络位置」
-
在向导中选择「自定义网络位置」,输入 WebDAV 地址:
https://cloud.yourdomain.com/remote.php/dav/files/你的用户名/
-
输入你的 Nextcloud 用户名和密码
-
完成后,「此电脑」里会多出一个网络位置,可以直接拖拽文件
⚠️ Windows 原生 WebDAV 有限制,单文件不能超过 47MB,且速度较慢。
macOS 挂载方法
macOS 原生支持 WebDAV,操作更简单:
# 方法一:通过 Finder
# Finder → 前往 → 连接服务器(⌘K)
# 输入: https://cloud.yourdomain.com/remote.php/dav/files/你的用户名/
# 方法二:通过命令行挂载
mkdir -p ~/NextcloudMount
mount_webdav -s -v Nextcloud https://cloud.yourdomain.com/remote.php/dav/files/你的用户名/ ~/NextcloudMount
Linux 挂载方法
# 安装 davfs2
sudo apt install davfs2
# 创建挂载点
mkdir -p ~/NextcloudMount
# 挂载
sudo mount -t davfs https://cloud.yourdomain.com/remote.php/dav/files/你的用户名/ ~/NextcloudMount
# 如果想开机自动挂载,编辑 /etc/fstab:
# https://cloud.yourdomain.com/remote.php/dav/files/你的用户名/ /home/你的用户名/NextcloudMount davfs user,noauto 0 0
教程三:安装 OnlyOffice——在线编辑文档
Nextcloud 默认只能预览文档,要在线编辑 Word/Excel/PPT,需要安装 OnlyOffice 集成插件。
第一步:部署 OnlyOffice Document Server
在你的 docker-compose.yml 中添加 OnlyOffice 服务:
onlyoffice:
image: onlyoffice/documentserver:latest
container_name: nextcloud-onlyoffice
restart: always
environment:
- JWT_ENABLED=true
- JWT_SECRET=你的JWT密钥(随便写一串复杂的字符)
networks:
- nextcloud-net
如果用了 Caddy 做反向代理,还需要在 Caddyfile 里加上 OnlyOffice 的路由:
# 在 Caddyfile 中添加第二个站点
office.yourdomain.com {
reverse_proxy onlyoffice:80
header {
X-Forwarded-Proto "https"
}
}
DNS 也要加一条 A 记录指向 office.yourdomain.com。
然后启动:
docker compose up -d onlyoffice
💡 OnlyOffice 镜像比较大(约 2-3GB),第一次拉取需要一些时间。
第二步:在 Nextcloud 中配置
- 以管理员身份登录 Nextcloud
- 点击右上角头像 → 应用

- 在左侧菜单找到「Office & text」分类
- 找到 Community Document Server 或 ONLYOFFICE,点击「下载并启用」
- 启用后,进入「设置」→「管理」→「ONLYOFFICE」
- 填入配置:
Document Server 地址: https://office.yourdomain.com
Secret Key (JWT): 你刚才设置的JWT密钥
- 点击「保存」
第三步:测试使用
回到 Nextcloud 文件列表,右键点击任意 .docx / .xlsx / .pptx 文件,你会看到新增的选项:
右键菜单
├── 打开
├── 下载
├── 分享
├── ──────────
├── 在 ONLYOFFICE 中编辑 ← 新增的!
└── ──────────
详情
点击后会打开在线编辑器,界面类似 Microsoft Office,支持多人实时协作编辑。
⚠️ OnlyOffice 比较吃内存,建议服务器至少 4G 内存。如果内存紧张,可以考虑用 Collabora Online 作为替代方案,内存占用更低。
教程四:用户管理——给家人/团队开账号
私有云的一个重要用途就是给家人或小团队共享,这就涉及到用户管理。
创建新用户
- 点击右上角头像 → 设置 → 账号 → 所有账号
- 点击左上角「+ 新建账号」按钮

建议创建不同的用户组来管理权限:
用户组设置
├── family(家人)
│ ├── 存储配额: 20 GB
│ └── 可访问: /Family 共享文件夹
├── work(同事)
│ ├── 存储配额: 10 GB
│ └── 可访问: /Work 共享文件夹
└── friends(朋友)
├── 存储配额: 2 GB
└── 可访问: /Public 文件夹
设置共享文件夹
- 管理员创建一个文件夹(如「家庭共享」)
- 右键 → 详情 → 共享
- 输入要共享的用户或用户组名
- 设置权限(读取 / 编辑 / 上传)

教程五:自动备份脚本
自建服务最大的风险就是数据丢失。这里提供一个实用的备份方案。
备份脚本
创建备份脚本 /opt/nextcloud/backup.sh:
#!/bin/bash
# Nextcloud Docker 自动备份脚本
# 每周执行一次,保留最近 4 周的备份
set -e
# ========== 配置 ==========
BACKUP_DIR="/opt/nextcloud/backups"
NEXTCLOUD_DIR="/opt/nextcloud"
KEEP_BACKUPS=4 # 保留最近几份备份
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_NAME="nextcloud_backup_${DATE}"
# ==========================
echo "=== Nextcloud 备份开始: $(date) ==="
# 创建备份目录
mkdir -p "${BACKUP_DIR}"
# 1. 进入维护模式(防止备份期间有写入)
echo "[1/5] 进入维护模式..."
docker exec -u www-data nextcloud-app php occ maintenance:mode --on
# 2. 备份数据库
echo "[2/5] 备份 MariaDB 数据库..."
docker exec nextcloud-db mysqldump \
-u nextcloud \
-p你的数据库密码 \
--single-transaction \
nextcloud > "${BACKUP_DIR}/${BACKUP_NAME}_db.sql"
# 3. 备份 Nextcloud 数据卷
echo "[3/5] 备份文件数据..."
docker run --rm \
-v nextcloud_nextcloud_data:/source:ro \
-v "${BACKUP_DIR}":/backup \
alpine tar czf "/backup/${BACKUP_NAME}_data.tar.gz" -C /source .
# 4. 备份配置文件
echo "[4/5] 备份配置文件..."
tar czf "${BACKUP_DIR}/${BACKUP_NAME}_config.tar.gz" \
-C "${NEXTCLOUD_DIR}" \
docker-compose.yml \
Caddyfile \
config/ \
custom_apps/
# 5. 退出维护模式
echo "[5/5] 退出维护模式..."
docker exec -u www-data nextcloud-app php occ maintenance:mode --off
# 清理旧备份
echo "清理 ${KEEP_BACKUPS} 周前的旧备份..."
cd "${BACKUP_DIR}"
ls -t nextcloud_backup_*_db.sql 2>/dev/null | tail -n +$((KEEP_BACKUPS + 1)) | while read f; do
BASE=$(echo "$f" | sed 's/_db\.sql$//')
echo "删除旧备份: ${BASE}"
rm -f ${BASE}_db.sql ${BASE}_data.tar.gz ${BASE}_config.tar.gz
done
echo "=== 备份完成: $(date) ==="
echo "备份大小: $(du -sh ${BACKUP_DIR}/${BACKUP_NAME}_* | awk '{s+=$1}END{print s}')"
设置权限并测试:
chmod +x /opt/nextcloud/backup.sh
# 先手动跑一次确认没问题
sudo /opt/nextcloud/backup.sh
设置定时任务
# 编辑 crontab
crontab -e
# 添加:每周日凌晨 3 点自动备份
0 3 * * 0 /opt/nextcloud/backup.sh >> /opt/nextcloud/backups/backup.log 2>&1
备份到远程服务器(可选加强)
如果你想把备份同步到另一台机器:
# 在 backup.sh 末尾添加:
echo "同步到远程备份服务器..."
rsync -avz --delete \
"${BACKUP_DIR}/" \
backup-user@备份服务器IP:/path/to/nextcloud-backups/
恢复备份
万一需要恢复:
# 1. 停止服务
cd /opt/nextcloud
docker compose down
# 2. 恢复数据库
docker compose up -d db
sleep 10 # 等数据库启动
docker exec -i nextcloud-db mysql -u nextcloud -p你的数据库密码 nextcloud < backups/nextcloud_backup_日期_db.sql
# 3. 恢复文件数据
docker volume rm nextcloud_nextcloud_data
docker volume create nextcloud_nextcloud_data
docker run --rm \
-v nextcloud_nextcloud_data:/target \
-v /opt/nextcloud/backups:/backup \
alpine tar xzf /backup/nextcloud_backup_日期_data.tar.gz -C /target
# 4. 启动所有服务
docker compose up -d
# 5. 修复文件权限和索引
docker exec -u www-data nextcloud-app php occ maintenance:repair
docker exec -u www-data nextcloud-app php occ files:scan --all
实际用下来的感受
部署完到现在差不多用了两个月,说说我的真实体验。
好的地方
同步速度是真的快。 因为走的是你自己的服务器带宽,不存在限速的说法。我试过传一个 5GB 的视频素材,上传速度基本跑满了我服务器的带宽,几分钟就搞定了。下载也是,手机 4G 网络下也能跑到几 MB/s。
桌面客户端用起来很舒服。 Windows 上装了同步客户端之后,指定一个本地文件夹,它就会自动跟云端保持双向同步。体验跟 OneDrive 差不多,但没有任何广告和弹窗。
WebDAV 挂载是神器。 我在 Windows 上把 Nextcloud 挂载成了一个网络驱动器,盘符显示为 Z 盘,操作起来跟本地硬盘一样。平时写文档直接存到 Z 盘就自动同步了,非常方便。
应用商店有很多好玩的东西。 我装了 OnlyOffice(在线编辑 Office 文档)、Deck(看板式项目管理)、Notes(笔记)、Passwords(密码管理)。基本上能替代好几个单独的工具。
说说不太满意的地方
低配服务器确实会有点卡。 这是我必须说实话的地方。如果你用的是 1 核 2G 的机器,第一次打开大文件夹会有明显的加载延迟,缩略图生成也比较慢。加了 Redis 之后好了很多,但还是比不上大厂云盘那种丝滑感。建议至少 2 核 4G。
手机 APP 的体验一般。 能用,但离"好用"还有距离。有时候上传大文件会莫名中断,需要手动重试。界面设计也不够精致,跟 iOS 原生的文件 APP 比差距明显。不过基本功能是够用的。
备份要自己操心。 这是自建服务的通病。公有云盘至少有冗余存储,你自己搞的话,硬盘炸了就真的全没了。我目前的方案是写了个简单的备份脚本,每周把 Docker volume 数据打包备份到另一台机器上。稍微麻烦点,但安心。
某些应用的中文支持不太好。 应用商店里有些插件的界面中英文混杂,甚至有些完全没翻译。不影响使用,但看着有点粗糙。
费用算一笔账
这个可能是很多人关心的。我算一下我的实际开销:
- 服务器:4核8G旧电脑,24W24H全天候开机,一年一百多电费
- 域名:无域名,纯内网使用
- 总成本:一年一百多
若使用云服务的情况,预估有以下成本:
- 服务器:2 核 4G,100GB SSD,一年大概 300-500 元(不同厂商价格不同,阿里云、腾讯云的轻量应用服务器经常有活动价)
- 域名:一年 30-60 元
- Nextcloud 本身:免费,开源的
- 总成本:一年 350-560 元左右
对比一下某度盘超级会员:一个月 30 元,一年 360 元。价格其实差不多,但你得到了完全的自由和隐私。
当然如果你本来就有闲置的 NAS 或者旧电脑,那就更省了,只花电费和域名的钱。
常见问题排查(FAQ)
Q1: 打开页面报 "Access through untrusted domain" 错误
这是因为你访问的域名没有加到信任列表。解决方法:
# 编辑 config.php 添加信任域名
docker exec -u www-data nextcloud-app php occ config:system:set \
trusted_domains 1 --value="你的域名或IP"
# 或者直接在 docker-compose.yml 的环境变量中添加
# NEXTCLOUD_TRUSTED_DOMAINS=域名1 域名2 IP地址
Q2: 上传大文件失败
默认上传限制是 512MB,需要调整 PHP 配置:
# 创建自定义 PHP 配置
cat > /opt/nextcloud/config/custom-php.ini << 'EOF'
upload_max_filesize = 16G
post_max_size = 16G
max_execution_time = 3600
memory_limit = 1G
EOF
# 在 docker-compose.yml 的 app 服务中添加:
# volumes:
# - ./config/custom-php.ini:/usr/local/etc/php/conf.d/custom.ini:ro
# 重启服务
docker compose restart app
同时在 Nextcloud 设置中调整:
- 设置 → 管理 → 系统 → 文件上传限制
Q3: 服务启动后一直显示 "正在初始化"
可能原因:
- 数据库还没准备好——等几分钟再刷新
- 数据库密码不一致——检查
MYSQL_PASSWORD是否一致 - Redis 连接失败——检查 Redis 容器是否正常
# 查看日志排查问题
docker compose logs app --tail=50
docker compose logs db --tail=20
Q4: 健康检查一直显示 unhealthy
# 手动检查 Nextcloud 状态
docker exec -u www-data nextcloud-app php occ status
# 修复常见问题
docker exec -u www-data nextcloud-app php occ maintenance:repair
docker exec -u www-data nextcloud-app php occ files:scan --all
Q5: 忘记管理员密码
# 重置管理员密码
docker exec -u www-data nextcloud-app php occ user:resetpassword admin
给想尝试的朋友几点建议
-
别被 Docker 吓到。 我一开始也觉得这是"程序员专用"的东西,但实际操作下来,就是复制粘贴配置文件然后执行一条命令。跟着教程走,半天肯定能搞定。
-
先用 Apache 版本,别急着上 FPM。 Apache 版本开箱即用,不需要额外配 Nginx,适合新手。等你熟悉了再折腾 FPM + Nginx 的高性能方案也不迟。
-
Redis 必须加,MariaDB 必须用。 这两个不是可选项,是性能的基本保障。用 SQLite 的话你会后悔的。
-
HTTPS 一定要配。 尤其是你要从外网访问的话。用 Caddy 可以零配置搞定。
-
做好备份。 写个定时脚本,或者用 Docker volume 备份工具,定期把数据导出到别的地方。别等丢了才后悔。
-
多逛逛 Nextcloud 社区。 官方论坛 help.nextcloud.com 上有很多实用的 how-to,应用商店也值得慢慢探索。
附录:常用维护命令速查
# ========== 服务管理 ==========
cd /opt/nextcloud
# 启动/停止/重启
docker compose up -d
docker compose down
docker compose restart
# 查看状态
docker compose ps
docker compose logs -f --tail=100 # 实时日志
# ========== Nextcloud OCC 命令 ==========
# 以 www-data 用户执行 occ 命令
docker exec -u www-data nextcloud-app php occ <命令>
# 常用 occ 命令:
occ status # 查看状态
occ maintenance:mode --on # 开启维护模式
occ maintenance:mode --off # 关闭维护模式
occ maintenance:repair # 修复问题
occ files:scan --all # 重新扫描文件
occ app:list # 已安装应用列表
occ app:install <app> # 安装应用
occ app:remove <app> # 卸载应用
occ user:list # 用户列表
occ user:add <username> # 添加用户
occ user:delete <username> # 删除用户
occ config:system:get <key> # 获取配置值
occ config:system:set <key> --value=<val> # 设置配置值
# ========== 升级 Nextcloud ==========
# 1. 备份(重要!)
# 2. 拉取新镜像
docker compose pull app
# 3. 重启(会自动执行升级)
docker compose up -d app
# 4. 查看升级日志
docker compose logs app --tail=50
# ========== 清理 ==========
# 清理未使用的 Docker 镜像
docker image prune -a
# 查看磁盘使用
docker system df
du -sh /var/lib/docker/volumes/
最后说两句
折腾完这套 Nextcloud 之后,最大的感受就是——自由。
不用担心文件被审查,不用担心速度被限制,不用担心哪天这个服务突然就收费涨价了或者关停了。数据在自己手里,这种安全感是公有云盘给不了的。
当然,自建服务确实需要一点动手能力和维护精力,这不是所有人都适合的方案。但如果你跟我一样,对数据隐私有要求,又受够了公有云盘的各种限制,那 Nextcloud 真的是一个值得尝试的选择。
我个人给它打 8 分。扣掉的两分,一分给手机 APP 的体验(还有提升空间),一分给低配服务器的性能(如果能优化得更好就完美了)。但作为一个免费开源的项目,做到这个程度已经非常出色了。
好了,以上就是我的 Nextcloud Docker 部署和使用全记录。有疑问欢迎评论区交流,能回答的我尽量回答。
致谢
本文部署方案基于 Nextcloud 官方 Docker 镜像,感谢 Nextcloud 开源社区和所有贡献者的辛勤工作。
- Nextcloud 官方网站:https://nextcloud.com
- Nextcloud Docker 镜像仓库:https://github.com/nextcloud/docker
- Nextcloud All-in-One 项目:https://github.com/nextcloud/all-in-one
- Nextcloud 社区论坛:https://help.nextcloud.com
- MariaDB 官方镜像:https://hub.docker.com/_/mariadb
- Redis 官方镜像:https://hub.docker.com/_/redis
- Caddy 官方网站:https://caddyserver.com
- RaiDrive(WebDAV 挂载工具):https://www.raidrive.com
- OnlyOffice 官方:https://www.onlyoffice.com
本文写于 2026 年 3 月 29 日,基于 Nextcloud 33.0.1 版本。版本迭代较快,具体操作请以官方文档为准。
往期精彩
1、小米深夜放了个"核弹":三大自研 MiMo-V2模型,这次真要"为发烧而生"
2、未登录也能知道你是谁?浏览器指纹了解一下!
3、【好玩儿的Docker项目】用MuMuAiNovel自动写小说,docker一键部署,月入过万不是梦

评论区