開源推薦:PicoUploader - 一個支援動態配置和 Docker 一鍵部署的 FastAPI 圖床

2025-06-29 22:03:56 Category Icon 網站開發

開源推薦:PicoUploader - 一個支援動態配置和 Docker 一鍵部署的 FastAPI 圖床

介紹一款基於 FastAPI 和 Docker 的開源個人圖床專案 PicoUploader。本文將分享如何透過一鍵部署腳本,在自己的 VPS 上快速搭建一個支援動態配置、上傳限制和自定義儲存路徑的安全、輕量級圖床服務。

前言:為什麼我需要一個「更好」的圖床?

作為一個開發者和內容創作者,我每天都在和圖片打交道。無論是寫部落格、做筆記,還是開發專案,一個穩定、快速、易用的圖床都是必不可少的。

我嘗試過很多方案:

  • 公共圖床服務:方便,但有隱私洩漏、數據丟失、或突然關停的風險。
  • 大型雲存儲 (如 S3, R2):功能強大,但配置複雜,對於個人使用來說,有點「殺雞用牛刀」的感覺,而且總擔心不小心產生高額帳單。
  • 一些開源專案:功能很棒,但往往過於龐大,依賴一堆我不需要的服務 (如資料庫、Redis),部署起來也頗費周章。

我想要的其實很簡單:

  1. 數據私有:所有圖片必須儲存在我自己的伺服器上。
  2. 部署簡單:最好一條命令就能搞定。
  3. 配置靈活:能輕鬆修改上傳限制、儲存路徑,而且最好不用重啟服務。
  4. 輕量高效:只做圖床這一件事,並且做好。

GitHub 專案連結

PicoUploader 前端介面截圖

PicoUploader 是什麼?

PicoUploader 是一個基於 FastAPI 的輕量級圖床後端服務,專為個人和小型團隊設計。它將強大功能與極致簡潔相結合,讓你在自己的 VPS 上擁有一個完全可控的圖床服務。

它有什麼特別之處?

🚀 一鍵 Docker 部署,三分鐘上線

忘掉複雜的環境設定吧!PicoUploader 採用完全容器化的設計。你只需要在你的伺服器上執行一個腳本,剩下的事情——包括建立目錄、設定權限、啟動服務——它都會自動完成。

# 克隆專案,進入後端目錄
git clone git@github.com:Arkalytix/pico-uploader.git
cd pico-uploader/src/backend

# 從範本建立你的配置檔案
cp .env.example .env

# 只需要設定你的 Token 和域名
nano .env

# 執行部署腳本,大功告成!
chmod +x deploy-production.sh
./deploy-production.sh

🔄 獨特的「動態配置重載」,無需停機

當你需要調整上傳限制時,傳統的做法是修改配置檔案,然後重啟服務。這不僅麻煩,還會造成短暫的服務中斷。

PicoUploader 內建了一個智能的監控系統,它會自動檢測 .env 配置檔案的變化。無論你修改的是:

  • MAX_FILE_SIZE_MB (單檔大小限制)
  • MAX_STORAGE_SIZE_MB (總空間限制)
  • ALLOWED_EXTENSIONS (允許的檔案類型)

它都會在 2 秒內自動生效,完全不需要你手動重啟 Docker 容器。這讓維護變得前所未有的輕鬆。

# 服務運行中...
# 你只需要修改 .env 檔案
echo 'MAX_FILE_SIZE_MB=20' >> .env

# 查看日誌,你會看到配置已自動更新!
docker logs -f picouploader-prod
# 📝 檢測到 .env 檔案變化
# 🔄 開始載入配置...
# ✅ 配置已更新

🛡️ 全方位的安全與上傳限制

一個好的圖床,安全是底線。PicoUploader 提供了多層次的安全保障:

  • Bearer Token 驗證:所有上傳操作都必須經過安全的 Token 驗證。
  • 檔案類型限制:你可以精確定義允許上傳的副檔名,從源頭杜絕潛在風險。
  • 檔案大小限制:防止惡意的大檔案攻擊,佔用你的伺服器資源。
  • 儲存空間限制:設定一個總容量上限,當儲存空間接近飽和時,服務會自動停止接收新檔案,保護你的伺服器磁碟不被撐爆。

這些限制不僅在後端強制執行,前端也會同步獲取配置進行預先驗證,提供了流暢的用戶體驗。

Bearer Token 驗證 Bearer Token 驗證

📁 靈活的儲存路徑,無縫整合你的雲端硬碟

想把圖片存到哪裡?你說了算!

  • 預設儲存在家目錄下的 pico_uploads
  • 你可以在 .env 中設定 CUSTOM_UPLOAD_DIR 為任何你想要的絕對路徑

這意味著你可以輕鬆地將圖片儲存到:

  • 掛載的外部硬碟 (/mnt/storage/images/)
  • 系統的網站目錄 (/var/www/my-site/uploads/)
  • 甚至是同步的雲端硬碟目錄,比如 OneDrive 或 Google Drive (/home/user/OneDrive/PublicImages/)!

同步的雲端硬碟目錄 同步的雲端硬碟目錄

📊 透明的監控與除錯

想知道服務運行得怎麼樣?PicoUploader 提供了清晰的 API 端點:

  • GET /config:無需驗證,即可即時查看當前的上傳限制和已使用的儲存空間。
  • GET /debug/config:需要 Token 驗證,提供更詳細的系統配置資訊。
  • 完整的日誌記錄,讓你對每一次上傳和配置變更都了然於心。

快速預覽核心功能

功能點描述
簡單部署提供 deploy-production.sh 腳本,一鍵啟動
動態配置修改 .env 即時生效,無需重啟
安全驗證強制的 Bearer Token 保護
上傳控制可自訂檔案類型、單檔大小、總空間限制
路徑自訂支援任意絕對路徑,可整合雲盤同步
容器化基於 Docker,環境隔離,易於遷移
輕量高效使用 FastAPI,佔用資源極少
前端整合提供配套的純靜態前端,部署在 Netlify 上極速訪問

誰適合使用 PicoUploader?

  • 獨立開發者:需要一個穩定、私有的圖床來支撐你的部落格或個人專案。
  • 技術愛好者:喜歡折騰,想在自己的 HomeLab 或 VPS 上搭建實用服務。
  • 小型團隊:需要一個內部共享、易於管理的圖片資源庫。
  • 隱私注重者:不希望將個人圖片託管在第三方平台。

現在就試試吧!

PicoUploader 是一個因需求而生,並在不斷打磨中成長的專案。它解決了我在圖片管理上的所有痛點,我相信它也能為你帶來同樣的便利。

專案已經在 GitHub 上完全開源,包含了詳細的 README 和部署指南。如果你覺得這個專案對你有幫助,歡迎給我一個 Star ⭐!這是我持續維護和開發新功能的最大動力。

➡️ 點擊這裡前往 PicoUploader 的 GitHub Repo

如果你有任何問題、建議或功能請求,歡迎在 GitHub Issues 中提出。讓我們一起把它變得更好!