网络拓扑

假设已有域名为nextcloud.yourhost.com
用户通过域名https访问 -> Nginx -> frps -> frpc -> NextCloud
其中Nginxfrps安装在具有公网IP的服务器上,frpcNextCloud安装在内网服务器中。

Nginx配置

通过docker安装nginx-proxy-manager

外网服务器中,新建个文件夹,创建docker-compose.yml文件

version: '3'
services:app:image: 'jc21/nginx-proxy-manager:latest'container_name: nginx-proxy-managerrestart: unless-stoppedports:- '80:80'  # http端口- '81:81'  # 管理界面端口- '443:443'  # https端口volumes:- ./data:/data- ./letsencrypt:/etc/letsencrypt

docker compose up -d启动后访问81端口打开nginx-proxy-manager管理界面(防火墙记得打开80, 81, 443

nginx-proxy-manager配置

按下述文档配置nginx-proxy-manager

https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md#nginx-proxy-manager—npm

其中Domain Names填入nextcloud.yourhost.com
由于我使用docker安装nginx-proxy-manager,Forward IP应当填docker中的宿主机IP:127.17.0.1(通过ip addr show docker0查找得到)
Forward Port改为 Frps 的vhostHTTPPort,如10080,与下面一致

Frps配置

下载Frp,到外网服务器中,我下载到/opt/frp/,请根据实际情况修改路径。

配置Frps

/opt/frp//frps.toml

bindPort = 37870
auth.token = xxxxx
vhostHTTPPort = 10080
vhostHTTPSPort = 10443

bindPort 为frp服务器和客户端通信端口,记得打开防火墙。
auth.token 可设置为一个随机字符串,用于通信加密。
vhostHTTPPortvhostHTTPSPort为http/https服务监听端口,用于给本机的nginx访问。

配置Frps开机启动

/etc/systemd/system/frps.service

[Unit]
Description = frp server
After = network.target syslog.target
Wants = network.target[Service]
Type = simple
ExecStart = /opt/frp/frps -c /opt/frp/frps.toml
Restart=on-failure
RestartSec=5s[Install]
WantedBy = multi-user.target

执行

sudo systemctl enable frps
sudo systemctl start frps

Frpc配置

配置Frpc

下载Frp,到内网服务器中,我下载到/opt/frp/,请根据实际情况修改路径。

/opt/frp/frpc.toml

serverAddr = "yourhost.com"
serverPort = 37870
auth.token = xxxxxincludes = ["./confd/*.toml"]

bindPortauth.token 需要与Frps一致,其他根据实际填写。

/opt/frp/confd/nextcloud.toml

[[proxies]]
name = "nextcloud"
type = "http"
localIP = "127.0.0.1"
localPort = 11000
customDomains = ["nextcloud.yourhost.com"]

配置通过nextcloud.yourhost.com访问外网服务器转发到内网服务器的127.0.0.1:11000,内外网服务器之间以及Frpc和NextCloud之间使用http通信。

这里的localPort 要与下面的APACHE_PORT对应

配置Frpc开机启动

/etc/systemd/system/frpc.service

[Unit]
Description = frp client
After = network.target syslog.target
Wants = network.target[Service]
Type = simple
WorkingDirectory=/opt/frp
ExecStart = /opt/frp/frpc -c /opt/frp/frpc.toml
Restart=on-failure
RestartSec=5s[Install]
WantedBy = multi-user.target

执行

sudo systemctl enable frps
sudo systemctl start frps

Nextcloud AIO配置

内网服务器中新建个文件夹,创建docker-compose.yml文件:

version: '3.8'services:nextcloud-aio-mastercontainer:image: ghcr.io/nextcloud-releases/all-in-one:latestcontainer_name: nextcloud-aio-mastercontainerrestart: alwaysports:- "18080:8080"volumes:- aio_mastercontainer:/mnt/docker-aio-config- /var/run/docker.sock:/var/run/docker.sock:roenvironment:- APACHE_PORT=11000- APACHE_IP_BINDING=0.0.0.0- SKIP_DOMAIN_VALIDATION=false- NEXTCLOUD_DATADIR=/newdata/nextcloud- NEXTCLOUD_UPLOAD_LIMIT=128G- NEXTCLOUD_MAX_TIME=36000- NEXTCLOUD_MEMORY_LIMIT=1024M- NEXTCLOUD_ENABLE_DRI_DEVICE=trueinit: truesysctls:- net.core.somaxconn=1024deploy:restart_policy:condition: anyvolumes:aio_mastercontainer:

NEXTCLOUD_DATADIR设置为你的数据储存路径

启动 docker:

docker compose up -d

随后打开localhost:18080执行初始化流程即可完成安装。

常见问题

Imagick插件无法下载

初始化过程中,容器nextcloud-aio-nextcloud可能会卡在Enabling Imagick...

2025-07-04T15:09:58.253331095Z Connection to nextcloud-aio-database (172.20.0.5) 5432 port [tcp/postgresql] succeeded!
2025-07-04T15:09:58.253810507Z + '[' -f /dev-dri-group-was-added ']'
2025-07-04T15:09:58.254285584Z ++ find /dev -maxdepth 1 -mindepth 1 -name dri
2025-07-04T15:09:58.255071763Z + '[' -n /dev/dri ']'
2025-07-04T15:09:58.255453279Z ++ find /dev/dri -maxdepth 1 -mindepth 1 -name renderD128
2025-07-04T15:09:58.256215830Z + '[' -n /dev/dri/renderD128 ']'
2025-07-04T15:09:58.256741487Z ++ stat -c %g /dev/dri/renderD128
2025-07-04T15:09:58.258725601Z + GID=993
2025-07-04T15:09:58.258744684Z + groupadd -g 993 render2
2025-07-04T15:09:58.270615549Z ++ getent group 993
2025-07-04T15:09:58.270649267Z ++ cut -d: -f1
2025-07-04T15:09:58.272696310Z + GROUP=render2
2025-07-04T15:09:58.272728341Z + usermod -aG render2 www-data
2025-07-04T15:09:58.288824588Z + touch /dev-dri-group-was-added
2025-07-04T15:09:58.291171246Z + set +x
2025-07-04T15:09:58.305853077Z Enabling Imagick...

这主要是网络问题,建议等几个小时,如果还是不行,执行下述操作禁用Imagick插件。

禁用 Imagick 插件

docker-compose.ymlenvironment:项中添加一行,将PHP插件列表设为空

      - NEXTCLOUD_ADDITIONAL_PHP_EXTENSIONS=

保存后,执行清理,然后重新运行docker compose up -d

清理安装环境

当需要还原到安装前状态时,执行清理:

docker compose down --volumes
docker rm -f $(docker ps -aq --filter name=^nextcloud-aio --filter name=^nextcloud_aio)
docker volume rm $(docker volume list -q --filter name=^nextcloud-aio --filter name=^nextcloud_aio)
docker network remove nextcloud-aio
# sudo rm -r /newdata/nextcloud # 路径与上面NEXTCLOUD_DATADIR一致。执行该项会删除NextCloud中的所有用户文件

后记

由于NextCloud必需使用固定域名+SSL,因此使用该方案并不灵活,难以通过多种方式连接NextCloud服务,如在可用时流量走局域网。因此,最后采用了基于Tailscale 的方案。

其中compose.yml配置如下

services:nextcloud-aio-mastercontainer:image: ghcr.io/nextcloud-releases/all-in-one:latestinit: truerestart: alwayscontainer_name: nextcloud-aio-mastercontainer # This line cannot be changed.volumes:- nextcloud_aio_mastercontainer:/mnt/docker-aio-config- /var/run/docker.sock:/var/run/docker.sock:ronetworks:- nextcloud-aioports:- 0.0.0.0:18080:8080environment:APACHE_PORT: 11000APACHE_IP_BINDING: 127.0.0.1SKIP_DOMAIN_VALIDATION: "true"NEXTCLOUD_DATADIR: /newdata/nextcloudNEXTCLOUD_UPLOAD_LIMIT: 128GNEXTCLOUD_MAX_TIME: 36000NEXTCLOUD_MEMORY_LIMIT: 1024MNEXTCLOUD_ENABLE_DRI_DEVICE: "true"caddy:build:context: .dockerfile: Caddy.Dockerfiledepends_on:tailscale:condition: service_healthyrestart: unless-stoppedenvironment:NC_DOMAIN: nextcloud.tailb1a5cf.ts.net # Change this to your domain ending with .ts.net in the format {$TS_HOSTNAME}.{tailnetdomain}volumes:- type: bindsource: ./Caddyfiletarget: /etc/caddy/Caddyfile- type: volumesource: caddy_certstarget: /certs- type: volumesource: caddy_datatarget: /data- type: volumesource: caddy_configtarget: /config- type: volumesource: tailscale_socktarget: /var/run/tailscale/ # Mount the volume for /var/run/tailscale/tailscale.sockread_only: truenetwork_mode: service:tailscaletailscale:image: tailscale/tailscale:v1.82.0environment:TS_HOSTNAME: nextcloud # Enter the hostname for your tailnetTS_AUTH_KEY: tskey-auth-XXXXXXXXXXXX-XXXXXXXXXXXXXX # OAuth client key recommendedTS_EXTRA_ARGS: --advertise-tags=tag:nextcloudinit: truehealthcheck:test: tailscale status --peers=false --json | grep 'Online.*true'start_period: 3sinterval: 1sretries: 3restart: unless-stoppeddevices:- /dev/net/tun:/dev/net/tunvolumes:- type: volumesource: tailscaletarget: /var/lib/tailscale- type: volumesource: tailscale_socktarget: /tmp # Mounting the entire /tmp folder to access tailscale.sockcap_add:- NET_ADMINnetworks:- nextcloud-aio
volumes:nextcloud_aio_mastercontainer:name: nextcloud_aio_mastercontainer # This line cannot be changed.caddy_certs:caddy_config:caddy_data:tailscale:tailscale_sock:
networks:nextcloud-aio:name: nextcloud-aiodriver: bridgeenable_ipv6: falsedriver_opts:com.docker.network.driver.mtu: "1280" # You can set this to 9001 etc. to use jumbo frames, but packets may be dropped.com.docker.network.bridge.host_binding_ipv4: "127.0.0.1" # Harden aiocom.docker.network.bridge.enable_icc: "true"com.docker.network.bridge.default_bridge: "false"com.docker.network.bridge.enable_ip_masquerade: "true"

注意事项

  • 需要打开tailscale的HTTPS Certificates
  • 获取ts密钥时记得勾选Ephemeral
  • 手动迁移/修改数据后输入docker exec -it nextcloud-aio-nextcloud su www-data -c "php /var/www/html/occ files:scan --all"扫描更新
  • NextCloud 的 docker volume 存放位置无法更改,手动迁移 docker volume 时需要使用cp -rp保留文件权限标识
  • 若出现 Nextcloud Office (Collabora) 和 Nextcloud Talk 无法使用,其中 Nextcloud Office 报错未经授权的WOPI主机Unauthorized WOPI host,并且在nextcloud-aio-collabora容器log中出现ERR: could not resolve host ...字样,说明子容器无法解析tailscale域名。需要在宿主机安装Tailscale,并将DNS加入docker容器中,具体操作如下:
sudo vim /etc/docker/daemon.json
# 写入
{"dns": ["100.100.100.100", "8.8.8.8", "114.114.114.114"], 
}
# 执行
sudo systemctl restart docker

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/88074.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/88074.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/88074.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【源力觉醒 创作者计划】文心开源大模型ERNIE-4.5-0.3B-Paddle私有化部署保姆级教程及技术架构探索

一起来轻松玩转文心大模型吧👉一文心大模型免费下载地址: https://ai.gitcode.com/theme/1939325484087291906 前言 2025年6月30日,百度正式开源文心大模型4.5系列(ERNIE 4.5),涵盖10款不同参数规模的模型&#xff0…

大模型面试:如何解决幻觉问题

在大模型面试中回答“如何解决幻觉”问题时,需要展现你对问题本质的理解、技术方案的掌握以及工程实践的洞察。以下是一个结构化的回答框架和关键点,供你参考:回答框架:问题理解 -> 解决方案 -> 总结 1. 明确问题&#xff0…

matlab实现五自由度机械臂阻抗控制下的力跟踪

五自由度机械臂阻抗控制下的力跟踪,可以实现对力的跟踪反馈,基于MATLAB的机器人工具箱 eyebot.m , 767 zuakang_wailiraodong.m , 2568 colormp.mat , 682

excel日志表介绍

在Excel中制作“日志表事物”(可理解为记录事务的日志表格),通常用于系统性追踪事件、任务、操作或数据变化。以下从表格设计、核心要素、制作步骤、函数应用及场景案例等方面详细说明,帮助你高效创建和使用事务日志表。 一、日志…

汽车信息安全 -- SHE密钥更新小细节

之前我们把SHE密钥更新流程做了梳理,汽车信息安全 -- SHE 密钥更新流程 但在实际做SHE Emulation的时候还是发现了问题,例如如果想更新SHE Key ID等于30,会如何影响M1-M5的值呢?。 今天就聊聊关于几家对于SHE Key的管理。 1. N…

Spring Boot配置优先级完全指南:实战解析覆盖规则

一、结论Spring Boot 中,位置越靠后优先级越高,外部配置压倒内部配置,命令行参数拥有最高优先权。案例: 在一次生产事故中,某团队通过 application-prod.properties 将服务端口设为 9000,但某运维人员在启动…

嵌入式数据库sqlite测试程序

继上篇对嵌入式数据库sqlite的移植和注意项,以及使用命令行测试之后,本篇对其进行了更进一步的程序测试,以备近期在项目中使用。测试程序及说明如下:/**************** 相关函数说明 ******************/ /* (1)sqlite3_open的函…

【学习篇】SQL复杂查询学习

要求:能对千万行级别的大表优化读写效率。 难点:如何创建千万行级别的大表 MySQL数据库的高效查询不仅依赖于合理的表结构和索引设计,还需要掌握高级查询技巧和性能优化方法。 数据表与数据表之间关系三种:实体之间关系 多对多…

Sequential Predictive Modeling of Clinical Trial Outcome with Meta-Learning解读

SPOT(Sequential Predictive Modeling of Clinical Trial Outcome with Meta-Learning)模型是用于临床试验结果预测的模型, 借鉴了模型无关元学习(MAML,Model-Agnostic Meta-Learning)的框架,将模型参数分为全局共享参数和任务特定参数,以平衡跨任务泛化与任务内适配:…

优先选择列表而非数组及泛型类型的使用

数组与泛型的核心差异 协变性与不变性 数组采用协变(covariant)类型规则:若Sub是Super的子类型,则数组类型Sub[]也是Super[]的子类型。这种设计允许以下代码通过编译: Object[] objectArray = new Long[1]; // 编译通过 objectArray[0

自动化Prompt生成平台的研发体系设计

一份轻松不啰嗦的自动化Prompt平台研发攻略 📑 目录 一、项目背景二、平台整体架构设计三、核心功能模块解析四、自动化流程设计五、样式与跨平台规范六、总结与展望 一、项目背景 在大模型应用爆发的今天,不写Prompt的工程师,正在变成“写…

[Swarm] 上下文变量 | 接入function功能调用 | Mcp

第3章:上下文变量 欢迎回到swarm! 在前两章中,我们学习了作为对话指挥者的Swarm框架和具备指令与技能的专用AI角色智能体。(智能体就相当于是给用户问题 已经写好了的提示词,在用户提问时自动加入,以此来给用户更好的…

【Unity开发】Unity实现第一人称视角与第三人称视角切换功能

一、效果展示 第三人称视角:固定摄像机,无任何操作 第一人称视角:用户可以通过wsad进行前后左右移动,qe进行上升下降操作 不同视角之间切换会有一个过渡动画,切换第一视角的初始位置始终为原点(0,0,0&am…

2025全球数字经济大会—云智算安全论坛暨第三届“SecGo论坛”成功召开!共筑安全新生态

2025年7月3日,由全球数字经济大会组委会主办,中国信息通信研究院、中国通信标准化协会承办的全球数字经济大会—云智算安全论坛暨第三届“SecGo论坛”在京召开。北京市经济和信息化局副局长顾瑾栩、中国通信标准化协会副理事长兼秘书长代晓慧、中国信通院…

KingbaseES聚焦产品上线:金仓数据库在线体验平台上线,开启数据库实践新征程

KingbaseES聚焦产品上线:金仓数据库在线体验平台上线,开启数据库实践新征程KingbaseES 在线体验平台是为数据库使用者、开发者、架构师及 DBA 打造的轻量化实践平台,无需本地安装数据库环境,通过浏览器即可快速上手,降…

LLMs之DeepSeek:AI模型市场深度分析:DeepSeek的挑战与机遇,模型市场份额、Token经济学与未来发展

LLMs之DeepSeek:AI模型市场深度分析:DeepSeek的挑战与机遇,模型市场份额、Token经济学与未来发展 导读:该文章主要分析了中国大语言模型DeepSeek R1发布150天后的市场表现、Token经济学的影响以及AI模型市场的竞争格局。文章指出&…

服装零售企业跨区域运营难题破解方案

在服装零售行业,本地化业务系统因承载库存、销售等核心数据,成为众多企业的选择。然而对于门店分布广、规模较大的服装销售商而言,总部系统与各地门店的远程连接却面临挑战:员工远程办公效率低、POS机数据同步滞后、跨区域监管难度…

- 思考小记

对于 分布式系统,我还是抱有敬畏之心的,因为其内容过于庞大;我在学习基础编程的时候走过一个最大的弯路就是过度追求技术而忽视了基础编码能力,当时在学习springboot的时候,觉得那些新内容都是那么新奇高大上&#xff…

装备制造数字孪生底座平台

在《中国制造2025》和《“十四五”智能制造发展规划》的推动下,数字孪生技术被7次重点提及,成为装备制造业智能化升级的核心战略。从航空航天到重型机械,从设计验证到运维优化,数字孪生底座平台正通过“虚实映射”与“实时交互”&…

Redis构建缓存服务器

环境信息: redis-master----192.168.12.135 redis-slave-1-----192.168.12.136 redis-slave-2-----192.168.12.137 单机版Redis 安装Redis yum install -y gcc make jemalloc jemalloc-devel gcc-c wget tcl yum groupinstall -y "Development Tools" wge…