在Windows使用WSL2建立原生Docker環境架設Miniflux

在Windows 10使用Docker Desktop和Rancher Desktop架設Miniflux,體驗都不是很好──Docker Desktop常當掉;Rancher Desktop有時莫名掛掉,所以決定用WSL2建立原生Docker環境架設Miniflux。目前使用後覺得網頁讀取反應快很多,之前用Rancher Desktop架設的Miniflux有時卡卡的,偶爾遇到某些文章點下一頁會卡住,關掉網頁重開才會好。

注意

本文由 Gemini 3 Pro 語言模型產生。

這份筆記記錄了如何從零開始,在 Windows 10/11 上使用 WSL 2(Ubuntu)建立原生 Docker 環境,部署 Miniflux RSS 閱讀器,並設定自動備份資料庫至 Windows 硬碟,最後配置 Windows Terminal 達成開機常駐。

階段一:安裝 WSL 2 與 Ubuntu

1. 更新 WSL 元件

以系統管理員身分開啟 Windows PowerShell,執行:

wsl --update

2. 安裝 Ubuntu

如果尚未安裝,請執行:

wsl --install -d Ubuntu

或是指定版號安裝(建議使用長期支援版本):

wsl --install -d Ubuntu-24.04
  • 安裝完成後會自動跳出視窗。
  • 依照指示設定 Linux 的 Username(使用者名稱)與 Password(密碼)。

3. 清空舊環境(選用)

如果你之前安裝過 Rancher Desktop、Docker Desktop 或舊版 Ubuntu,想要一個乾淨的開始,請先在 Windows 解除安裝 Docker 桌面程式,然後輸入 wsl --list 列出所有子系統,將它們刪除:

wsl --unregister rancher-desktop-data
wsl --unregister rancher-desktop
wsl --unregister Ubuntu-24.04

執行完畢後,再輸入一次 wsl --list,確認顯示「沒有安裝任何發佈版本」或列表為空。確認清空後,再執行上述安裝指令。

階段二:啟用 Systemd(關鍵)

為了讓 Docker 能像在 Linux 伺服器上一樣自動啟動,必須開啟 Systemd 支援。

  1. 進入 Ubuntu 終端機。

  2. 編輯設定檔:

    sudo nano /etc/wsl.conf
    
  3. 貼上以下內容:

    [boot]
    systemd=true
    
  4. 存檔離開(Ctrl+O → Enter → Ctrl+X)。

  5. 重啟 WSL(請回到 Windows PowerShell 執行):

    wsl --shutdown
    

    (等待約 10 秒後再次開啟 Ubuntu 終端機)

階段三:安裝 Docker Engine(官方版)

建議不要使用 apt install docker.io,請使用 Docker 官方倉庫安裝最新版以獲得最佳相容性。

1. 安裝前置工具與金鑰

# 更新系統
sudo apt update
sudo apt install ca-certificates curl gnupg

# 下載 Docker GPG 金鑰
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 加入 Docker 倉庫
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

2. 安裝 Docker Engine

sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

3. 設定免 Sudo 執行(加入群組)

sudo usermod -aG docker $USER
  • 注意:執行完後建議關閉視窗,再次執行 wsl --shutdown 重啟,權限才會生效。

4. 啟動 Docker 並設定開機自啟

因為我們在階段二啟用了 systemd,現在可以用標準 Linux 方式管理服務。

  1. 啟動 Docker:

    sudo systemctl start docker
    
  2. 設定開機自動啟動(指 WSL 啟動時):

    sudo systemctl enable docker
    
  3. 測試是否成功:

    docker run --rm hello-world
    

    如果看到 Hello from Docker! 的訊息,恭喜你!安裝成功了。

階段四:部署 Miniflux

1. 建立專案目錄

mkdir ~/miniflux
cd ~/miniflux

2. 建立 docker-compose.yml

nano docker-compose.yml

(請在此貼上你的 Miniflux 配置內容,以下為範例結構)
或是參考我之前使用Docker部署Miniflux RSS Reader的配置內容。

services:
  miniflux:
    image: miniflux/miniflux:latest
    container_name: miniflux
    ports:
      - "8888:8080"
    depends_on:
      - db
    environment:
      - DATABASE_URL=postgres://miniflux:secret@db/miniflux?sslmode=disable
      - RUN_MIGRATIONS=1

  db:
    image: postgres:16
    container_name: postgresql  # <--- 注意這個名稱,備份腳本會用到
    environment:
      - POSTGRES_USER=miniflux
      - POSTGRES_PASSWORD=secret
      - POSTGRES_DB=miniflux
    volumes:
      - miniflux-db:/var/lib/postgresql/data

volumes:
  miniflux-db:

檔案總管的 WSL 路徑(方便編輯)

你可以直接用 Windows 檔案總管管理 Linux 檔案:

  1. 在檔案總管網址列輸入:
    • 舊版路徑格式:\\wsl$
    • 新版路徑格式:\\wsl.localhost
  2. 如果看得到 Ubuntu 資料夾,建議按右鍵 →「釘選到快速存取」。

⚠️ 重要警告:換行符號(Line Endings)

Windows(CRLF)和 Linux(LF)的換行編碼不同。若設定檔格式錯誤,Docker 會無法讀取。

建議使用 Visual Studio Code 編輯:

  1. 在 Ubuntu 終端機進入資料夾,輸入 code .
  2. 打開檔案後,檢查視窗右下角的狀態列。
    • 如果顯示 LF:正確,直接存檔。
    • 如果顯示 CRLF:點擊它 → 選擇 LF → 再存檔。

