免費搭建 OpenWebUI:Cloudflare Tunnel 零成本部署方案
Deploying OpenWebUI for Free with Cloudflare Tunnel
你想要擁有一個私人的 AI 對話平台,但不知道如何開始嗎? 想要從任何地方訪問你的 AI 助手,但不懂複雜的網絡配置嗎? 那麼你可以使用 Cloudflare Tunnel + DigitalPlat 免費域名 零成本搭建一個完整的 OpenWebUI 實例,通過免費域名和 Cloudflare 的全球 CDN 實現安全訪問,無需開放任何服務器端口,也不需要設定公網 IP。
本文以AWS EC2部署 (也可以是任何的Linux主機,或使用個人電腦安裝Docker Desktop來部署)
部署方式可以是 Docker 命令、Docker Compose 或 Kubernetes,本文以 Docker 為例。
架構說明
用戶瀏覽器 → Cloudflare CDN → Cloudflare Tunnel
→ EC2 Docker Container → OpenWebUI
技術棧:
- 前端訪問:免費域名 + Cloudflare CDN
- 內網穿透:Cloudflare Tunnel(內網穿透)
- 計算資源:AWS EC2(Ubuntu/Debian)
- 容器化:Docker
- 應用:OpenWebUI
第一階段:帳號準備與域名配置
1.1 註冊必要帳號
需要註冊的帳號:
- Cloudflare 帳號 - https://dash.cloudflare.com/sign-up
- 用途:域名 DNS 託管、CDN、Tunnel 服務
- GitHub 帳號 - https://github.com/signup
- 用於DigitalPlat帳號註冊的KYC認證
- DigitalPlat 帳號
- 用途:獲取免費域名,託管到Cloudflare
- AWS 帳號 - https://aws.amazon.com
- 用途:部署 EC2 服務器
- 可以用任何的Linux主機,或使用個人電腦安裝Docker Desktop來部署,本文以AWS舉例
1.2 申請並託管免費域名
步驟:
- 在 DigitalPlat 申請免費域名
- 登入 Cloudflare 控制台
- 點擊「添加站點」
- 輸入你的域名
- 選擇「Free」方案
- 記錄 Cloudflare 提供的 Nameserver(通常是兩個)
- 回到 DigitalPlat,將 Nameserver 修改為 Cloudflare 提供的地址
- 等待 DNS 生效(通常數十分鐘內,最長可能需要 24 小時)
詳細教學請參考這部影片:
第二階段:Cloudflare Tunnel 設定
2.1 創建 Cloudflare Tunnel
登入 Cloudflare 控制台,左側菜單選擇「Zero Trust」

在左側選單中點擊「Networks」,在彈出的下拉選單中選擇「Tunnels」


在「Create a Tunnel」頁面中點擊「Create a Tunnel」

選擇「Cloudflared」類型

為 Tunnel 命名(例如:
test-openwebui),點擊「Save Tunnel」
在「Choose your environment」中選擇「Docker」,複製顯示的 Docker 命令(後續需要使用)

2.2 暫時保留配置頁面
先不要關閉這個頁面,我們稍後會回來配置公共主機名。
第三階段:AWS EC2 實例部署
3.1 啟動 EC2 實例
登入 AWS 控制台
進入 EC2 服務
點擊「Launch Instance」

實例配置建議:
- 名稱:
openwebui-server - AMI:Ubuntu 24.04 LTS 或 Debian 13
- 實例類型:t3.small
- 密鑰對:創建新密鑰或使用現有密鑰(用於 SSH 連接)
- 網絡設定
- 允許 SSH(端口 22)從你的 IP
- ⚠️ 不需要開放 HTTP/HTTPS 端口(Tunnel 會處理)
設定好各項參數後,點擊「Launch Instance」並等待啟動

儲存空間要設定大一點


3.2 連接到 EC2 實例

第四階段:服務器環境配置
4.1 更新系統
# 更新套件列表
sudo apt update && sudo apt upgrade -y
4.2 安裝 Docker CE
使用官方一鍵腳本:
# 下載並執行 Docker 官方安裝腳本
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
# 將當前用戶加入 docker 群組(避免每次都用 sudo)
sudo usermod -aG docker $USER
# 登出後重新登入,或執行
newgrp docker
# 驗證安裝
docker --version
docker ps
設置 Docker 開機自動啟動:
sudo systemctl enable docker
sudo systemctl start docker
第五階段:部署容器服務
5.1 安裝 Cloudflared(Tunnel 客戶端)

