---
title: "使用 Cloudflare Tunnel 及 Docker 快速 架設 具有 Web UI 管理界面的 FTP Server - sftpgo"
description: "使用 Docker 快速架設 SFTPGo，並透過 Cloudflare Tunnel 對外暴露，讓 FTP Server 擁有 Web UI 管理介面，支援 SFTP 與 WebDAV。"
canonical_url: "https://blog.markkulab.net/post/docker-web-ui-ftp-server-sftpgo"
author: "Mark Ku"
author_url: "https://blog.markkulab.net/author/mark-ku"
site: "Mark Ku's Blog"
date_published: "2023-12-20 01:01:35 +0800"
category: "DevOps"
tags: ["ftp", "sftp", "sftpgo", "docker", "cloudflare tunnel", "webdav", "self-hosted", "devops"]
language: "zh-TW"
license: "CC BY 4.0"
license_url: "https://creativecommons.org/licenses/by/4.0/"
attribution: "轉載或引用請註明作者並附上原文連結"
---

# 使用 Cloudflare Tunnel 及 Docker 快速 架設 具有 Web UI 管理界面的 FTP Server - sftpgo

## 時空背景
因為德國及美國的網站需要一套全新的FTP Server，因此花了些時間研究，試了幾套 Docker FTP後，終於找到擁有 Web UI 管理界面，且開源 SFTP Server - sftpgo。