3. 設定 Cloudflare Tunnel(選用)

如果你的架構包含 Cloudflared,且 Miniflux 與 Tunnel 在同一個 Docker 網路內:

  1. 進入 Cloudflare Zero Trust DashboardTunnelsConfigurePublic Hostname
  2. Service 區塊設定:
    • Type:HTTP
    • URL:miniflux:8080(注意:這裡是填容器名稱與內部 Port)

4. 啟動服務

docker compose up -d

階段五:設定自動備份(WSL 直寫 Windows)

此腳本會將資料庫備份直接寫入 Windows 的 D 槽(或 C 槽),不佔用 WSL 空間。

1. 準備工作

  • 確認 Windows 目標資料夾已建立,例如:C:\Docker\Miniflux\db
  • 對應 WSL 路徑為:/mnt/c/Docker/Miniflux/db

2. 建立備份腳本

在 Ubuntu 家目錄建立腳本:

nano ~/backup_miniflux.sh

腳本內容:

#!/bin/bash

# --- 設定區 ---
# 請確認 CONTAINER_NAME 與 docker-compose.yml 裡的 container_name 一致
CONTAINER_NAME="postgresql"
DB_USER="miniflux"               # 對應 yaml 的 POSTGRES_USER
DB_NAME="miniflux"               # 對應 yaml 的 POSTGRES_DB
DB_PASS="secretpassword"         # 對應 yaml 的 POSTGRES_PASSWORD
BACKUP_DIR="/mnt/c/Docker/Miniflux/db"  # Windows 存放路徑
DATE=$(date +%Y-%m-%d_%H-%M-%S)
FILENAME="${BACKUP_DIR}/miniflux_${DATE}.dump"
# -------------

mkdir -p "$BACKUP_DIR"

echo "正在備份..."
# 使用 pipe 直接寫入,不產生中間檔
docker exec -i -e PGPASSWORD="$DB_PASS" "$CONTAINER_NAME" \
    pg_dump -U "$DB_USER" -d "$DB_NAME" -Fc > "$FILENAME"

if [ $? -eq 0 ]; then
    echo "備份成功:$FILENAME"
    # 保留最近 7 份備份,刪除舊的
    cd "$BACKUP_DIR"
    ls -t *.dump | awk 'NR>7' | xargs -r rm -f
else
    echo "備份失敗!"
    exit 1
fi

3. 給予執行權限

chmod +x ~/backup_miniflux.sh

4. 還原資料庫(災害復原)

若需要還原,不需進入容器,使用「管線」指令即可。
假設備份檔在 /mnt/c/Docker/Miniflux/db/backup.dump

# 注意:postgresql 是你的資料庫容器名稱
cat "/mnt/c/Docker/Miniflux/db/backup.dump" | docker exec -i postgresql pg_restore -U miniflux -d miniflux --clean --if-exists
  • --clean --if-exists:這兩個參數會自動先刪除舊資料表再還原,省去手動清空的麻煩。

5. 設定 Windows 排程(Task Scheduler)

為了確保每天自動執行,我們使用 Windows 工作排程器呼叫 WSL。這裡設定背景模式,不會跳出視窗。

  1. 開啟 工作排程器建立基本工作

  2. 一般

    • 改選 不論使用者登入與否均執行
    • 勾選 不儲存密碼
    • (選用)勾選 隱藏
  3. 觸發程序:每天。

  4. 動作:啟動程式。

  5. 程式/指令碼wsl.exe

  6. 引數(這是關鍵,請完整複製並修改使用者名稱):

    -d Ubuntu-24.04 -u 你的使用者名稱 -- exec bash -l -c "/home/你的使用者名稱/backup_miniflux.sh"
    

    指令解析:

    • bash -l(Login Shell):模擬使用者登入,確保 Docker 環境變數被正確載入,避免出現 0x7F 找不到指令的錯誤。
    • -c:執行完後自動結束。

    (請確認 -d 後面的發行版名稱是否正確,可用 wsl -l -v 查詢)

階段六:Windows Terminal 開機常駐與最小化

目標:開機自動啟動 Ubuntu(喚醒 Docker),並縮小到右下角系統匣。

1. 基本設定

  • 從 Microsoft Store 安裝 Windows Terminal
  • 開啟 Terminal,按 Ctrl + , 進入設定。
  • 啟動(Startup)頁籤:
  • 預設設定檔:選擇 Ubuntu
  • 預設終端機應用程式:選擇 Windows Terminal

2. 設定「縮小至系統匣」

在設定頁面的 外觀

  1. 總是顯示通知區域圖示:開啟。
  2. 最小化至通知區域:開啟。
  3. 存檔。

3. 設定開機自動啟動

建議使用 Startup 資料夾 方式,可達成完全背景啟動:

  1. 關閉 Terminal 內建的「在電腦啟動時啟動」。
  2. 按下 Win + R,輸入 shell:startup
  3. 在資料夾中建立捷徑,指向 wt.exe(通常在 AppData 路徑下,或直接建立新捷徑輸入 wt)。
  4. 右鍵點選捷徑 → 內容執行 → 改為 最小化

常見維護指令

  • 執行更新指令:

    • 選項 A(僅更新 Docker 相關套件):如果你不想更動 Ubuntu 其他系統套件,請用這行:

      sudo apt update
      sudo apt install --only-upgrade docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
      
    • 選項 B(全面更新系統與 Docker):順便做系統例行維護:

      sudo apt update && sudo apt upgrade
      
  • 手動重啟 WSL(遇到網路或 Docker 怪問題時):

    wsl --shutdown
    
  • 確認 Docker 狀態:

    docker ps