前言

百度网盘限速、文件审核、隐私安全等问题让很多人头疼。如果你想拥有一个完全由自己掌控的私有云盘,Nextcloud是最好的选择。Nextcloud是开源免费的私有云存储方案,功能比百度网盘更强大——除了文件同步,还支持在线文档编辑、日历、联系人、笔记、密码管理等丰富的应用扩展。本文教你用Docker在VPS上快速搭建Nextcloud私有云盘。

一、Nextcloud功能简介

  • 文件同步与共享(支持Windows/Mac/Linux/iOS/Android客户端)
  • 在线预览图片、视频、PDF、Office文档
  • WebDAV支持(可在系统文件管理器中直接挂载)
  • 文件分享链接(可设密码、有效期、下载次数限制)
  • 应用商店提供数百款扩展(日历、联系人、邮件、笔记、Kanban等)
  • 多用户支持,可创建群组和共享文件夹
  • 端到端加密
  • 支持OnlyOffice/Collabora在线文档编辑

二、安装Nextcloud

前置条件

确保VPS已安装Docker和Docker Compose,参考国内用户一键安装Docker并配置镜像源

建议VPS配置:至少2核2G内存,硬盘空间越大越好(取决于你想存多少文件)。

使用Docker Compose安装

创建目录和配置文件:

mkdir -p /opt/nextcloud
cd /opt/nextcloud

创建 docker-compose.yml

cat > docker-compose.yml << 'EOF'
version: "3.8"

services:
  db:
    image: mariadb:10
    container_name: nextcloud-db
    restart: always
    command: --transaction-isolation=READ-COMMITTED --log-bin=binlog --binlog-format=ROW
    volumes:
      - db_data:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=rootpassword
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=nextcloudpassword

  redis:
    image: redis:7-alpine
    container_name: nextcloud-redis
    restart: always

  app:
    image: nextcloud:stable
    container_name: nextcloud-app
    restart: always
    ports:
      - "8080:80"
    volumes:
      - nextcloud_data:/var/www/html
    environment:
      - MYSQL_HOST=db
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_PASSWORD=nextcloudpassword
      - REDIS_HOST=redis
      - NEXTCLOUD_ADMIN_USER=admin
      - NEXTCLOUD_ADMIN_PASSWORD=your_strong_password
      - NEXTCLOUD_TRUSTED_DOMAINS=your.server.ip
    depends_on:
      - db
      - redis

volumes:
  db_data:
  nextcloud_data:
EOF

请务必修改以下内容

  • MYSQL_ROOT_PASSWORD:数据库root密码
  • MYSQL_PASSWORD:数据库用户密码
  • NEXTCLOUD_ADMIN_PASSWORD:Nextcloud管理员密码
  • NEXTCLOUD_TRUSTED_DOMAINS:你的VPS IP或域名

启动服务:

docker compose up -d

等待几分钟让Nextcloud初始化完成,然后访问 http://你的VPS_IP:8080

三、初始配置

首次访问时Nextcloud会自动完成安装。使用配置文件中设置的管理员账号密码登录。

设置中文界面

  1. 点击右上角头像 > 设置
  2. 左侧选择 个人信息
  3. 语言选择 中文(简体)

添加受信任域名

如果通过域名访问,需要添加受信任域名:

# 进入Nextcloud容器
docker exec -it nextcloud-app bash

# 添加域名
php occ config:system:set trusted_domains 1 --value="cloud.yourdomain.com"

# 退出容器
exit

配置Cron(后台任务)

推荐使用Cron代替AJAX轮询:

# 在crontab中添加
echo "*/5 * * * * docker exec -u www-data nextcloud-app php cron.php" >> /var/spool/cron/crontabs/root

或者在Nextcloud管理后台 > 基本设置中,将后台任务切换为 Cron

四、安装常用应用

在Nextcloud应用商店中可以安装各种扩展。点击右上角头像 > 应用,搜索并安装:

应用名说明
Calendar日历与日程管理
Contacts联系人管理
Notes笔记应用
Tasks待办事项
Deck看板式项目管理
Talk视频会议和即时通讯
Passwords密码管理器
Memories照片管理(替代Google相册)
OnlyOffice在线Office文档编辑

五、配置Nginx反向代理

通过域名和HTTPS访问Nextcloud,需要配置Nginx反向代理。

server {
    listen 80;
    server_name cloud.yourdomain.com;

    client_max_body_size 10G;
    client_body_timeout 3600s;
    fastcgi_buffers 64 4K;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_max_temp_file_size 2048m;
    }

    location /.well-known/carddav {
        return 301 $scheme://$host/remote.php/dav;
    }

    location /.well-known/caldav {
        return 301 $scheme://$host/remote.php/dav;
    }
}

