milmilmilmil
架構

架構

milmil 系統架構與內部原理。

系統概覽

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

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

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

元件概覽

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

資料流程:媒體庫掃描

檔案發現

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

媒體探測

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

中繼資料比對

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

資料補充

從比對的提供商取得封面圖片、劇集標題、簡介和評分。

持久化

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

資料流程:串流

用戶端請求
    │
    ▼
┌─────────────────┐
│ 支援該編解碼器?│──是──▶ 直接播放(位元組範圍)
└────────┬────────┘
         │ 否
         ▼
┌─────────────────┐
│ 僅需重新封裝?  │──是──▶ 重新封裝(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

本頁內容