Nextcloud 是功能最全面的开源私有网盘方案,支持文件存储与同步、日历、联系人、视频通话、协作文档等功能。它的 Docker 镜像包含所有依赖,配合独立数据库容器即可在搬瓦工 VPS 上快速搭建一套属于自己的云存储服务。

本文要点

  • Docker Compose 部署 Nextcloud + MariaDB
  • Nginx 反代与 Let's Encrypt SSL(HTTPS 为必须)
  • 性能调优:PHP 内存、OPcache、缓存
  • 存储目录规划与外部存储扩展

环境要求

资源推荐配置说明
内存1 GB+PHP + 数据库合计约 400–600 MB
磁盘视存储需求网盘数据单独规划,建议独立挂载
系统Debian 12 / Ubuntu 22.04宿主机
域名 + SSL必须Nextcloud 强制 HTTPS

Compose 文件

创建 /opt/nextcloud/docker-compose.yml

# /opt/nextcloud/docker-compose.yml
services:
  db:
    image: mariadb:11
    container_name: nc_db
    environment:
      MYSQL_ROOT_PASSWORD: StrongRootPass123
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: ncuser
      MYSQL_PASSWORD: StrongDBPass456
    volumes:
      - db_data:/var/lib/mysql
    restart: unless-stopped

  nextcloud:
    image: nextcloud:stable
    container_name: nextcloud
    depends_on:
      - db
    environment:
      MYSQL_HOST: db
      MYSQL_DATABASE: nextcloud
      MYSQL_USER: ncuser
      MYSQL_PASSWORD: StrongDBPass456
      NEXTCLOUD_TRUSTED_DOMAINS: nc.yourdomain.com
      PHP_MEMORY_LIMIT: 512M
      PHP_UPLOAD_LIMIT: 1G
    volumes:
      - nc_data:/var/www/html
      - ./storage:/var/www/html/data
    ports:
      - "8080:80"
    restart: unless-stopped

volumes:
  db_data:
  nc_data:
mkdir -p /opt/nextcloud/storage
cd /opt/nextcloud
docker compose up -d

storage 目录权限

若 Nextcloud 容器报权限错误,执行 chown -R 33:33 /opt/nextcloud/storage(容器内 www-data 的 UID 为 33)。

Nginx 反向代理 + SSL

apt install -y nginx certbot python3-certbot-nginx
certbot --nginx -d nc.yourdomain.com

/etc/nginx/conf.d/nextcloud.conf 中配置(关键头部需完整):

server {
    listen 443 ssl;
    server_name nc.yourdomain.com;
    ssl_certificate     /etc/letsencrypt/live/nc.yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/nc.yourdomain.com/privkey.pem;
    client_max_body_size 1G;
    add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
    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 https;
        proxy_read_timeout 300;
    }
}

完成安装向导

浏览器访问 https://nc.yourdomain.com,首次访问需填写管理员账号密码,数据库已通过环境变量预配置,等待初始化完成即可登录。

性能调优

启用 Redis 缓存

在 Compose 文件中添加 Redis 服务,并在 config/config.php 中配置:

# 在 config/config.php 中添加
'memcache.local' => '\OC\Memcache\Redis',
'redis' => [
  'host' => 'redis',
  'port' => 6379,
],

定期后台任务

建议在宿主机设置 cron,每 5 分钟执行 Nextcloud 后台任务,避免依赖 Web 触发:

# crontab -e
*/5 * * * * docker exec -u 33 nextcloud php /var/www/html/cron.php

存储扩展

Nextcloud 支持通过「外部存储」插件挂载 S3、SFTP、WebDAV 等外部存储,可将搬瓦工 VPS 作为访问入口,把实际数据存放在容量更大的对象存储服务中。

小结

  • MariaDB 比 SQLite 更适合生产,支持多用户并发
  • Nextcloud 强制 HTTPS,SSL 是部署的前提条件
  • 上传大文件需同步调整 Nginx 的 client_max_body_size 和容器的 PHP_UPLOAD_LIMIT
  • Redis 缓存 + cron 后台任务显著提升使用体验

常见问题

Nextcloud 有客户端吗?

有。官方提供 Windows、macOS、Linux、iOS 和 Android 客户端,支持文件自动同步,体验类似 Dropbox。

上传文件大小有限制吗?

默认限制约 512 MB,可通过 PHP_UPLOAD_LIMIT 环境变量和 Nginx 的 client_max_body_size 同步调大,建议两者保持一致。

忘记管理员密码怎么办?

执行 docker exec -u 33 nextcloud php /var/www/html/occ user:resetpassword admin 并按提示输入新密码。