侧边栏壁纸
博主头像
踏浪而行生活圈

行动起来,活在当下

  • 累计撰写 24 篇文章
  • 累计创建 7 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

被网盘限速逼疯后,我花了一个下午搭了个属于自己的"私有云"

被网盘限速逼疯后,我花了一个下午搭了个属于自己的"私有云"

事情的起因很俗套——我被某度盘的限速再一次搞破防了。

那天晚上赶着给客户传一个项目文件,不到 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中设置的管理员密码。

nextCloud登录页

我第一次搞的时候在这一步卡了一会儿。 原因是我服务器上之前跑了个 Nginx,占用了 8080 端口,然后我 compose 里映射到 8080 端口就冲突了。折腾了半天才发现问题,改成 18081 就好了。所以提醒大家,端口号别跟已有服务撞了。

🔍 端口冲突排查:如果遇到端口占用,用 sudo lsof -i :80sudo 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 实用功能一览


教程一:桌面客户端安装与文件同步

装完 Nextcloud 服务端只是第一步,要真正用起来,客户端才是日常打交道最多的工具。

Windows / macOS 客户端

第一步:下载客户端

前往 Nextcloud 官网下载页面:https://nextcloud.com/install/#install-clients

选择对应的系统版本下载安装。

安装过程就是普通的下一步下一步,没有坑。

第二步:首次配置连接

安装完成后启动客户端,会弹出一个窗口:

点击“登录”

alt text

填入你的 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 挂载方法

方法一:通过资源管理器(最简单)

  1. 打开「此电脑」→ 右键空白处 →「添加一个网络位置」

  2. 在向导中选择「自定义网络位置」,输入 WebDAV 地址:

https://cloud.yourdomain.com/remote.php/dav/files/你的用户名/
  1. 输入你的 Nextcloud 用户名和密码

  2. 完成后,「此电脑」里会多出一个网络位置,可以直接拖拽文件

⚠️ 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 中配置

  1. 以管理员身份登录 Nextcloud
  2. 点击右上角头像 → 应用
    应用
  3. 在左侧菜单找到「Office & text」分类
  4. 找到 Community Document ServerONLYOFFICE,点击「下载并启用」
  5. 启用后,进入「设置」→「管理」→「ONLYOFFICE」
  6. 填入配置:
Document Server 地址: https://office.yourdomain.com
Secret Key (JWT): 你刚才设置的JWT密钥
  1. 点击「保存」

第三步:测试使用

回到 Nextcloud 文件列表,右键点击任意 .docx / .xlsx / .pptx 文件,你会看到新增的选项:

右键菜单
├── 打开
├── 下载
├── 分享
├── ──────────
├── 在 ONLYOFFICE 中编辑    ← 新增的!
└── ──────────
    详情

点击后会打开在线编辑器,界面类似 Microsoft Office,支持多人实时协作编辑。

⚠️ OnlyOffice 比较吃内存,建议服务器至少 4G 内存。如果内存紧张,可以考虑用 Collabora Online 作为替代方案,内存占用更低。


教程四:用户管理——给家人/团队开账号

私有云的一个重要用途就是给家人或小团队共享,这就涉及到用户管理。

创建新用户

  1. 点击右上角头像 → 设置账号所有账号
  2. 点击左上角「+ 新建账号」按钮
    新建用户

建议创建不同的用户组来管理权限:

用户组设置
├── family(家人)
│   ├── 存储配额: 20 GB
│   └── 可访问: /Family 共享文件夹
├── work(同事)
│   ├── 存储配额: 10 GB
│   └── 可访问: /Work 共享文件夹
└── friends(朋友)
    ├── 存储配额: 2 GB
    └── 可访问: /Public 文件夹

设置共享文件夹

  1. 管理员创建一个文件夹(如「家庭共享」)
  2. 右键 → 详情 → 共享
  3. 输入要共享的用户或用户组名
  4. 设置权限(读取 / 编辑 / 上传)


教程五:自动备份脚本

自建服务最大的风险就是数据丢失。这里提供一个实用的备份方案。

备份脚本

创建备份脚本 /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: 服务启动后一直显示 "正在初始化"

可能原因:

  1. 数据库还没准备好——等几分钟再刷新
  2. 数据库密码不一致——检查 MYSQL_PASSWORD 是否一致
  3. 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

给想尝试的朋友几点建议

  1. 别被 Docker 吓到。 我一开始也觉得这是"程序员专用"的东西,但实际操作下来,就是复制粘贴配置文件然后执行一条命令。跟着教程走,半天肯定能搞定。

  2. 先用 Apache 版本,别急着上 FPM。 Apache 版本开箱即用,不需要额外配 Nginx,适合新手。等你熟悉了再折腾 FPM + Nginx 的高性能方案也不迟。

  3. Redis 必须加,MariaDB 必须用。 这两个不是可选项,是性能的基本保障。用 SQLite 的话你会后悔的。

  4. HTTPS 一定要配。 尤其是你要从外网访问的话。用 Caddy 可以零配置搞定。

  5. 做好备份。 写个定时脚本,或者用 Docker volume 备份工具,定期把数据导出到别的地方。别等丢了才后悔。

  6. 多逛逛 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 开源社区和所有贡献者的辛勤工作。


本文写于 2026 年 3 月 29 日,基于 Nextcloud 33.0.1 版本。版本迭代较快,具体操作请以官方文档为准。

往期精彩

1、小米深夜放了个"核弹":三大自研 MiMo-V2模型,这次真要"为发烧而生"

2、未登录也能知道你是谁?浏览器指纹了解一下!

3、【好玩儿的Docker项目】用MuMuAiNovel自动写小说,docker一键部署,月入过万不是梦

扫码_搜索联合传播样式-标准色版-fd2n.png

0

评论区