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):跨平台打开浏览器