跳至正文
老丹的足迹 —— 代码写给机器,游记写给自己,感悟写给时间
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面
老丹的足迹 老丹的足迹
老丹的足迹 老丹的足迹
  • 首页
  • 示例页面
  • 首页
  • 示例页面

在 Ubuntu 上用 Docker Compose 部署 Nextcloud AIO

一、结论先行

AIO 的部署确实高度依赖管理界面,但核心的存储路径和反向代理参数,仍然需要在 Docker Compose 的环境变量中预先设定。对于使用 apt install nginx 的 Ubuntu 系统,让 AIO 退居内部端口、由 Nginx 独占 80/443,核心操作如下:

  1. AIO 侧设置 APACHE_PORT=11000,让 Apache 监听内部端口
  2. 设置 SKIP_DOMAIN_VALIDATION=true 跳过 AIO 自带的域名验证
  3. 在 Compose 文件中通过 NEXTCLOUD_DATADIR 指定用户数据的存储目录
  4. Nginx 侧配置 proxy_pass 指向 127.0.0.1:11000,SSL 证书由 Certbot 自动管理

二、理解 AIO 的管理模式

AIO(All-in-One)的 nextcloud-aio-mastercontainer 是一个“管理器”,真正的 Nextcloud 服务运行在它自动创建的兄弟容器中。大多数功能配置(启用 Collabora、Talk、ClamAV 等)都是在 AIO 管理界面中通过勾选完成的。

但有两类配置必须在 Compose 文件中完成:

  • 反向代理相关参数(APACHE_PORT、SKIP_DOMAIN_VALIDATION)
  • 数据存储路径(NEXTCLOUD_DATADIR),且只在首次安装时生效

整体架构如下:

外部请求 → Nginx (443, SSL终止) → AIO Apache容器 (11000) → Nextcloud
                ↑
        SSL证书由Certbot统一管理

三、前置条件

项目要求
操作系统Ubuntu 22.04 LTS 或更高
硬件至少 4GB RAM,2 核 CPU
软件Docker 已安装,Nginx 已通过 apt 安装并运行
域名已解析到服务器公网 IP
网络服务器可正常访问 GitHub(AIO 需要下载组件)

四、AIO 侧配置

4.1 创建项目目录

mkdir -p ~/docker/nextcloud-aio && cd ~/docker/nextcloud-aio

4.2 关于数据存储目录的配置

AIO 默认将用户数据存储在 Docker 卷 nextcloud_aio_nextcloud_data 中(位于 /var/lib/docker/volumes/ 下)。如果需要指定到其他磁盘或目录,必须在首次安装前通过 NEXTCLOUD_DATADIR 环境变量设置。

重要限制:该变量只支持内部磁盘(SATA/NVMe),不支持 USB 外置硬盘或网络共享(CIFS/SMB)。

4.3 编写 Compose 文件

创建 compose.yaml:

name: nextcloud-aio

services:
  nextcloud-aio-mastercontainer:
    image: ghcr.io/nextcloud-releases/all-in-one:latest
    init: true
    restart: always
    container_name: nextcloud-aio-mastercontainer
    ports:
      - "8080:8080"          # AIO 管理界面
    volumes:
      - nextcloud_aio_mastercontainer:/mnt/docker-aio-config
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      - APACHE_PORT=11000                # Apache 监听内部端口
      - APACHE_IP_BINDING=0.0.0.0        # 允许从容器外部访问
      - SKIP_DOMAIN_VALIDATION=true      # 跳过 AIO 内置域名验证
      - NEXTCLOUD_DATADIR=/mnt/your-drive/ncdata  # 用户数据存储目录(可选,仅首次生效)

volumes:
  nextcloud_aio_mastercontainer:
    name: nextcloud_aio_mastercontainer  # 官方要求此名称不可更改

4.4 环境变量说明

变量作用
APACHE_PORT=11000让 AIO 的 Apache 监听 11000,释放 80/443 给 Nginx
APACHE_IP_BINDING=0.0.0.0允许 Nginx 从容器外部访问此端口
SKIP_DOMAIN_VALIDATION=true跳过域名验证。该验证依赖 AIO 占用 80/443,反向代理场景下无法通过
NEXTCLOUD_DATADIR指定用户数据的宿主机目录,仅在首次安装时生效

4.5 设置数据目录权限(如使用 NEXTCLOUD_DATADIR)

Nextcloud 容器内的用户 UID 是 33,需要设置正确权限:

sudo mkdir -p /mnt/your-drive/ncdata
sudo chown -R 33:0 /mnt/your-drive/ncdata
sudo chmod -R 750 /mnt/your-drive/ncdata

4.6 启动 AIO

docker compose up -d

4.7 完成初始化

  1. 浏览器访问 https://你的服务器IP:8080(务必用 IP,避免 HSTS 问题)
  2. 输入密码(查看:docker logs nextcloud-aio-mastercontainer)
  3. 在界面中填写你的域名
  4. 在可选容器区域选择需要的组件(Office、Talk 等),然后点击安装

五、Nginx 反向代理配置

5.1 Ubuntu 的 Nginx 配置目录

通过 apt install nginx 安装的 Nginx,站点配置采用 sites-available / sites-enabled 模式:

  • /etc/nginx/sites-available/:存放站点配置文件
  • /etc/nginx/sites-enabled/:存放指向 sites-available/ 的符号链接

5.2 创建站点配置

sudo nano /etc/nginx/sites-available/nextcloud

先只写 80 端口的配置,443 的 SSL 部分交给 Certbot:

