Fedora 43 Xfce 安装局域网Nextcloud

前请提要

在服务器上安装Nextcloud原本并不是一件很难的事,因为官网上就给出了一件用Docker安装的命令,不过当我真正去尝试安装官网所谓的All in One版本时,我发现,它必须使用公网域名进行安装前的准备,所以本次是我来记录一下不需要那些条件就可以安装Nextcloud到局域网本地的教程。

1:安装Docker

1
2
sudo dnf install docker docker-compose
sudo systemctl enable --now docker

2:允许防火墙通过

1
2
3
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

3:创建目录结构

1
2
3
4
mkdir -p ~/nextcloud/data
mkdir -p ~/nextcloud/config
mkdir -p ~/nextcloud/ssl
cd ~/nextcloud

4:生成自签名证书SSL

1
2
3
4
5
6
7
8
9
cd ssl
# 生成私钥
sudo openssl genrsa -out nextcloud.key 2048
# 生成证书签名请求 (CSR),这里需要填写信息,除了 Common Name 外其余可按回车跳过
# Common Name 填写你的服务器局域网 IP,例如: 192.168.1.100
sudo openssl req -new -key nextcloud.key -out nextcloud.csr
# 生成自签名证书 (有效期 365 天)
sudo openssl x509 -req -days 365 -in nextcloud.csr -signkey nextcloud.key -out nextcloud.crt
cd ..

5:编写docker-compose.yml

1
i
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
version: '3'

services:
db:
image: mariadb:10.6
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=nichenyang # 修改为你自己的数据库 root 密码
- MYSQL_PASSWORD=nichenyang # 修改为你自己的数据库用户密码
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud

app:
image: nextcloud:latest
restart: always
ports:
- "80:80" # 将容器的 80 端口映射到宿主机的 8080,避免占用本机 80
links:
- db
volumes:
- ./data:/var/www/html/data
- ./config:/var/www/html/config
environ# 生成证书签名请求 (CSR),这里需要填写信息,除了 Common Name 外其余可按回车跳过ment:
- MYSQL_PASSWORD=nichenyang # 需与上面一致
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
- NEXTCLOUD_TRUSTED_DOMAINS=* # 这里填入你的服务器 IP

# 使用 Nginx 进行 SSL 代理
nginx:
image: nginx:alpine
restart: always
ports:
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./ssl:/etc/nginx/ssl:ro
links:
- app

volumes:
db_data:

6:编写nginx配置文件

1
vim nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
events {}
http {
upstream nextcloud {
server app:80;
}

server {
listen 443 ssl;
server_name _; # 替换为你的服务器 IP

ssl_certificate /etc/nginx/ssl/nextcloud.crt;
ssl_certificate_key /etc/nginx/ssl/nextcloud.key;

location / {
proxy_pass http://nextcloud;
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;
}
}
}

7:启动容器

1
sudo docker-compose up -d

8:访问与初始化

打开浏览器,访问 https://localhost

进行后续配置即可。

后续新增

配置完成后发现只有本机localhost和docker的局域网地址可以访问,但是宿主机的192网络却无法访问,这个问题只需要在配置文件中修改一下即可,步骤如下

在nextcloud/目录下

1
sudo vim config/config.php

找到配置文件位置如下

1
2
3
4
5
'trusted_domains' => 
array (
0 => 'localhost',
1 => '192.168.1.8', // 你的局域网 IP
),

如果只限定指定IP访问,修改192.168.1.8即可,

如果很多,只需要改为 ‘trusted_domains’ => array ( 0 => ‘*‘ ), 这样就可以让其他用户访问了。


重装教程

这份指南将带你从物理层面的彻底清理开始,一步步恢复到一个纯净、稳定的 Nextcloud 环境,并确保彻底抹除之前 OnlyOffice 留下的所有干扰。


第一步:彻底物理清理(关键)

在重装前,必须删除旧的容器、网络以及隐藏在 Docker 内部的数据库卷。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cd ~/nextcloud

# 1. 停止所有容器并删除网络
sudo docker-compose down

# 2. 删除数据库持久化卷 (这一步确保你能用原用户名重新注册)
# 卷名通常是 [目录名]_db_data,你可以用 sudo docker volume ls 确认
sudo docker volume rm nextcloud_db_data

# 3. 彻底删除 config 和 data 目录并重建 (确保连隐藏文件也不剩)
sudo rm -rf config data
mkdir config data

# 4. 修复 Fedora SELinux 权限标签
sudo chcon -Rt svirt_sandbox_file_t config data

第二步:准备原始配置文件

请确保你的 docker-compose.yml 和 nginx.conf 已经回滚到最纯净的状态(不含任何 OnlyOffice 字段)。

1. 纯净版 docker-compose.yml

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
version: '3'
services:
db:
image: mariadb:10.6
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=nichenyang
- MYSQL_PASSWORD=nichenyang
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud

app:
container_name: nextcloud-app-1
image: nextcloud:latest
restart: always
ports:
- "80:80"
links:
- db
volumes:
- ./data:/var/www/html/data
- ./config:/var/www/html/config
environment:
- MYSQL_PASSWORD=nichenyang
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
- NEXTCLOUD_TRUSTED_DOMAINS=*

nginx:
container_name: nextcloud-nginx-1
image: nginx:alpine
restart: always
ports:
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
- ./ssl:/etc/nginx/ssl:ro
links:
- app

volumes:
db_data:

2. 纯净版 nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
events {}
http {
upstream nextcloud {
server app:80;
}
server {
listen 443 ssl;
server_name _;
ssl_certificate /etc/nginx/ssl/nextcloud.crt;
ssl_certificate_key /etc/nginx/ssl/nextcloud.key;
location / {
proxy_pass http::/nextcloud;
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;
}
}
}

