
如果你正在使用个人NAS,并且希望通过 Nextcloud AIO (All-in-One) 获得最完整、最稳定的私人云体验(包括高性能文件管理、日历、通讯录等),那么,这篇文章就是为你准备的。
我们将采用以下架构,在本地部署nextcloud:
如果你之前尝试安装过 AIO 但失败了,必须先进行彻底清理,否则新配置不会生效。
停止并删除容器:
在极空间 SSH 或 Docker 管理器中,停止所有 nextcloud-aio-* 开头的容器。
docker compose down
关键:删除配置卷 (必须做!)
AIO 的配置文件存储在 Docker 卷中,必须删除它才能让新的环境变量生效。
docker volume rm nextcloud_aio_mastercontainer
(注意:这只会重置 AIO 的安装向导配置,不会删除你的 NEXTCLOUD_DATADIR 里的用户文件)
这是最关键的一步。我们要通过特殊的配置,告诉 AIO 不要自己管理 SSL,而是把 HTTP 服务暴露出来给我们的代理用。
创建一个新的 docker-compose.yml 文件:
jsservices:
nextcloud-aio-mastercontainer:
image: ghcr.io/nextcloud-releases/all-in-one:latest
init: true
restart: always
container\_name: nextcloud-aio-mastercontainer
privileged: true \# 推荐加上,赋予更高权限以减少网络问题
volumes:
\- nextcloud\_aio\_mastercontainer:/mnt/docker-aio-config
\- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
\# AIO 管理界面端口 (仅本地访问)
\- 8082:8080
environment:
\# \--- 核心配置:开启反向代理模式 \---
\# 告诉 AIO 在 11000 端口提供未加密的 HTTP 服务
\- APACHE\_PORT=11000
\# 关键:绑定到 127.0.0.1,防止局域网直接未加密访问,只允许本机 FRP 抓取
\- APACHE\_IP\_BINDING=127.0.0.1
\# \--- 数据目录配置 (根据你的实际情况修改) \---
\# MOUNT 是父目录,DATADIR 是子目录
\- NEXTCLOUD\_MOUNT=/mnt/
\- NEXTCLOUD\_DATADIR=/mnt/nextcloud\_data
\# \--- 首次启动自动安装的应用 \---
\- NEXTCLOUD\_STARTUP\_APPS=deck twofactor\_totp tasks calendar contacts notes
volumes:
nextcloud\_aio\_mastercontainer:
name: nextcloud\_aio\_mastercontainer
启动命令:
docker compose up \-d
docker-compose完整版
jsservices:
nextcloud-aio-mastercontainer:
image: ghcr.io/nextcloud-releases/all-in-one:latest # 这是使用的容器镜像。如果你想帮助测试新版本,可以切换到 ghcr.io/nextcloud-releases/all-in-one:beta。详见 https://github.com/nextcloud/all-in-one#how-to-switch-the-channel
init: true # 此设置确保容器内主进程的信号能正确转发给子进程。详见 https://docs.docker.com/reference/compose-file/services/#init
restart: always # 这能确保容器总是随着宿主机操作系统一起启动。详见 https://docs.docker.com/reference/compose-file/services/#restart
container_name: nextcloud-aio-mastercontainer # 这一行不允许更改,否则 AIO 将无法正常工作
volumes:
- nextcloud_aio_mastercontainer:/mnt/docker-aio-config # 这一行不允许更改,否则内置的备份解决方案将无法工作
- /var/run/docker.sock:/var/run/docker.sock:ro # 在 macOS, Windows 或 docker rootless 模式下可能需要更改。请参阅相关文档。如果调整了此项,别忘了也设置 'WATCHTOWER_DOCKER_SOCKET_PATH'!
network_mode: bridge # 这会将容器添加到 docker run 默认会使用的网络中。如果你想为 docker 网络定义自定义 MTU 大小,请注释掉此行,并取消注释下面一行的 'networks' 以及文件末尾的 networks 部分
# networks: ["nextcloud-aio"]
ports:
- 80:80 # 当在 Web 服务器或反向代理(如 Apache, Nginx, Caddy, Cloudflare Tunnel 等)后运行时可以移除。详见 https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
- 8080:8080 # 这是 AIO 的管理界面,通过 https 和自签名证书提供服务。详见 https://github.com/nextcloud/all-in-one#explanation-of-used-ports
- 8443:8443 # 当在 Web 服务器或反向代理(如 Apache, Nginx, Caddy, Cloudflare Tunnel 等)后运行时可以移除。详见 https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
# security_opt: ["label:disable"] # 在使用 SELinux 时需要此项。详见 https://github.com/nextcloud/all-in-one#are-there-known-problems-when-selinux-is-enabled
# environment: # 当使用以下任何选项时需要
# # AIO_DISABLE_BACKUP_SECTION: false # 设置为 true 可以在 AIO 界面中隐藏备份部分。详见 https://github.com/nextcloud/all-in-one#how-to-disable-the-backup-section
# # APACHE_PORT: 11000 # 当在 Web 服务器或反向代理(如 Apache, Nginx, Caddy, Cloudflare Tunnel 等)后运行时需要。详见 https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
# # APACHE_IP_BINDING: 127.0.0.1 # 当在同一主机上运行的 Web 服务器或反向代理(如 Apache, Nginx, Caddy, Cloudflare Tunnel 等)后运行时应设置此项。详见 https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
# # APACHE_ADDITIONAL_NETWORK: frontend_net # (可选) 将 Apache 容器连接到一个额外的 docker 网络。当反向代理在同一台服务器的不同 docker 网络中运行时需要。详见 https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md
# # BORG_RETENTION_POLICY: --keep-within=7d --keep-weekly=4 --keep-monthly=6 # 允许调整 Borg 的备份保留策略。详见 https://github.com/nextcloud/all-in-one#how-to-adjust-borgs-retention-policy
# # COLLABORA_SECCOMP_DISABLED: false # 设置为 true 允许禁用 Collabora 的 Seccomp 功能。详见 https://github.com/nextcloud/all-in-one#how-to-disable-collaboras-seccomp-feature
# # FULLTEXTSEARCH_JAVA_OPTIONS: "-Xms1024M -Xmx1024M" # 允许调整全文搜索的 java 选项。详见 https://github.com/nextcloud/all-in-one#how-to-adjust-the-fulltextsearch-java-options
# # NEXTCLOUD_DATADIR: /mnt/ncdata # 允许设置 Nextcloud 数据目录的宿主机路径。⚠️⚠️⚠️ 警告:在 Nextcloud 首次安装完成后,不要设置或调整此值!详见 https://github.com/nextcloud/all-in-one#how-to-change-the-default-location-of-nextclouds-datadir
# # NEXTCLOUD_MOUNT: /mnt/ # 允许 Nextcloud 容器访问宿主机上的所选目录。详见 https://github.com/nextcloud/all-in-one#how-to-allow-the-nextcloud-container-to-access-directories-on-the-host
# # NEXTCLOUD_UPLOAD_LIMIT: 16G # 如果你需要更大的值,可以调整。详见 https://github.com/nextcloud/all-in-one#how-to-adjust-the-upload-limit-for-nextcloud
# # NEXTCLOUD_MAX_TIME: 3600 # 如果你需要更长的时间,可以调整。详见 https://github.com/nextcloud/all-in-one#how-to-adjust-the-max-execution-time-for-nextcloud
# # NEXTCLOUD_MEMORY_LIMIT: 512M # 如果你需要更多内存,可以调整。详见 https://github.com/nextcloud/all-in-one#how-to-adjust-the-php-memory-limit-for-nextcloud
# # NEXTCLOUD_TRUSTED_CACERTS_DIR: /path/to/my/cacerts # 此目录中的 CA 证书将被 Nextcloud 容器的操作系统信任 (例如,对 LDAPS 很有用)。详见 https://github.com/nextcloud/all-in-one#how-to-trust-user-defined-certification-authorities-ca
# # NEXTCLOUD_STARTUP_APPS: deck twofactor_totp tasks calendar contacts notes # 允许修改首次启动 AIO 时安装的 Nextcloud 应用。详见 https://github.com/nextcloud/all-in-one#how-to-change-the-nextcloud-apps-that-are-installed-on-the-first-startup
# # NEXTCLOUD_ADDITIONAL_APKS: imagemagick # 允许向 Nextcloud 容器永久添加额外的软件包。默认为 imagemagick,但可以通过修改此值来覆盖。详见 https://github.com/nextcloud/all-in-one#how-to-add-os-packages-permanently-to-the-nextcloud-container
# # NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS: imagick # 允许向 Nextcloud 容器永久添加额外的 PHP 扩展。默认为 imagick,但可以通过修改此值来覆盖。详见 https://github.com/nextcloud/all-in-one#how-to-add-php-extensions-permanently-to-the-nextcloud-container
# # NEXTCLOUD_ENABLE_DRI_DEVICE: true # 允许为能从中受益的容器启用 /dev/dri 设备。⚠️⚠️⚠️ 警告:这仅在宿主机上存在 '/dev/dri' 设备时才有效!如果你的宿主机上没有它,请不要将此值设置为 true,否则 Nextcloud 容器将启动失败!详见 https://github.com/nextcloud/all-in-one#how-to-enable-hardware-acceleration-for-nextcloud
# # NEXTCLOUD_ENABLE_NVIDIA_GPU: true # 允许为能从中受益的容器启用 NVIDIA 运行时和 GPU 访问。⚠️⚠️⚠️ 警告:这仅在服务器上安装了 NVIDIA GPU 时才有效。详见 https://github.com/nextcloud/all-in-one#how-to-enable-hardware-acceleration-for-nextcloud
# # NEXTCLOUD_KEEP_DISABLED_APPS: false # 设置为 true 将保留在 AIO 界面中被禁用的 Nextcloud 应用,并且在它们已安装的情况下不会卸载它们。详见 https://github.com/nextcloud/all-in-one#how-to-keep-disabled-apps
# # SKIP_DOMAIN_VALIDATION: false # 仅在所有配置都正确的情况下才应设置为 true。详见 https://github.com/nextcloud/all-in-one?tab=readme-ov-file#how-to-skip-the-domain-validation
# # TALK_PORT: 3478 # 允许调整 Talk 容器在宿主机上暴露的端口。详见 https://github.com/nextcloud/all-in-one#how-to-adjust-the-talk-port
# # WATCHTOWER_DOCKER_SOCKET_PATH: /var/run/docker.sock # 当宿主机上的 docker socket 不在默认的 '/var/run/docker.sock' 位置时需要指定。否则 mastercontainer 更新将失败。对于 macos,它需要是 '/var/run/docker.sock'
# # 可选:Caddy 反向代理。详见 https://github.com/nextcloud/all-in-one/discussions/575
# # 或者,如果你还没有域名,可以使用 Tailscale。详见 https://github.com/nextcloud/all-in-one/discussions/6817
# # 提示:你需要取消注释上面的 APACHE_PORT: 11000,将 cloud.example.com 调整为你的域名,并取消注释此文件底部必要的 docker volumes 才能使其工作
# # 你可以在这里找到更多示例:https://github.com/nextcloud/all-in-one/discussions/588
# caddy:
# image: caddy:alpine
# restart: always
# container_name: caddy
# volumes:
# - caddy_certs:/certs
# - caddy_config:/config
# - caddy_data:/data
# - caddy_sites:/srv
# network_mode: "host"
# configs:
# - source: Caddyfile
# target: /etc/caddy/Caddyfile
# configs:
# Caddyfile:
# content: |
# # 下面将 cloud.example.com 调整为你的域名
# https://cloud.example.com:443 {
# reverse_proxy localhost:11000
# }
volumes: # 如果你想将数据存储在不同的驱动器上,请参阅 https://github.com/nextcloud/all-in-one#how-to-store-the-filesinstallation-on-a-separate-drive
nextcloud_aio_mastercontainer:
name: nextcloud_aio_mastercontainer # 这一行不允许更改,否则内置的备份解决方案将无法工作
# caddy_certs:
# caddy_config:
# caddy_data:
# caddy_sites:
# # 调整 docker 网络的 MTU 大小。详见 https://github.com/nextcloud/all-in-one#how-to-adjust-the-mtu-size-of-the-docker-network
# networks:
# nextcloud-aio:
# name: nextcloud-aio
# driver_opts:
# com.docker.network.driver.mtu: 1440
我们需要把极空间本地的 127.0.0.1:11000 (Nextcloud) 和 127.0.0.1:8082 (AIO 管理后台,可选) 穿透出去。
本地 frpc.ini 配置参考:
js\[common\]
server\_addr \= \<你的云服务器IP\>
server\_port \= 7000
\# ... 其他配置 ...
\# 转发 Nextcloud 主程序
\[nextcloud-http\]
type \= tcp
local\_ip \= 127.0.0.1
local\_port \= 11000
remote\_port \= 11000 \# 云服务器上对应的端口
\# (可选) 转发 AIO 管理后台,仅在需要维护时开启
\[nextcloud-aio-admin\]
type \= tcp
local\_ip \= 127.0.0.1
local\_port \= 8082
remote\_port \= 8082
登录你云服务器上的 NPM 管理后台,添加一个新的 Proxy Host:
https://\<你的局域网IP\>:8082 (或者通过 FRP 的https://\<域名\>:8082)。cloud.zym588.space。由于 AIO 容器在极空间网络环境下无法直接访问外网(Docker Hub 或 Nextcloud 应用商店),你需要为它配置代理。
注意:AIO 界面没有提供代理设置框,我们必须修改配置文件。
docker run \-it \--rm \--volume nextcloud\_aio\_nextcloud:/var/www/html:rw alpine sh \-c "vi /var/www/html/config/config.php" js 'proxy' \=\> 'http://\<代理账号\>:\<代理密码\>@\<代理IP\>:\<端口\>',
'proxyexclude' \=\>
array (
0 \=\> 'localhost',
1 \=\> '127.0.0.1',
2 \=\> 'nextcloud-aio-database',
3 \=\> 'nextcloud-aio-redis',
4 \=\> 'nextcloud-aio-apache',
5 \=\> 'nextcloud-aio-mastercontainer',
6 \=\> '你的域名 (cloud.zym588.space)',
7 \=\> '你的极空间内网IP (192.168.31.221)',
),
本文作者:小转圈
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!