Nextcloud私有云搭建:Ubuntu下用Docker快速部署

在 Ubuntu 服务器上使用 Docker Compose 部署 Nextcloud,是当前比较省心且容易维护的私有云搭建方式。
只要服务器能联网、有独立 IP 或域名,按照下面步骤操作,大约 20 分钟就能跑起来一个支持网页和客户端同步的私有云盘。

适用环境与前置准备

这套方案适合个人或小团队使用,推荐服务器配置不低于 2 核 CPU、2GB 内存、20GB 系统盘,外加一块数据盘。
操作系统以 Ubuntu 22.04 为例,其他版本命令基本通用。

开始前确认三件事:

  1. 服务器已安装 Docker 和 Docker Compose。如果没有,执行以下命令安装:
curl -fsSL https://get.docker.com | sh
sudo apt install docker-compose-plugin -y
  1. 放行防火墙端口。如果使用 UFW,执行:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

如果服务器在云厂商安全组内,还需要在控制台放行 80 和 443 端口。

  1. 准备一个域名,并提前解析到服务器 IP。Nextcloud 的许多功能依赖 HTTPS,用域名申请证书会更方便。

编写 Docker Compose 配置文件

找一个目录存放数据,例如 /opt/nextcloud,然后创建 docker-compose.yml:

version: '3'

services:
  db:
    image: mariadb:10.11
    restart: always
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=your_root_password
      - MYSQL_PASSWORD=your_db_password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud:latest
    restart: always
    ports:
      - 8080:80
    depends_on:
      - db
    volumes:
      - ./data:/var/www/html
    environment:
      - MYSQL_PASSWORD=your_db_password
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db

把 your_root_password 和 your_db_password 换成自己的强密码。
注意 app 服务映射的是宿主机的 8080 端口,后面会通过反向代理对外提供 HTTPS 访问。

保存后,在相同目录执行:

docker compose up -d

等待一两分钟,用 docker compose ps 确认两个容器都是 running 状态。

配置反向代理与 HTTPS

直接用 IP:8080 访问虽然可以,但浏览器会提示不安全,客户端同步也可能受限。
推荐用 Nginx 反向代理并申请 Let's Encrypt 证书。

在宿主机安装 Nginx 和 Certbot:

sudo apt install nginx certbot python3-certbot-nginx -y

创建站点配置文件 /etc/nginx/sites-available/nextcloud:

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

    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;
    }
}

把 cloud.example.com 换成你的域名,然后启用站点并申请证书:

sudo ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
sudo certbot --nginx -d cloud.example.com

Certbot 会自动修改 Nginx 配置并配置好 HTTPS 跳转。
完成后用浏览器访问 https://cloud.example.com,应该能看到 Nextcloud 的初始化页面。

常见报错与避坑说明

数据库连接失败:先检查 docker compose logs db,确认 MariaDB 是否正常启动。
如果提示 Access denied,多半是 MYSQL_PASSWORD 和 MYSQL_ROOT_PASSWORD 设置不一致,建议删除 ./db 目录重新部署。

提示“无法写入 config 目录”:这是文件权限问题。
Nextcloud 容器内用户 UID 通常为 33(www-data),可以执行 sudo chown -R 33:33 ./data 修正。

上传大文件失败:默认 PHP 上传限制可能偏小。
可以在 app 服务中挂载自定义 php.ini,或在 Nextcloud 管理后台调整上传上限。
同时确认 Nginx 的 client_max_body_size 已调大,例如在 server 块中加入 client_max_body_size 10G;。

忘记管理员密码:可以在容器内执行 docker compose exec -u 33 app php occ user:resetpassword 用户名 来重置。

验证部署是否成功

访问 https://你的域名,用初始化时设置的管理员账号登录。
进入后建议做三件事:

  1. 在“设置-概览”中查看是否有安全警告或配置建议,按提示修正。
  2. 在“设置-基本设置”中填写正确的后台任务方式,推荐使用 Cron,并在宿主机添加定时任务。
  3. 用手机或桌面客户端登录同一账号,测试上传和同步文件。

如果网页能打开、客户端能同步、HTTPS 证书有效,说明 Nextcloud私有云搭建已经完成。
后续只需定期备份 data 和 db 目录,并关注容器镜像更新即可。

常见问题

问:必须用域名吗?
不是必须,但强烈建议用域名。直接用 IP 访问无法申请可信 HTTPS 证书,很多客户端会拒绝连接。

问:数据存在哪里?
默认在 docker-compose.yml 同级目录的 ./data 和 ./db 下。备份时直接把这两个目录打包即可,注意数据库最好先停止容器再备份,避免数据不一致。

问:内存占用高怎么办?
Nextcloud 本身比较吃资源,2GB 内存属于勉强够用。如果经常卡顿,可以升级到 4GB,或在 app 服务中调整 PHP 内存限制。

问:如何升级 Nextcloud 版本?
修改 docker-compose.yml 中的镜像版本后执行 docker compose pull && docker compose up -d。升级前务必先备份数据和数据库,并确认当前版本到目标版本的升级路径是否被官方支持。

分享到:
上一篇
宝塔面板配置从零上手:环境准备、站点部署与常见报错处理
下一篇
Jenkins服务器搭建实操:Linux环境从零部署到验证
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意