第三步:启动与初始化

  1. 启动容器:
1
sudo docker-compose up -d
  1. 访问网页: 在浏览器打开 https://192.168.1.8。
  2. 填写安装向导:
  • 管理员账号/密码:填写你想要的(现在可以用回原来的名字了)。
  • 数据目录:保持默认 /var/www/html/data。
  • 数据库用户:nextcloud
  • 数据库密码:nichenyang
  • 数据库名称:nextcloud
  • 数据库主机:db (重要:不要填 localhost)

第四步:后续维护建议

  • 恢复备份数据:安装完成后,你可以将备份的个人文件拷贝回 ~/nextcloud/data/用户/files/ 下,然后运行 sudo docker exec -u www-data nextcloud-app-1 php occ files:scan –all 来让系统识别它们。
  • 关于 OnlyOffice:如果未来还需要在线编辑,建议优先考虑 Nextcloud 内置的 Nextcloud Office (Collabora),它的集成度更高,配置更简单。

恭喜你!现在你拥有了一个全新的、没有任何历史包袱的 Nextcloud 系统。


以下内容为AI总结的后续新增Onlyoffice插件,需要修改的地方

根据你提供的 ONLYOFFICE 官方 docker-compose.yml 模板和 nginx.conf 结构,结合你现有的 Fedora 局域网 Nextcloud 环境,我们不能直接运行官方的脚本(因为它会启动一个全新的独立 Nextcloud),而是需要将 ONLYOFFICE Document Server 作为一个组件“合入”到你现有的 Docker 网络中。

以下是实现“局域网 HTTPS Nextcloud + 在线编辑”的正确整合步骤:

1. 修改 docker-compose.yml (添加服务)

在你原有的 ~/nextcloud/docker-compose.yml 中,添加 onlyoffice-document-server 服务。

注意: 为了安全和配置自动对接,我们给它加上 JWT_SECRET。

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
version: '3'

services:
db:
image: mariadb:10.6
# ... (保持你原有的配置不变)

app:
image: nextcloud:latest
# ... (保持你原有的配置不变)

# --- 新增 ONLYOFFICE 服务 ---
onlyoffice-document-server:
container_name: onlyoffice-document-server
image: onlyoffice/documentserver:latest
restart: always
environment:
- JWT_SECRET=my_secret_key # 自定义你的密钥
expose:
- '80'
volumes:
- document_data:/var/www/onlyoffice/Data
- document_log:/var/log/onlyoffice

nginx:
image: nginx:alpine
# ... (原有配置)
links:
- app
- onlyoffice-document-server # 必须 link 这个新服务

volumes:
db_data:
document_data: # 新增
document_log: # 新增

2. 修改 nginx.conf (配置路径转发)

这一步非常关键。我们需要参考 ONLYOFFICE 的 Nginx 模板,在你原有的 443 端口配置中增加一个 /ds-vpath/ 的转发路径,这样你的 Nextcloud 就能通过同一个 IP 访问到后端引擎。

编辑 ~/nextcloud/nginx.conf:

Nginx

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
events {}
http {
upstream nextcloud {
server app:80;
}

# 新增 ONLYOFFICE 上游
upstream onlyoffice {
server onlyoffice-document-server:80;
}

server {
listen 443 ssl;
server_name _;

ssl_certificate /etc/nginx/ssl/nextcloud.crt;
ssl_certificate_key /etc/nginx/ssl/nextcloud.key;

# --- 原有的 Nextcloud 转发 ---
location / {
proxy_pass http://nextcloud;
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;
}

# --- 新增的 ONLYOFFICE 路径转发 (参考官方模板) ---
location ~* ^/ds-vpath/ {
rewrite /ds-vpath/(.*) /$1 break;
proxy_pass http://onlyoffice;
proxy_redirect off;

client_max_body_size 100m;

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 告诉 ONLYOFFICE 它的外部访问地址带路径
proxy_set_header X-Forwarded-Host $http_host/ds-vpath;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
}

3. 应用配置与权限修复

执行以下命令重启并修复 Fedora 的 SELinux 权限:

Bash

1
2
3
4
5
6
7
8
9
# 1. 停止并启动新容器
sudo docker-compose up -d

# 2. 修复新生成的 Document Server 卷权限
sudo chcon -Rt svirt_sandbox_file_t /var/lib/docker/volumes/nextcloud_document_data
sudo chcon -Rt svirt_sandbox_file_t /var/lib/docker/volumes/nextcloud_document_log

# 3. 再次确保 config.php 允许本地连接
sudo docker exec -u www-data nextcloud-app-1 php occ config:system:set allow_local_remote_servers --value true --type bool

4. 在 Nextcloud 界面进行最后关联

  1. 登录 Nextcloud,在“应用”中确保已经安装并启用了 ONLYOFFICE 插件。
  2. 进入“管理设置” -> ONLYOFFICE:
    • Document Editing Service address: https://192.168.1.8/ds-vpath/ (必须是你宿主机局域网 IP 加后缀)。
    • Secret key: my_secret_key (你在 docker-compose 里设定的那个)。
    • 关闭证书校验:因为你用的是自签名证书,请勾选 “Disable certificate verification (insecure)”。
  3. 点击 Save。

为什么这样做:

  • 不冲突:通过 Nginx 的 location /ds-vpath/,我们将 Nextcloud 和 OnlyOffice 整合到了同一个 443 端口下,解决了跨域(CORS)问题。
  • 轻量:这种方式只运行了 documentserver 核心镜像,没有运行冗余的社区版全家桶。
  • 局域网适配:通过 X-Forwarded-Host 头部,OnlyOffice 能够识别自己正处于局域网反向代理之后。