申请SSL证书:

sudo certbot --nginx -d cloud.yourdomain.com

如果你使用Nginx Proxy Manager,也可以在面板中直接配置。

配置Nextcloud信任代理

docker exec -u www-data nextcloud-app php occ config:system:set trusted_proxies 0 --value="你的Nginx所在IP"
docker exec -u www-data nextcloud-app php occ config:system:set overwriteprotocol --value="https"

六、客户端安装

Nextcloud提供全平台客户端:

  • Windows/Mac/Linux:从 https://nextcloud.com/install/ 下载桌面客户端
  • iOS:App Store搜索 “Nextcloud”
  • Android:Google Play或F-Droid搜索 “Nextcloud”

客户端配置:

  1. 打开客户端,输入你的Nextcloud地址(如 https://cloud.yourdomain.com
  2. 输入用户名和密码
  3. 选择要同步的文件夹
  4. 文件会自动在本地和云端之间同步

WebDAV挂载

也可以通过WebDAV协议直接挂载为网络驱动器:

  • WebDAV地址:https://cloud.yourdomain.com/remote.php/dav/files/用户名/
  • Windows:在文件资源管理器中选择"映射网络驱动器"
  • macOS:Finder中按 Cmd+K,输入WebDAV地址
  • Linux:文件管理器中选择"连接到服务器"

七、数据备份

使用Docker卷备份

# 停止服务
cd /opt/nextcloud
docker compose stop

# 备份Nextcloud数据
docker run --rm -v nextcloud_nextcloud_data:/data -v $(pwd):/backup alpine tar czf /backup/nextcloud-data-$(date +%Y%m%d).tar.gz /data

# 备份数据库
docker run --rm -v nextcloud_db_data:/data -v $(pwd):/backup alpine tar czf /backup/nextcloud-db-$(date +%Y%m%d).tar.gz /data

# 启动服务
docker compose start

定时自动备份

cat > /opt/nextcloud/backup.sh << 'SCRIPT'
#!/bin/bash
cd /opt/nextcloud
docker compose stop
docker run --rm -v nextcloud_nextcloud_data:/data -v $(pwd)/backups:/backup alpine tar czf /backup/nextcloud-data-$(date +%Y%m%d).tar.gz /data
docker run --rm -v nextcloud_db_data:/data -v $(pwd)/backups:/backup alpine tar czf /backup/nextcloud-db-$(date +%Y%m%d).tar.gz /data
docker compose start
SCRIPT

chmod +x /opt/nextcloud/backup.sh
mkdir -p /opt/nextcloud/backups

# 每天凌晨3点自动备份
echo "0 3 * * * /opt/nextcloud/backup.sh" >> /var/spool/cron/crontabs/root

八、性能优化

启用内存缓存

在Nextcloud容器中执行:

docker exec -u www-data nextcloud-app php occ config:system:set memcache.local --value='\OC\Memcache\APCu'

docker exec -u www-data nextcloud-app php occ config:system:set memcache.distributed --value='\OC\Memcache\Redis' --type=json
docker exec -u www-data nextcloud-app php occ config:system:set redis host --value='redis'
docker exec -u www-data nextcloud-app php occ config:system:set redis port --value=6379 --type=integer

文件预览优化

# 预生成预览(首次运行较慢)
docker exec -u www-data nextcloud-app php occ preview:generate-all -vvv

# 设置预览生成计划任务
echo "*/10 * * * * docker exec -u www-data nextcloud-app php occ preview:pre-generate" >> /var/spool/cron/crontabs/root

九、常见问题

上传文件大小受限?

默认最大上传10G(已在Nginx配置中设置)。如需调整,修改 client_max_body_size 和PHP的 upload_max_filesize

内网穿透访问?

如果VPS没有公网IP,可以使用Cloudflare Tunnel或其他内网穿透方案暴露服务。

Nextcloud和AList有什么区别?

Nextcloud是完整的私有云方案(存储+同步+协作+应用),AList只是文件列表/管理工具,挂载各种网盘。如果你需要的是网盘聚合展示用AList,如果需要私人云存储和文件同步用Nextcloud。

总结

Nextcloud是替代百度网盘的最佳自托管方案,功能丰富、扩展性强。搭配一台便宜VPS,就能拥有完全属于自己的私有云盘,数据安全和隐私都掌握在自己手里。结合Docker部署,安装和维护都非常方便。