複製2.1 第 6 步Cloudflare頁面中的docker指令,應該會長這樣
docker run cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <你的 TUNNEL_TOKEN>
複製指令中的TOKEN ,將下列指令中的<你的 TUNNEL_TOKEN>修改成複製的TOKEN,在終端中貼上
# 創建 Docker 網絡
docker network create cloudflare-tunnel
# 運行 cloudflared(注意要加入剛創建的 cloudflare-tunnel 網絡,
# 否則後續用容器名稱 openwebui:8080 會解析不到)
docker run -d \
--name cloudflared-tunnel \
--network cloudflare-tunnel \
--restart unless-stopped \
cloudflare/cloudflared:latest \
tunnel --no-autoupdate run --token <你的 TUNNEL_TOKEN>
驗證運行:
# 查看容器日誌
docker logs cloudflared-tunnel
# 應該看到類似 "Connection registered" 的訊息
5.2 部署 OpenWebUI
# 運行 OpenWebUI 容器
docker run -d \
--name openwebui \
--network cloudflare-tunnel \
-v open-webui:/app/backend/data \
--restart unless-stopped \
ghcr.io/open-webui/open-webui:main
參數說明:
--network cloudflare-tunnel:與 cloudflared 同網絡,Tunnel 直接以容器名稱openwebui:8080連線,因此不需要-p對主機發布任何端口(-p會把端口開放到主機所有網絡介面,並非「僅內網」)-v open-webui:/app/backend/data:持久化數據存儲
驗證運行:
docker ps
# 應該看到兩個容器:cloudflared-tunnel 和 openwebui
# 檢查 OpenWebUI 日誌
docker logs openwebui

第六階段:配置 Cloudflare 公共主機名
6.1 添加公共主機名路由
回到 Cloudflare Tunnel 配置頁面
點擊你創建的 Tunnel
選擇「Published application routes」標籤
點擊「Add a published application route」

配置詳情:
- Subdomain:
openwebui(或你喜歡的子域名) - Domain:選擇你的域名(
yourname.example.com) - Path:留空
- Service Type:HTTP
- URL:
openwebui:8080
⚠️ 重要說明:
- 如果兩個容器在同一 Docker 網絡,使用容器名稱
openwebui:8080- 如果使用Host網絡模式,使用
127.0.0.1:8080172.17.0.1是 Docker 默認Bridge網絡網關(Cloudflared默認的安裝命令是使用Bridge模式)
- 點擊「Save hostname」
6.2 SSL/TLS 設置(可選)
- 在 Cloudflare 域名控制台
- 進入「SSL/TLS」設置
- 選擇「Full」或「Full (strict)」模式
- 啟用「Always Use HTTPS」
第七階段:訪問與測試
7.1 首次訪問
在瀏覽器輸入:
https://openwebui.yourname.example.com
首次訪問會:
- 要求創建管理員帳號
- 設置系統語言和偏好
- 連接 AI 模型(如果配置了 API)
7.2 健康檢查
# 在 EC2 上測試(未對主機發布端口,所以從容器內測試)
docker exec openwebui curl -sf http://localhost:8080 -o /dev/null && echo OK
# 檢查 Tunnel 連接狀態
docker logs cloudflared-tunnel | grep "registered"
故障排除
問題 1:無法訪問域名
檢查清單:
# 1. 驗證 DNS 解析
dig openwebui.yourname.example.com
# 2. 檢查 Tunnel 連接
docker logs cloudflared-tunnel
# 3. 檢查 OpenWebUI 運行狀態
docker logs openwebui
# 4. 確認兩個容器都在同一網絡(cloudflared 鏡像很精簡,沒有 ping 可用)
docker network inspect cloudflare-tunnel
問題 2:502 Bad Gateway
可能原因:
- OpenWebUI 容器未正常運行
- Tunnel 配置的 URL 錯誤
- 容器間網絡不通
解決方案:
# 重啟容器
docker restart openwebui
docker restart cloudflared-tunnel
# 檢查容器網絡
docker network inspect cloudflare-tunnel
問題 3:Cloudflared Token 錯誤
重新獲取 Token:
- 刪除舊 Tunnel(如需要)
- 創建新 Tunnel
- 複製新 Token
- 更新容器配置