## sftpgo - 官方資料
功能齊全，且高度可配置的 SFTP 伺服器，具有可選的 HTTP/S、FTP/S 和 WebDAV 支援，支援的儲存後端：本機檔案系統、加密本機檔案系統、S3（相容）物件儲存、Google 雲端儲存、Azure Blob 儲存、其他 SFTP 伺服器，並擁有 WebAdmin 及 WebClient 使用者界面，並可以透過使用者界面備份，FTP 設定。
[sftpgo官網](https://sftpgo.com/)  
[Github](https://github.com/drakkan/sftpgo)

## 談到FTP 就順便了解一下，常見的FTP 協定
sftpgo 目前看起來只支援 SFTP，傳統的 FTP/S 我試了蠻久，依舊沒有作用，但SFTP在設定防火牆來說，相較容易許多，只能設定單埠就能資料交換，但我也順便了解一下
### 1. SFTP : SFTP（Secure File Transfer Protocol）是一種通過SSH（安全外殼協議）提供加密和安全的檔案傳輸服務的網絡協議。 (22 port) 
### 2. FTP / FTPS :FTP是一種用於網絡上檔案傳輸的標準協議，而FTPS是FTP的安全版本，通過SSL/TLS提供加密傳輸。
當然可以。FTP的主動模式（PORT）和被動模式（PASV）的主要差異在於資料連接的建立方式：
* 主動模式(PORT)：客戶端打開一個隨機連接埠以接收資料，然後通過PORT命令告知伺服器這個連接埠號(21 port)，伺服器隨後從其連接埠(20 port)連接到客戶端指定的連接埠來傳輸資料，這時要求客戶端的防火牆若不允許來自FTP伺服器的入站連接時可能會遇到問題。
* 被動模式(PASV)：客戶端從伺服器的連接埠請求一個被動連接，伺服器打開一個隨機連接埠並通知客戶端，進行資料傳輸。
總結來說，主動模式和被動模式的主要區別在於資料連接的發起方和連接的建立方式，這影響了對防火牆設定的需求，被動模式通常更適合於現代的網絡環境，特別是當客戶端位於受限的網絡環境中時。

## 預先準備
* 在宿主主機，安裝 Docker Desktop
* 安裝及設定 Cloudfalre Tunnel，並挷定 sftpgo 所需要的連接埠。(sftpgo Web 透過 Cloudflare Tunnel 讓外部可以透過web 上傳檔案，但SFTP 詢問Cloudflare 官方 SFTP 仍有e一些bug， SFTP這邊先直接用防火牆指向，特定的連接Port)

![image](https://blog.markkulab.net/content/markku/posts/docker-web-ui-ftp-server-sftpgo/images/1.png)

## 首先，建立及啟動 FTP Docker 容器
```
docker run -d --name sftpgo --restart always -p 8080:8080 -p 2022:2022 -p 8090:8090 -e TZ=America/Los_Angeles -e SFTPGO_HTTPD__BINDINGS__0__PORT=8080  -e SFTPGO_WEBDAVD__BINDINGS__0__PORT=8090 -v E:\ftp\:/srv/sftpgo drakkan/sftpgo
```
### sftpgo 預設目錄
* SFTP/FTP/WebDAV預設目錄: /srv/sftpgo  
* 用戶預設目錄: /srv/sftpgo/data/{UserName}
* 主機金鑰目錄: /var/lib/sftpgo 

### SFTPGo TCP 埠：
* 2022 用於 SFTP 服務。  
* 8080 用於 Web 管理員用戶界面。  
* 8090 用於 Webdav

## 接著，訪問Web 管理員用戶界面，建立後台管理帳號 - [連結](http://localhost:8080/web/admin/setup)

![image](https://blog.markkulab.net/content/markku/posts/docker-web-ui-ftp-server-sftpgo/images/2.png)

## 再登入後點擊菜單中的 Users > 點擊新增按鈕 + > 建立 ftp 帳號 - [連結](http://localhost:8080/web/admin/login)
![image](https://blog.markkulab.net/content/markku/posts/docker-web-ui-ftp-server-sftpgo/images/3.png)
P.S.Home Dir預設目錄/srv/sftpgo/data/{你的帳號名}，因為想每個帳號預設的目錄都是 /srv/sftpgo/cdn 

## 如果測試建立的帳號可以訪問 web client(/web/client/login) - [連結](http://localhost:8080/web/client/login)

## 使用 FileZilla Client 做測試
### 1.[下載及安裝FileZilla Client](https://filezilla-project.org/)
### 2.檔案 > 站台管理員 > 新增站台 > 協定選擇 『SFTP - SSH Transfer Protocol』
![image](https://blog.markkulab.net/content/markku/posts/docker-web-ui-ftp-server-sftpgo/images/4.png)

## Windows 掛載 WebDEV 資料夾
### 1.設置完整的註冊檔路徑，用管理權限Powershell 執行以下指令
```
// 設定
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WebClient\Parameters" -Name "BasicAuthLevel" -Value 2

// 檢查 BasicAuthLevel
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\WebClient\Parameters" -Name "BasicAuthLevel"

// 重新啟動 webclient
net stop webclient
net start webclient
```

### 2.開啟本機 > 點擊 ... > 新增一個網路位置
![image](https://blog.markkulab.net/content/markku/posts/docker-web-ui-ftp-server-sftpgo/images/5.png)
### 3. 輸入 WebDev 的主機及IP 及帳密
![image](https://blog.markkulab.net/content/markku/posts/docker-web-ui-ftp-server-sftpgo/images/6.png)

### 4.下一步
![image](https://blog.markkulab.net/content/markku/posts/docker-web-ui-ftp-server-sftpgo/images/7.png)

### 5.新增完成
![image](https://blog.markkulab.net/content/markku/posts/docker-web-ui-ftp-server-sftpgo/images/8.png)

## 最後
在當今這個充滿創新的時代，開源軟件層出不窮，不僅功能豐富，使用起來也非常便捷。對於具備一定程式設計知識的人來說，這些開源資源提供了無限的可能性，可以根據自己的需要進行調整和改進，本文旨在提供一份全面的指南，指引讀者如何利用 Cloudflare Tunnel 和 Docker 快速搭建一個配備 Web UI 的 FTP Server - sftpgo。希望這篇文章+能對尋求此類解決方案的你有所幫助，使你能夠更輕鬆地掌握和運用這些強大的開源工具。

## 參考資料
[參考資料](https://blog.csdn.net/networken/article/details/133963932)

---

## 關於本文與作者

本文出自 [Mark Ku's Blog](https://blog.markkulab.net/post/docker-web-ui-ftp-server-sftpgo)

授權條款： [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) — 轉載或引用請註明作者並附上原文連結

### 關於作者

**[Mark Ku](https://blog.markkulab.net/author/mark-ku)** — Software Solution Provider

- 10+ 年資深軟體工程師，現為 AI 應用 Builder
- 專注大型平台架構設計，從北美電商到AI SaaS訂閱收費系統
- 結合 AI Agent 與自動化，打造高效可演進的產品技術基礎

### 作者開發的免費工具

以下工具皆可免費使用：

- [免費 PDF 簽名工具](https://blog.markkulab.net/tools/pdf-sign): 線上 PDF 簽名工具，瀏覽器內完成手繪、打字、上傳簽名，可拖曳放置、縮放、下載。所有處理都在你的裝置完成，檔案不會上傳。
- [VS Code Refactory](https://blog.markkulab.net/tools/refactory): Refactory 是一款 VS Code 重構擴充套件：34 個重構動作、37 條 code smell 檢查、Code Health 儀表板、18 種語言、534 支測試。懂你的專案慣例：介面放哪、DI 註冊寫在哪、'use client' 該不該加；還會用 git 修改頻率 × 複雜度排出「該先修哪個檔案」，並一鍵把壞味道交給你自己電腦上的 Claude Code 修。免費使用，原始碼不離開你的機器。
- [DB-Kit 資料庫管理工具](https://blog.markkulab.net/tools/db-kit): DB-Kit 是一個用 Tauri + Rust + React 打造的輕量跨平台資料庫管理工具，用單一一致的介面同時管理 MySQL、MariaDB、PostgreSQL、SQL Server、Oracle、SQLite、MongoDB、Redis、Kafka、Elasticsearch 與 RabbitMQ 十一種資料來源：連線密碼以 OS keychain 加密、SSH Tunnel、完整 CRUD、視覺化查詢建構器、多結果集同時顯示、跨連線資料傳輸與比對同步、Excel / CSV 匯入匯出、執行計畫視覺化、ER 圖、排程備份、SQL 壓力測試（p50～p99 延遲百分位）、15 條規則的 SQL 審查、Kafka 訊息瀏覽與監控告警；繁中 / 英文雙語介面，內建 AI 助手（自然語言生成 SQL、AI 審查與調校建議）與命令列工具 dbk。免費開源（MIT），提供 Windows / macOS / Linux 安裝檔。
- [VS Code Super Mermaid](https://blog.markkulab.net/tools/super-mermaid): Super Mermaid 是一款 VS Code 擴充套件：開箱即用的漂亮 Mermaid 圖表，自動上色、即時預覽、滑鼠平移縮放、PNG / SVG 高解析匯出，內建 21 種範本與多種主題。免費開源（MIT）。
- [React Super Mermaid](https://blog.markkulab.net/tools/react-super-mermaid): react-super-mermaid 是一個開源 React 元件庫：一行 <MermaidViewer> 即可渲染漂亮的 Mermaid 圖表，內建 colorful / sketch 主題、平移縮放、圖內搜尋、SVG / PNG 高解析匯出。輕量、SSR 安全、完整 TypeScript 型別。免費開源（MIT）。
- [Jira / Confluence Super Mermaid](https://blog.markkulab.net/tools/jira-super-mermaid): Atlassian Forge app：在 Jira issue 與 Confluence 內文直接寫 Mermaid 語法，畫流程圖、時序圖、狀態機與甘特圖。11 種圖表、SVG / PNG 匯出、明暗主題、完整中日韓文字支援。取得 Runs on Atlassian 資格：圖表存在你自己的站台，app 不呼叫任何第三方服務。免費，即將上架 Atlassian Marketplace。
- [Mermaid 線上預覽](https://blog.markkulab.net/tools/mermaid-preview): 在瀏覽器裡寫 Mermaid、即時看圖，整張圖表壓進網址就能分享。免註冊、不上傳伺服器，相容 mermaid.live 的分享連結。
- [React Intl Phone Number](https://blog.markkulab.net/tools/react-intl-phone-number): react-intl-phone-number 是一個開源 React 元件：framework-agnostic、不依賴 antd，提供 E.164 進出、可搜尋國旗 / 國碼下拉、可配置驗證等級（strict / mobile-strict / loose）、可主題化 CSS 與 i18n，電話邏輯由 google-libphonenumber 驅動。輕量、完整 TypeScript 型別。免費開源（MIT）。
- [Uptime Kuma Cluster](https://blog.markkulab.net/tools/uptime-kuma-cluster): 把單機版 Uptime Kuma 改造成高可用叢集：OpenResty + Lua 智慧負載平衡、MariaDB 共享狀態、健康檢查與自動 Failover，附叢集管理 REST API，一行 Docker Compose 啟動。免費開源（MIT）。
- [特教專案](https://blog.markkulab.net/education): 為特殊教育學生製作的學習教材

### 每日 Podcast

- [科技新鮮事](https://blog.markkulab.net/category/tech-news): 每日精選 AI 與科技趨勢，透過語音摘要快速掌握最新技術動態，涵蓋 AI 應用、軟體架構、DevOps 與工程實戰。 — RSS: https://blog.markkulab.net/feed.xml
- [AI股市蝦聊](https://blog.markkulab.net/category/ai-stock-chat): 每個交易日用 AI 分析台股盤勢，以雙人對話聊當天的盤中觀察與隔日預測。 — RSS: https://blog.markkulab.net/ai-stock-chat/feed.xml

### 電子報

[訂閱電子報](https://blog.markkulab.net/subscribe) — 第一時間收到新文章通知，無垃圾信、隨時可取消訂閱。
