部署NextCloud AIO + Frp + nginx-proxy-manager內網穿透私有云服務

網絡拓撲

假設已有域名為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…