Skip to content

遠端/Devcontainer 模式設定

學完你能做什麼

  • 在 SSH 連線的遠端伺服器上使用 Plannotator
  • 在 VS Code devcontainer 中設定並存取 Plannotator
  • 在 WSL (Windows Subsystem for Linux) 環境中使用 Plannotator
  • 設定連接埠轉發,讓本機瀏覽器存取遠端環境的 Plannotator

你現在的困境

你在遠端伺服器、devcontainer 或 WSL 環境中使用 Claude Code 或 OpenCode,當 AI 產生計畫或需要程式碼審查時,Plannotator 嘗試在遠端環境開啟瀏覽器——但那裡沒有圖形介面,或者你希望在本機瀏覽器中檢視審查介面。

什麼時候用這一招

需要使用遠端/Devcontainer 模式的典型情境:

情境說明
SSH 連線你透過 SSH 連線到遠端開發伺服器
Devcontainer你在 VS Code 中使用 devcontainer 進行開發
WSL你在 Windows 上使用 WSL 進行 Linux 開發
雲端環境你的程式碼在雲端的容器或虛擬機器中執行

核心思路

在遠端環境中使用 Plannotator 需要解決兩個問題:

  1. 連接埠固定:遠端環境無法自動選擇隨機連接埠,因為需要設定連接埠轉發
  2. 瀏覽器存取:遠端環境沒有圖形介面,需要在本機的瀏覽器中存取

Plannotator 透過偵測 PLANNOTATOR_REMOTE 環境變數自動進入「遠端模式」:

  • 使用固定連接埠(預設 19432)而非隨機連接埠
  • 跳過自動開啟瀏覽器
  • 在終端機輸出 URL,方便你手動在本機瀏覽器中存取

🎒 開始前的準備

前置需求

開始本教學前,請確保:


跟我做

第 1 步:理解遠端模式的環境變數

Plannotator 遠端模式依賴三個環境變數:

環境變數說明預設值
PLANNOTATOR_REMOTE啟用遠端模式未設定(本機模式)
PLANNOTATOR_PORT固定連接埠號隨機(本機)/ 19432(遠端)
PLANNOTATOR_BROWSER自訂瀏覽器路徑系統預設瀏覽器

為什麼

  • PLANNOTATOR_REMOTE 告訴 Plannotator 目前是遠端環境,不要嘗試開啟瀏覽器
  • PLANNOTATOR_PORT 設定固定連接埠,方便設定連接埠轉發
  • PLANNOTATOR_BROWSER(選用)指定在本機使用的瀏覽器路徑

第 2 步:在 SSH 遠端伺服器上設定

設定 SSH 連接埠轉發

編輯你的 SSH 設定檔 ~/.ssh/config

bash
Host your-server
    HostName your-server.com
    User your-username
    LocalForward 9999 localhost:9999

你應該看到

  • 新增了 LocalForward 9999 localhost:9999 這一行
  • 這會將本機 9999 連接埠的流量轉發到遠端伺服器的 9999 連接埠

在遠端伺服器上設定環境變數

連線到遠端伺服器後,在終端機中設定環境變數:

bash
export PLANNOTATOR_REMOTE=1
export PLANNOTATOR_PORT=9999

為什麼

  • PLANNOTATOR_REMOTE=1 啟用遠端模式
  • PLANNOTATOR_PORT=9999 使用固定連接埠 9999(與 SSH 設定中的連接埠號一致)

持久化設定

如果每次連線都要手動設定環境變數很麻煩,可以將這些環境變數新增到你的 shell 設定檔(~/.bashrc~/.zshrc)中:

bash
echo 'export PLANNOTATOR_REMOTE=1' >> ~/.bashrc
echo 'export PLANNOTATOR_PORT=9999' >> ~/.bashrc
source ~/.bashrc

使用 Plannotator

現在你可以在遠端伺服器上正常使用 Claude Code 或 OpenCode,當 AI 產生計畫或需要程式碼審查時:

bash
# 在遠端伺服器上,終端機會輸出類似資訊:
[Plannotator] Server running at http://localhost:9999
[Plannotator] Access from your local machine: http://localhost:9999

你應該看到

  • 終端機顯示了 Plannotator 的 URL
  • 遠端環境沒有開啟瀏覽器(正常行為)

在本機瀏覽器中存取

在本機的瀏覽器中開啟:

http://localhost:9999

你應該看到

  • Plannotator 的審查介面正常顯示
  • 你可以像在本機環境一樣進行計畫審查或程式碼審查

檢查點 ✅

  • [ ] SSH 連接埠轉發已設定
  • [ ] 環境變數已設定
  • [ ] 遠端伺服器終端機輸出 URL
  • [ ] 本機瀏覽器可以存取審查介面

第 3 步:在 VS Code Devcontainer 中設定

設定 devcontainer

編輯你的 .devcontainer/devcontainer.json 檔案:

json
{
  "name": "Your Devcontainer",
  "image": "mcr.microsoft.com/devcontainers/base:ubuntu",

  "containerEnv": {
    "PLANNOTATOR_REMOTE": "1",
    "PLANNOTATOR_PORT": "9999"
  },

  "forwardPorts": [9999]
}

為什麼

  • containerEnv 設定容器內的環境變數
  • forwardPorts 告訴 VS Code 自動轉發容器連接埠到本機