map $http_upgrade $connection_upgrade {
    default upgrade;
    ''      close;
}

server {
    listen 80;
    server_name cloud.你的域名.com;

    # 大文件上传必需
    client_max_body_size 0;
    proxy_read_timeout 86400s;
    proxy_send_timeout 86400s;

    location / {
        proxy_pass http://127.0.0.1:11000$request_uri;
        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_set_header X-Forwarded-Port $server_port;

        # WebSocket 支持(Talk 实时通信需要)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;

        # 关闭缓冲,对媒体流播放很重要
        proxy_buffering off;
    }
}

5.3 关键配置说明

配置项作用
client_max_body_size 0移除上传大小限制
proxy_read_timeout 86400s延长超时,避免大文件上传中断
X-Forwarded-Proto $scheme告诉 Nextcloud 外部连接协议
WebSocket 头部Nextcloud Talk 依赖 WebSocket
proxy_buffering off对视频等媒体文件的 Range 请求至关重要

5.4 启用配置并申请证书

# 创建软链接
sudo ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/

# 测试配置
sudo nginx -t

# 重载 Nginx
sudo systemctl reload nginx

# 安装 Certbot 并自动申请证书
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d cloud.你的域名.com

Certbot 会自动申请证书、插入 443 的 SSL 配置、设置 HTTP 到 HTTPS 的重定向,并配置自动续期。

六、验证部署

访问 https://你的域名,应看到 Nextcloud 登录页面。初始管理员账号和密码显示在 AIO 管理界面中(点击 “Click here to reveal the initial Nextcloud credentials” 查看)。

七、常见问题排查

现象可能原因处理方向
502 Bad GatewayNginx 无法连接到 11000检查 APACHE_IP_BINDING=0.0.0.0;确认 Apache 容器已 Running
AIO 域名验证失败未设置跳过验证确认 SKIP_DOMAIN_VALIDATION=true
数据存储位置不对NEXTCLOUD_DATADIR 未生效该变量仅在首次安装时生效,需重置实例才能更改
上传大文件失败client_max_body_size 太小设为 0 或足够大的值
Talk 通话异常缺少 WebSocket 头部添加 Upgrade 和 Connection 头部

八、AIO 管理的核心原则

AIO 的设计哲学是“管理器集中控制”。以下操作必须在 AIO 管理界面中完成:

操作位置
启用/禁用可选容器(Office、Talk、ClamAV 等)AIO 界面 → Optional containers
备份与恢复AIO 界面 → Backup and restore
容器更新AIO 界面 → Stop containers → Start and update
查看容器日志AIO 界面 → 点击容器旁的 “Starting/Running” 链接

而以下配置必须在 Compose 文件中预先设定(且多数仅首次安装时生效):

  • 反向代理参数(APACHE_PORT、SKIP_DOMAIN_VALIDATION)
  • 数据存储路径(NEXTCLOUD_DATADIR)

九、重要提醒

关于备份:AIO 内置 BorgBackup,首次备份后可在界面启用每日自动备份。备份加密密码务必妥善保存。如果数据存储在自定义的 NEXTCLOUD_DATADIR 中,AIO 的备份不会自动包含该目录,需要在 AIO 界面中额外指定备份路径。

关于更新:不要用 Watchtower 等工具自动更新 AIO。正确方式是在 AIO 管理界面手动执行更新。

作者

老丹

关注我
其他文章
上一个

Ubuntu 服务器 UFW 防火墙排查实录:从一条备份命令到看清全部规则

下一个

为什么 SSH 里的 Vim 复制粘贴这么难用?

关于博主

    老丹是一名C/C++后台开发工程师,信奉“无抽象不设计,无性能不生产”。

  • 技术栈:Modern C++、Linux环境编程、多线程/并发、网络编程等。
  • 信条:能用constexpr解决的问题绝不拖到运行时,能靠RAII避免的泄漏绝不写析构。
  • 正在填坑:从解封装到渲染的C++全链路实现,正在驯服FFmpeg与H.264/H.265。
  • 输出原则:这里的每一段代码都经过-Wall -Wextra -Werror -O2的洗礼。

近期文章

  • 在 Windows 里养一只 Linux:WSL 完整指南 2026年10月24日
  • Paho MQTT C 与 C++ 客户端库完全指南:从概念到 Ubuntu 26.04 下的编译、安装与使用 2026年10月23日
  • Mosquitto $SYS 主题详解:Broker 自监控指南 2026年10月23日
  • 应用级 MQTT 服务搭建完全指南:Mosquitto + 宿主机 Nginx 2026年10月22日
  • OpenWrt 固件签名三剑客:usign、ucert 与 fwtool 深度解析 2026年10月21日

文章分类

  • C/C++开发 (22)
  • Docker容器 (5)
  • Linux工具包 (21)
  • Linux服务配置 (53)
  • Linux系统 (16)
  • MQTT技术 (6)
  • OpenWrt路由 (5)
  • Shell脚本 (3)
  • 代码管理 (1)
  • 安防技术 (4)
  • 数据安全 (36)
  • 网络协议 (25)
  • 计算机理论 (23)
  • 问题解决 (3)
  • 防火墙 (6)
  • 音视频技术 (6)
联系我们:📍 地址:中国·广东省深圳市   |   ✉️ 邮箱:support@tanglinux.com   |   💬 QQ:870866607
版权所有:老丹的足迹粤ICP备2026061170号-1       公安备案图标 粤公网安备44030002013274号