前言
百度网盘限速、文件审核、隐私安全等问题让很多人头疼。如果你想拥有一个完全由自己掌控的私有云盘,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会自动完成安装。使用配置文件中设置的管理员账号密码登录。
设置中文界面
- 点击右上角头像 > 设置
- 左侧选择 个人信息
- 语言选择 中文(简体)
添加受信任域名
如果通过域名访问,需要添加受信任域名:
# 进入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”
客户端配置:
- 打开客户端,输入你的Nextcloud地址(如
https://cloud.yourdomain.com) - 输入用户名和密码
- 选择要同步的文件夹
- 文件会自动在本地和云端之间同步
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部署,安装和维护都非常方便。