milmilmilmil
架構

架構

milmil 系統架構同內部結構。

系統概覽

milmil 係一個單體式 Go 後端配搭 React SPA 前端,專為自託管部署而設計。

┌─────────────────────────────────────────────────┐
│                   用戶端                         │
│         瀏覽器 (PWA)  │  Telegram/Discord 機械人  │
└───────────┬─────────────────────┬───────────────┘
            │ HTTP/WS             │ Bot API
┌───────────▼─────────────────────▼───────────────┐
│                milmil-api (Go)                  │
│  ┌──────────┐ ┌──────────┐ ┌──────────────────┐│
│  │ REST API │ │WebSocket │ │ Bot Engine       ││
│  └────┬─────┘ └────┬─────┘ └───────┬──────────┘│
│       │             │               │           │
│  ┌────▼─────────────▼───────────────▼──────────┐│
│  │              服務層                          ││
│  │  媒體庫 │ 串流 │ 下載 │ 探索               ││
│  │  收藏 │ 認證 │ 通知                         ││
│  └────┬────────────────────────────────────────┘│
│       │                                         │
│  ┌────▼────────────────────────────────────────┐│
│  │           基礎設施層                         ││
│  │  PostgreSQL/SQLite │ Redis │ FFmpeg │ Rclone││
│  └─────────────────────────────────────────────┘│
└─────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────┐
│              milmil-web (React SPA)             │
│  透過 Nginx 或開發伺服器提供服務                  │
└─────────────────────────────────────────────────┘

組件概覽

組件說明
REST APIEcho 路由器提供 JSON 端點。處理認證、CRUD、串流同搜尋。
WebSocket即時事件推送,用於彈幕、通知同掃描進度。
Bot Engine跨平台機械人引擎,支援 Telegram 同 Discord 適配器。
服務層媒體庫掃描、中繼資料比對、下載管理同收藏同步嘅業務邏輯。
FFmpeg媒體探測、容器重新封裝同 HLS 轉碼。
Rclone支援 40+ 供應商嘅雲端儲存抽象層。

資料流程:媒體庫掃描

檔案發現

遍歷儲存後端(本機、SMB、rclone 等)列舉所有媒體檔案。

媒體探測

FFmpeg 探測每個檔案嘅編解碼器資訊、解析度、時長、內嵌字幕同音軌。

中繼資料比對

透過供應商管線將檔案比對到動畫條目:DandanPlay(雜湊)→ Bangumi(標題)→ AniList(標題)→ TMDB(備援)。

資料補充

從比對到嘅供應商擷取封面圖片、劇集標題、簡介同評分。

持久化

將所有中繼資料儲存到資料庫。發送掃描完成通知。

資料流程:串流

用戶端請求
    │
    ▼
┌─────────────────┐
│ 編解碼器支援?   │──係──▶ 直接播放(byte-range)
└────────┬────────┘
         │ 否
         ▼
┌─────────────────┐
│ 只需換容器?     │──係──▶ 重新封裝(MKV→MP4,唔使重新編碼)
└────────┬────────┘
         │ 否
         ▼
    HLS 轉碼(FFmpeg)

技術棧

技術說明
後端Go — Chi 路由器、sqlc、golang-migrate、anacrolix/torrent
前端React — Vite、TanStack Router、TanStack Query、Tailwind CSS
資料庫PostgreSQL/SQLite — 用 golang-migrate 管理結構描述
快取Redis — 選用,有記憶體內備援方案
媒體FFmpeg — 探測、重新封裝、HLS 轉碼
儲存Rclone — 40+ 雲端供應商後端
文件Fumadocs — 基於 Next.js 嘅多語言文件系統

儲存庫結構

go.mod
Makefile
docker-compose.yml
Makefile

本頁內容