DViwer 是一個可自行部署的影片資料庫應用程式,後端使用 Go、前端使用 Angular。 它會掃描本機媒體資料夾,將中繼資料儲存在 SQLite,並提供瀏覽、篩選與瀏覽器串流播放功能。
- 可設定路徑的媒體庫掃描
- 支援篩選、排序、分頁與格狀/清單模式的影片瀏覽
- 影片詳情頁與瀏覽器內播放
- 觀看紀錄與續播功能
- 中繼資料擷取佇列與手動擷取/搜尋
- 基本演員/分類瀏覽與封面圖片提供
- 從資料庫批次刪除影片
- 後端: Go、Gin、SQLite
- 前端: Angular 21
- 容器: 多階段 Docker 建置(
node:22-alpine+golang:1.24-alpine) - 媒體工具: ffmpeg(於正式映像中)
backend/– API 伺服器、掃描器、擷取器、串流模組、資料庫層frontend/– Angular 前端應用data/– 本機執行時資料(DB、封面、快取)docker-compose.yml– 類正式環境的本機部署設定justfile– 常用開發與服務管理指令
本機開發需要:
使用容器化部署需要:
- Docker + Docker Compose
cd backend
air後端預設執行於 http://localhost:28100。
cd frontend
npm install
npm start前端執行於 http://localhost:4200。
- 前端:
http://localhost:4200 - API 基底:
http://localhost:28100/api
在專案根目錄執行:
just backend
just frontend
# 或同時執行前後端
just dev- 在專案根目錄建立
.env:
PORT=28100
VIDEO_PATH=D:/path/to/your/videos- 啟動服務:
just service-up- 開啟:
http://localhost:28100
資料會持久化到 Docker volume dviewer,影片目錄會以唯讀方式從 VIDEO_PATH 掛載。
停止服務:
just service-down查看日誌:
just service-logs後端/容器常用環境變數:
PORT– 後端監聽連接埠(預設28100)DVIEWER_DATA_DIR– DB/快取/封面資料目錄STATIC_DIR– 前端靜態建置目錄(正式環境提供)LIBRARY_PATH– 初始媒體庫路徑(用於預設設定值)
媒體庫路徑也可於 UI 的 Settings 頁面修改。
主要路由群組位於 /api:
/videos– 列表/詳情/更新/刪除/串流/history– 觀看紀錄 CRUD/library– 掃描狀態與擷取佇列/scrape– 觸發擷取與搜尋/settings– 應用設定(包含媒體庫路徑)/actors,/categories,/covers
- 後端在正式環境會提供 Angular 靜態檔,並在 SPA 路由時回退至
index.html。 - 開發模式下前後端分開執行。
- 本機執行時檔案會建立在
backend/data(或DVIEWER_DATA_DIR指定路徑)。