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
sudo openssl req -new -key nextcloud.key -out nextcloud.csr
sudo openssl x509 -req -days 365 -in nextcloud.csr -signkey nextcloud.key -out nextcloud.crt cd ..
|
5:编写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: image: nextcloud:latest restart: always ports: - "80: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=*
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 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
sudo docker-compose down
sudo docker volume rm nextcloud_db_data
sudo rm -rf config data mkdir config data
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
| sudo docker-compose up -d
|
- 访问网页: 在浏览器打开 https://192.168.1.8。
- 填写安装向导:
- 管理员账号/密码:填写你想要的(现在可以用回原来的名字了)。
- 数据目录:保持默认 /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 界面进行最后关联
- 登录 Nextcloud,在“应用”中确保已经安装并启用了 ONLYOFFICE 插件。
- 进入“管理设置” -> ONLYOFFICE:
- Document Editing Service address: https://192.168.1.8/ds-vpath/ (必须是你宿主机局域网 IP 加后缀)。
- Secret key: my_secret_key (你在 docker-compose 里设定的那个)。
- 关闭证书校验:因为你用的是自签名证书,请勾选 “Disable certificate verification (insecure)”。
- 点击 Save。
为什么这样做:
- 不冲突:通过 Nginx 的 location /ds-vpath/,我们将 Nextcloud 和 OnlyOffice 整合到了同一个 443 端口下,解决了跨域(CORS)问题。
- 轻量:这种方式只运行了 documentserver 核心镜像,没有运行冗余的社区版全家桶。
- 局域网适配:通过 X-Forwarded-Host 头部,OnlyOffice 能够识别自己正处于局域网反向代理之后。