重建並啟動 devcontainer

  1. 開啟 VS Code 的命令面板(Ctrl+Shift+PCmd+Shift+P
  2. 輸入 Dev Containers: Rebuild Container 並執行
  3. 等待容器重建完成

你應該看到

  • VS Code 右下角顯示連接埠轉發狀態(通常是一個小圖示)
  • 點擊後可以看到 "Port 9999" 已轉發

使用 Plannotator

在 devcontainer 中正常使用 Claude Code 或 OpenCode,當 AI 產生計畫時:

bash
# 容器內終端機輸出:
[Plannotator] Server running at http://localhost:9999

你應該看到

  • 終端機顯示了 Plannotator 的 URL
  • 容器沒有開啟瀏覽器(正常行為)

在本機瀏覽器中存取

在本機的瀏覽器中開啟:

http://localhost:9999

你應該看到

  • Plannotator 的審查介面正常顯示

檢查點 ✅

  • [ ] devcontainer 設定已新增環境變數和連接埠轉發
  • [ ] 容器已重建
  • [ ] VS Code 顯示連接埠已轉發
  • [ ] 本機瀏覽器可以存取審查介面

第 4 步:在 WSL 環境中設定

WSL 環境的設定與 SSH 連線類似,但不需要手動設定連接埠轉發——WSL 會自動將 localhost 流量轉發到 Windows 系統。

設定環境變數

在 WSL 終端機中設定環境變數:

bash
export PLANNOTATOR_REMOTE=1
export PLANNOTATOR_PORT=9999

持久化設定

將這些環境變數新增到你的 WSL shell 設定檔(~/.bashrc~/.zshrc)中:

bash
echo 'export PLANNOTATOR_REMOTE=1' >> ~/.bashrc
echo 'export PLANNOTATOR_PORT=9999' >> ~/.bashrc
source ~/.bashrc

使用 Plannotator

在 WSL 中正常使用 Claude Code 或 OpenCode:

bash
# WSL 終端機輸出:
[Plannotator] Server running at http://localhost:9999

你應該看到

  • 終端機顯示了 Plannotator 的 URL
  • WSL 沒有開啟瀏覽器(正常行為)

在 Windows 瀏覽器中存取

在 Windows 的瀏覽器中開啟:

http://localhost:9999

你應該看到

  • Plannotator 的審查介面正常顯示

檢查點 ✅

  • [ ] 環境變數已設定
  • [ ] WSL 終端機輸出 URL
  • [ ] Windows 瀏覽器可以存取審查介面

踩坑提醒

連接埠已被佔用

如果看到類似錯誤:

Error: bind: EADDRINUSE: address already in use :::9999

解決方法

  1. 更換連接埠號:
    bash
    export PLANNOTATOR_PORT=10000  # 換一個未被佔用的連接埠
  2. 或者停止佔用 9999 連接埠的程序:
    bash
    lsof -ti:9999 | xargs kill -9

SSH 連接埠轉發不生效

如果本機瀏覽器無法存取 Plannotator:

檢查清單

  • [ ] SSH 設定檔中 LocalForward 的連接埠號與 PLANNOTATOR_PORT 一致
  • [ ] 已斷開並重新連線 SSH
  • [ ] 防火牆沒有阻止連接埠轉發

Devcontainer 連接埠轉發不生效

如果 VS Code 沒有自動轉發連接埠:

解決方法

  1. 檢查 .devcontainer/devcontainer.json 中的 forwardPorts 設定
  2. 手動轉發連接埠:
    • 開啟 VS Code 命令面板
    • 執行 Forward a Port
    • 輸入連接埠號 9999

WSL 中無法存取

如果 Windows 瀏覽器無法存取 WSL 中的 Plannotator:

解決方法

  1. 檢查環境變數是否設定正確
  2. 嘗試使用 0.0.0.0 而非 localhost(取決於 WSL 版本和網路設定)
  3. 檢查 Windows 防火牆設定

本課小結

遠端/Devcontainer 模式的核心要點:

要點說明
環境變數PLANNOTATOR_REMOTE=1 啟用遠端模式
固定連接埠使用 PLANNOTATOR_PORT 設定固定連接埠(預設 19432)
連接埠轉發SSH/Devcontainer 需要設定連接埠轉發,WSL 自動轉發
手動存取遠端模式不會自動開啟瀏覽器,需要手動在本機瀏覽器存取
持久化將環境變數新增到設定檔避免重複設定

下一課預告

下一課我們學習 環境變數設定詳解

你會學到:

  • 所有可用的 Plannotator 環境變數
  • 每個環境變數的作用和預設值
  • 如何根據不同情境組合使用環境變數

附錄:原始碼參考

點擊展開檢視原始碼位置

更新時間:2026-01-24

功能檔案路徑行號
遠端會話偵測packages/server/remote.ts16-29
伺服器連接埠取得packages/server/remote.ts34-49
伺服器啟動邏輯packages/server/index.ts91-97
瀏覽器開啟邏輯packages/server/browser.ts45-74
WSL 偵測packages/server/browser.ts11-34

關鍵常數

  • DEFAULT_REMOTE_PORT = 19432:遠端模式預設連接埠號

關鍵函式

  • isRemoteSession():偵測是否在遠端會話中執行
  • getServerPort():取得伺服器連接埠(遠端用固定連接埠,本機用隨機連接埠)
  • openBrowser(url):跨平台開啟瀏覽器