飞牛 NAS (FnOS) / Debian Docker 部署 Nextcloud 指南

wxh Lv3

核心镜像lscr.io/linuxserver/nextcloud:latest (LSIO)

适用环境:飞牛 NAS (FnOS) / Debian / Ubuntu / 任何支持 Docker 的 Linux

适用人群:希望建立一套高性能、无警告、完全掌控数据的私有云用户。

💡 序言:为什么选择 LinuxServer.io (LSIO) 镜像?

官方镜像虽然权威,但在 NAS 环境下往往会遇到棘手的权限问题(Permission Denied)。我们选择 LSIO 版本 的三大理由:

  1. 权限不折腾:通过 PUID/PGID 完美映射宿主机用户,告别权限地狱。
  2. 内置 Nginx:开箱即用,无需额外配置 Web 服务器容器。
  3. 生态友好:通过 Docker Mods 机制,可轻松集成 FFmpeg 等组件。

1. 基础环境准备

1.1 获取用户权限 (UID/GID)

为了让 Nextcloud 能读写你 NAS 里的文件,我们需要获取当前用户的 ID。

在终端输入:

Bash

1
2
id
# 输出示例: uid=1000(admin) gid=1000(admin)

注:请记录下这两个数值(通常是 1000),后续配置中会用到。

1.2 目录规划

建议将系统配置(读写频繁的小文件)与用户数据(大文件)分开存放。

Bash

1
2
3
4
5
6
/vol1/docker/nextcloud/      # 存放 docker-compose.yml 及配置文件
├── config/ # (SSD) 存放配置、应用、缩略图
├── db/ # (SSD) 数据库文件
└── redis/ # (SSD) Redis 缓存

/vol2/data/nextcloud_data # (HDD) ⚠️ 存放照片、文档等核心数据

2. 基础容器编排 (Docker Compose)

创建 docker-compose.yml。这将部署一个包含数据库和缓存的基础 Nextcloud。

YAML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
networks:
nextcloud_net:
name: local_nextcloud

services:
nextcloud:
image: lscr.io/linuxserver/nextcloud:latest
container_name: nextcloud
restart: always
networks:
- nextcloud_net
environment:
- PUID=1000 # 替换为 1.1 获取的 UID
- PGID=1000 # 替换为 1.1 获取的 GID
- TZ=Asia/Shanghai
# 基础功能依赖:自动注入 FFmpeg (视频转码)
# 注:如果你需要 Client Push,请在下面加上 |linuxserver/mods:nextcloud-notify-push
- DOCKER_MODS=linuxserver/mods:universal-package-install|linuxserver/mods:nextcloud-notify-push
- INSTALL_PACKAGES=ffmpeg
# 性能调优:给 PHP 足够的内存
- PHP_MEMORY_LIMIT=2G
- PHP_UPLOAD_LIMIT=10G
volumes:
- ./config:/config
# ⚠️ 核心数据映射:将 NAS 的 HDD 存储盘挂载为容器内的 /data
- /vol2/data/nextcloud_data:/data
ports:
- "8080:80" # 宿主机端口:容器端口
depends_on:
- mariadb
- redis

mariadb:
image: lscr.io/linuxserver/mariadb:latest
container_name: nextcloud_db
restart: always
networks:
- nextcloud_net
environment:
- PUID=1000
- PGID=1000
- MYSQL_ROOT_PASSWORD=StrongRootPass! # 请修改
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=StrongDbPass! # 请修改
- TZ=Asia/Shanghai
volumes:
- ./db:/config

redis:
image: redis:alpine
container_name: nextcloud_redis
restart: always
networks:
- nextcloud_net
command: redis-server --requirepass "StrongRedisPass!" # 请修改
volumes:
- ./redis:/data

启动命令:

Bash

1
docker compose up -d

3. 初始化配置 (至关重要)

访问 http://<NAS_IP>:8080 进入安装向导。

⚠️ 避坑指南:修改数据目录

在创建管理员账号页面,**务必点击“存储与数据库”**展开配置:

  1. 数据目录 (Data Folder)
    • 默认可能显示:/config/www/nextcloud/data
    • 必须手动修改为:/data
    • 说明:这对应 YAML 中挂载的 HDD 路径,否则数据会挤爆系统盘。
  2. 数据库配置
    • 类型:MySQL/MariaDB
    • 主机:mariadb (填写 Service 名称)
    • 用户/密码/库名:对应 Compose 配置

4. 深度调优 (消灭警告)

4.1 修改 config.php

路径:./config/www/nextcloud/config/config.php

PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
$CONFIG = array (
// ... 保持原有配置 ...

// 1. 信任域与反代 (解决“不受信任的域”警告)
'trusted_domains' =>
array (
0 => '192.168.1.10:8080', // 内网 IP
1 => 'cloud.example.com:8443', // 公网域名+端口
),
'trusted_proxies' => ['172.18.0.1', '192.168.1.10'], // 信任 Docker 网关及 NAS IP
'overwriteprotocol' => 'https',
'overwrite.cli.url' => 'https://cloud.example.com:8443',
'overwritehost' => 'cloud.example.com:8443',

// 2. 本地化
'default_phone_region' => 'CN',
'default_language' => 'zh_CN',
'default_locale' => 'zh_Hans_CN',
'default_timezone' => 'Asia/Shanghai',

// 3. Redis 缓存 (解决文件锁警告)
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' =>
array (
'host' => 'redis',
'port' => 6379,
'password' => 'StrongRedisPass!',
),

// 4. 启用 FFmpeg 预览
'enabledPreviewProviders' =>
array (
0 => 'OC\\Preview\\Movie',
1 => 'OC\\Preview\\MP4',
2 => 'OC\\Preview\\MKV',
3 => 'OC\\Preview\\Image',
),
'preview_ffmpeg_path' => '/usr/bin/ffmpeg',
);

4.2 修正 Nginx 配置

路径:./config/nginx/site-confs/default.conf

修改 1:禁止绝对重定向 (Server 块中顶部位置)

建议添加至server_name _;的下一行

Nginx

1
absolute_redirect off;

修改 2:适配 .well-known (解决概览页红色警告)

Nginx

1
2
3
4
5
6
7
location ^~ /.well-known {
rewrite ^/.well-known/webfinger /index.php/.well-known/webfinger last;
rewrite ^/.well-known/nodeinfo /index.php/.well-known/nodeinfo last;
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
try_files $uri $uri/ /index.php$request_uri;
}

4.3 补全数据库索引与 Cron

Bash

1
2
# 补全索引
docker exec -it -u abc nextcloud php /app/www/public/occ db:add-missing-indices

最后,在 Nextcloud 网页端 管理设置 -> 基本设置 中,将后台任务改为 Cron


5. 挂载 NAS 本地资源

如果你是在 NAS 系统下部署,肯定希望 Nextcloud 能直接读取你硬盘里已经下载好的电影或存好的代码,而不是把它们再复制一遍。

  1. 添加映射:在 docker-compose.ymlvolumes 中添加:

    YAML

    1
    - /vol2/Media/Movies:/nas_movies:rw

    重启容器生效。

  2. 启用插件:在应用市场启用 “External storage support”

  3. 配置挂载

    • 进入 管理设置 -> 外部存储
    • 添加 “本地 (Local)”
    • 配置路径:/nas_movies (容器内路径)。
  4. 关键设置:点击行末齿轮,勾选 “启用预览”“启用共享”


6. (可选) 进阶功能扩展

以下功能属于“锦上添花”,请根据实际需求配置。

🛠️ 前置:插件手动安装指南

国内网络连接商店不稳定,推荐手动安装。

  1. 下载插件 .tar.gz 包 (Client Push / Talk)。
  2. 解压至宿主机 ./config/www/nextcloud/apps/
  3. 修正权限:chown -R 1000:1000 ./config/www/nextcloud/apps/
  4. 启用插件:docker exec -it -u abc nextcloud php /app/www/public/occ app:enable <插件名(就是插件对应的目录名称)>

A. 实时推送 (Client Push)

作用:让网页和手机端消息“秒弹”,大幅降低服务器轮询负载。

  1. 修改 Nginx 配置 (./config/nginx/site-confs/default.conf):

    添加以下 block 以支持 WebSocket:

    Nginx

    1
    2
    3
    4
    5
    6
    7
    8
    location ^~ /push/ {
    proxy_pass http://127.0.0.1:7867/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    重启容器生效。

  2. 激活服务

    Bash

    1
    docker exec -it -u abc nextcloud php /app/www/public/occ notify_push:setup https://cloud.example.com:8443/push

B. 视频通话 (Talk & Coturn)

作用:实现类似微信的视频通话。外网环境必须部署 Coturn 进行穿透。

1. 部署 Coturn (TURN 服务器)

将以下服务追加到你的 docker-compose.yml 中(注意:Coturn 建议使用 Host 网络模式):

YAML

1
2
3
4
5
6
7
8
9
10
11
12
coturn:
image: coturn/coturn
container_name: coturn
restart: always
network_mode: host # 必须使用 Host 模式以支持 IPv6 及 UDP
environment:
# 替换为你的域名
- TURNSERVER_REALM=cloud.example.com
# 自定义一个密钥,后续要在 Nextcloud 里填
- TURNSERVER_STATIC_AUTH_SECRET=MyTurnSecretKey
command:
- -n --log-file=stdout --external-ip=$(detect-external-ip) --relay-ip=$(detect-external-ip)

重新运行 docker compose up -d 启动 Coturn。

2. 配置 Nextcloud Talk

进入 管理设置 -> Talk,添加 TURN 服务器:

  • 服务器cloud.example.com:3478
  • 密钥MyTurnSecretKey (与 Coturn 配置一致)
  • 协议:选择 UDP 和 TCP
  • 标题: 飞牛 NAS (FnOS) / Debian Docker 部署 Nextcloud 指南
  • 作者: wxh
  • 创建于 : 2026-02-05 00:00:00
  • 更新于 : 2026-02-05 23:17:45
  • 链接: https://blog.private-cloud.site/2026/02/05/飞牛Nas、Linux服务器部署Nextcloud指南/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论