找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4110

积分

0

好友

563

主题
发表于 4 小时前 | 查看: 3| 回复: 0

简介

Code Server 是什么?

Code Server 是 coder.com 开发的运行在远程服务器上的 VS Code。它将完整的 VS Code 体验搬到浏览器中,让你可以在任何设备上使用熟悉的 IDE,而无需在本地安装任何东西。

  • 浏览器即开发环境Chromebook、平板、手机都能写代码
  • 统一开发环境:团队成员无论用什么设备,都能获得一致的 VS Code 体验
  • 服务器算力:编译、测试、下载等重活交给服务器,笔记本更省电

HAPI 是什么?

HAPI(GitHub: tiann/hapi)是一个让 AI 编程助手能够远程控制和协作的工具。它支持 Claude CodeCodexGeminiOpenCode 等主流 AI CLI,让你:

  • 无缝切换:本地干一半,出门用手机继续
  • AFK 审批:离开电脑?用手机一键审批 AI 的代码修改请求
  • 终端随身带:通过 Web 界面或手机控制 AI 编程任务
  • E2E 加密WireGuard + TLS 加密,数据安全有保障

HAPIHappy 最大的区别,Happy 使用一个集中服务器来存储你的加密数据。HAPI 是去中心化的——每个用户运行自己的集线器,中继服务器只转发加密流量,不存储任何内容。

为什么选择 HAPI + Code Server?

相信很多开发者会遇到这些痛点:出门在外想改代码,身边只有手机;本地电脑配置不够,跑 AI CLI 时风扇狂转;甚至想躺着就能审核 AI 生成的代码。

HAPI + Code Server 的组合恰好能解决这些问题:

  • Code ServerVS Code 搬到浏览器里——无论你用 iPad、手机还是借别人的电脑,浏览器一开就能写代码。
  • HAPIAI CLI 也能远程控制——人在外面也能用手机操作,让部署在服务器上的 AI 帮你写代码。
  • 数据完全本地化——所有代码和项目数据都存储在你自己的设备上(如 NAS),隐私安全有保障。

这就是你的私有 AI 编程工作站:白天出门用手机指挥 AI 干活,晚上回家在平板上审核代码,全部围绕的是你自己的服务器,而不是依赖某个云厂商。对于注重数据隐私和希望构建个性化工作流的开发者而言,这无疑是一个极具吸引力的解决方案。

主要特点

  • 浏览器即开发环境Code ServerVS Code 在浏览器中运行,无需本地安装
  • AI 随时可用:集成 6 款主流 AI CLIClaude CodeCodexGeminiOpenCodeiFlowQwen Code
  • 远程控制:通过 HAPIWeb 界面或手机端远程控制 AI 编程任务
  • 数据本地化:所有代码和数据存储在本地服务器上,隐私有保障

应用场景

  • 在任何设备(电脑、平板、手机)上通过浏览器进行开发
  • 外出时通过手机远程控制 AI 完成编程任务
  • 利用服务器的大容量存储管理多个项目
  • 企业内网部署,保护代码安全

安装

在服务器上以 Docker 方式安装。本次部署将 code-serverHAPI 结合,配置会有所不同。

准备工作

在服务器的 docker 文件夹中创建以下目录结构:

# 新建文件夹和子目录
mkdir -p /volume1/docker/code-server/{config,projects}

文件夹 装载路径 说明
/volume1/docker/code-server/config /config 配置目录
/volume1/docker/code-server/projects /config/workspace 项目代码目录

端口

本地端口 容器端口 说明
3196 8443 Code Server Web UI
3197 3197 HAPI 服务端口

环境变量

可变 说明
PUID 1000 用户 UID
PGID 1000 用户 GID
TZ Asia/Shanghai 时区
PASSWORD admin123 Web 登录密码
SUDO_PASSWORD admin123 终端 sudo 密码
CODE_SERVER_PORT 3196 Code Server 端口映射
DEFAULT_WORKSPACE /config/workspace 默认工作目录
CLI_API_TOKEN admin123 HAPI API 令牌,建议使用强密码
HAPI_LISTEN_HOST 0.0.0.0 HAPI 监听地址
HAPI_LISTEN_PORT 3197 HAPI 监听端口
HAPI_PUBLIC_URL http://192.168.0.197:3197 网页分享链接
HAPI_API_URL http://192.168.0.197:3197 Runner 连接地址

⚠️ 请将 HAPI_PUBLIC_URLHAPI_API_URL 中的 IP 地址替换为你的服务器实际 IP 地址

docker run 方式

如果你熟悉命令行,使用 docker cli 更快捷:

# 进入目录
cd /volume1/docker/code-server

# 运行容器
docker run -d \
  --name ai-dev-vscode \
  --restart unless-stopped \
  -p 3196:8443 \
  -p 3197:3197 \
  -v $(pwd)/config:/config \
  -v $(pwd)/projects:/config/workspace \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Shanghai \
  -e PASSWORD=admin123 \
  -e SUDO_PASSWORD=admin123 \
  -e CODE_SERVER_PORT=3196 \
  -e DEFAULT_WORKSPACE=/config/workspace \
  -e CLI_API_TOKEN=admin123 \
  -e HAPI_LISTEN_HOST=0.0.0.0 \
  -e HAPI_LISTEN_PORT=3197 \
  -e HAPI_PUBLIC_URL=http://192.168.0.197:3197 \
  -e HAPI_API_URL=http://192.168.0.197:3197 \
  linuxserver/code-server:latest

docker-compose 方式(推荐)

将以下内容保存为 docker-compose.yml 文件:

version: '3.8'
services:
  code-server:
    image: linuxserver/code-server:latest
    container_name: ai-dev-vscode
    restart: unless-stopped
    shm_size: 512mb
    ports:
      - 3196:8443
      - 3197:3197
    volumes:
      - ./config:/config
      - ./projects:/config/workspace
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Asia/Shanghai
      - PASSWORD=admin123
      - SUDO_PASSWORD=admin123
      - CODE_SERVER_PORT=3196
      - DEFAULT_WORKSPACE=/config/workspace
      - CLI_API_TOKEN=admin123
      - HAPI_LISTEN_HOST=0.0.0.0
      - HAPI_LISTEN_PORT=3197
      - HAPI_PUBLIC_URL=http://192.168.0.197:3197
      - HAPI_API_URL=http://192.168.0.197:3197

然后执行一键启动:

# 进入目录
cd /volume1/docker/code-server

# 一键启动
docker-compose up -d

File Station 中的 docker-compose.yml 配置文件

安装 AI 编程环境

首次运行容器后,需要在容器内执行初始化脚本安装 AI CLIHAPI

采用脚本方式而非重写 Dockerfile 是为了保持灵活性,这样可以使用标准的 code-server 镜像,并能根据需要单独升级某个 AI CLI

setup-code.sh

将下面的内容保存为安装脚本 setup-code.sh,放入到 config 目录中。

config目录下的脚本与配置文件

#!/usr/bin/env bash
set -euo pipefail

echo "🚀 [AI Dev Setup] 安装 Node.js + 6 个 AI CLI + HAPI (code-server 专用)..."

if [ "$(id -u)" -ne 0 ]; then
  echo "❌ 请用 root 运行:docker exec -u root ai-dev-vscode /config/setup-code.sh"
  exit 1
fi

have_cmd() {
  command -v "$1" >/dev/null 2>&1
}

have_global_npm_pkg() {
  local pkg="$1"
  npm list -g "$pkg" --depth=0 >/dev/null 2>&1
}

echo "🔧 安装基础系统工具..."
apt-get update -y
apt-get install -y \
  git curl vim tmux htop jq wget unzip \
  build-essential ca-certificates \
  python3 python3-pip

echo "🧹 清理系统中可能冲突的 nodejs/npm..."
apt-get purge -y nodejs npm || true
rm -rf /usr/bin/node /usr/bin/npm /usr/local/bin/node* /usr/local/bin/npm* || true

echo "🟦 用 NodeSource 安装 Node.js 22.x..."
curl -fsSL https://deb.nodesource.com/setup_22.x | bash -
apt-get install -y nodejs

if ! have_cmd node; then
  echo "❌ node 安装失败"
  exit 1
fi
if ! have_cmd npm; then
  echo "❌ npm 安装失败"
  exit 1
fi

# npm cache 放在 /config/.npm,后面统一 chown 给 abc
mkdir -p /config/.npm
npm config set cache /config/.npm

echo "✅ Node: $(node -v)"
echo "✅ npm:  $(npm -v)"

if have_cmd npx; then
  echo "✅ npx: $(npx -v)"
else
  echo "⚠️ 警告:npx 不在 PATH,后续使用 npx 相关命令可能失败。"
fi

echo "🛠 配置 npm 全局目录为 /usr/local..."
mkdir -p /usr/local/lib/node_modules /usr/local/bin
npm config set prefix /usr/local
npm config set audit false
npm config set fund false

echo "💾 安装 AI CLI(检测已安装则跳过)..."

# 1. Claude Code (@anthropic-ai/claude-code)
if have_cmd claude || have_global_npm_pkg "@anthropic-ai/claude-code"; then
  echo "   → Claude Code 已安装,跳过 (@anthropic-ai/claude-code)"
else
  echo "   → 安装 Claude Code (@anthropic-ai/claude-code)"
  if ! npm install -g @anthropic-ai/claude-code@latest; then
    echo "⚠️ Claude Code 安装失败,请稍后重试。"
  fi
fi

# 2. Gemini CLI (@google/gemini-cli)
if have_cmd gemini || have_global_npm_pkg "@google/gemini-cli"; then
  echo "   → Gemini CLI 已安装,跳过 (@google/gemini-cli)"
else
  echo "   → 安装 Gemini CLI (@google/gemini-cli)"
  if ! npm install -g @google/gemini-cli@latest; then
    echo "⚠️ Gemini CLI 安装失败,请检查网络或包名。"
  fi
fi

# 3. OpenAI Codex (@openai/codex)
if have_cmd codex || have_global_npm_pkg "@openai/codex"; then
  echo "   → OpenAI Codex 已安装,跳过 (@openai/codex)"
else
  echo "   → 安装 OpenAI Codex (@openai/codex)"
  if ! npm install -g @openai/codex@latest; then
    echo "⚠️ Codex 安装失败,请检查网络或包名。"
  fi
fi

# 4. OpenCode (opencode-ai) - 修正包名为 opencode-ai(无 @)
if have_cmd opencode || have_global_npm_pkg "opencode-ai"; then
  echo "   → OpenCode 已安装,跳过 (opencode-ai)"
else
  echo "   → 安装 OpenCode CLI (opencode-ai)"
  if npm install -g opencode-ai@latest; then
    echo "   → OpenCode npm 安装成功"
  else
    echo "   → npm 安装失败,尝试官方一键脚本..."
    curl -fsSL https://opencode.ai/install | bash || echo "⚠️ OpenCode 一键安装也失败,请手动检查网络/权限"
  fi
fi

# 5. iFlow CLI (@iflow-ai/iflow-cli)
if have_cmd iflow || have_global_npm_pkg "@iflow-ai/iflow-cli"; then
  echo "   → iFlow CLI 已安装,跳过 (@iflow-ai/iflow-cli)"
else
  echo "   → 安装 iFlow CLI (@iflow-ai/iflow-cli)"
  if ! npm install -g @iflow-ai/iflow-cli@latest; then
    echo "⚠️ iFlow 安装失败,请检查网络或包名。"
  fi
fi

# 6. Qwen Code (@qwen-code/qwen-code)
if have_cmd qwen-code || have_global_npm_pkg "@qwen-code/qwen-code"; then
  echo "   → Qwen Code 已安装,跳过 (@qwen-code/qwen-code)"
else
  echo "   → 安装 Qwen Code (@qwen-code/qwen-code)"
  if ! npm install -g @qwen-code/qwen-code@latest; then
    echo "⚠️ Qwen Code 安装失败,请检查网络或包名。"
  fi
fi

echo "💾 安装 HAPI(全局)..."
# 7. HAPI (@twsxtd/hapi) - 你已经验证这条命令可用
if have_cmd hapi || have_global_npm_pkg "@twsxtd/hapi"; then
  echo "   → HAPI 已安装,跳过 (@twsxtd/hapi)"
else
  echo "   → 安装 HAPI (@twsxtd/hapi)"
  if ! npm install -g @twsxtd/hapi@latest; then
    echo "⚠️ HAPI 安装失败,请检查网络或包名。"
  fi
fi

echo "📁 创建工作目录..."
mkdir -p /config/workspace/{go,node,python,rust,web}

echo "🧩 写入 /config/ai-init.sh..."

cat > /config/ai-init.sh << 'EOL'
#!/bin/bash
echo "🔧 AI Dev 环境加载..."

# AI CLI 别名
alias claude='claude'
alias gemini='gemini'
alias codex='codex'
alias opencode='opencode'
alias iflow='iflow'
alias qwen='qwen'

alias ll='ls -lah'
alias ws='cd /config/workspace && ls -la'

# HAPI 快捷命令(使用全局 hapi)
alias hapi-server='hapi hub --relay'
# 如果你更喜欢 server 模式,可以改成:
# alias hapi-server='hapi server --relay'
alias hapi='hapi'

# AI 状态检查
ai-status() {
  echo "📁 当前目录: $(pwd)"
  echo "🔧 AI CLI:"
  command -v claude >/dev/null && echo "  ✅ claude" || echo "  ❌ claude"
  command -v gemini >/dev/null && echo "  ✅ gemini" || echo "  ❌ gemini"
  command -v codex >/dev/null && echo "  ✅ codex" || echo "  ❌ codex"
  command -v opencode >/dev/null && echo "  ✅ opencode" || echo "  ❌ opencode"
  command -v iflow >/dev/null && echo "  ✅ iflow" || echo "  ❌ iflow"
  command -v qwen >/dev/null && echo "  ✅ qwen" || echo "  ❌ qwen"
  command -v hapi >/dev/null && echo "  ✅ hapi" || echo "  ❌ hapi"
}

echo "✅ 运行 ai-status 测试!"
EOL

chmod +x /config/ai-init.sh

# ⚠️ 这里假设 abc 的 uid/gid 是 1000:1000,如不同请替换
chown -R 1000:1000 \
  /config/workspace \
  /usr/local/bin \
  /usr/local/lib/node_modules \
  /config/.npm

echo "✅ 安装完成!访问 http://192.168.0.197:3196"
echo "📋 密码: admin123"
echo "📋 终端: source /config/ai-init.sh && ai-status"
echo "📋 如需 HAPI: hapi server  # 或直接 hapi"

⚠️  setup-code.sh 可以根据需要进行调整,用不上的 AI CLI 可以删除

容器首次启动后,执行一次安装脚本 setup-code.sh 即可完成环境初始化。

# 进入容器(以 root 身份)运行安装脚本
docker exec -u root ai-dev-vscode /config/setup-code.sh

在容器内执行安装脚本的过程

脚本执行完成后,会输出安装成功的信息,此时你的私有 AI 编程 环境就准备就绪了。

脚本执行完成后的成功提示

运行

访问 Code Server

在浏览器中输入 http://服务器IP:3196

  • 密码:admin123

code-server 的 Web 登录界面

首次打开需要信任 workspace 目录,以获得完整功能。

VS Code Web 的安全信任提示对话框

你可以在扩展市场中搜索并安装中文语言包,让界面显示为简体中文。

VS Code 扩展市场中安装中文语言包

访问 HAPI

HAPI 提供 Web 界面和远程控制功能。为了清晰演示其工作流程,我们通过在 code-server 中开启多个终端来模拟。

终端1:启动 HAPI Hub 服务

运行下面的命令,启动中心化的 HAPI Hub 服务。这为后续的远程连接和控制提供了基础。

# 启动 hapi hub 服务
hapi server

终端中启动 HAPI hub 服务并监听端口

终端2:启动 AI 代理会话

opencode 为例,执行下面的命令来启动一个 AI 代理会话。这个会话将会注册到上一步启动的 Hub 中。

# 启动 AI 代理会话
hapi opencode

通过 HAPI 启动 OpenCode AI 代理会话

同样的方式也适用于 claudegeminicodex 等其他集成的 AI CLI。hapi --help 命令可以查看所有支持的启动模式。

HAPI 命令行帮助,显示支持的多种 AI 模式

终端3:启动 HAPI Runner 服务

执行下面的命令运行 hapi runner 服务。它的作用是注册当前“机器”(即这个容器环境)到 Hub,使得网页端能够发现并远程启动或接入已有的 AI 会话。

# 启动 hapi runner 服务
hapi runner start

启动 HAPI runner 服务以注册当前环境

网页端访问

在浏览器中输入 http://服务器IP:3197

  • 密码:admin123 (即环境变量中设置的 CLI_API_TOKEN

HAPI 的 Web 登录界面

登录后,你会在主界面看到当前活跃的会话。例如,之前启动的 opencode 会话会显示在这里。

HAPI Web 界面显示活跃的 OpenCode 会话

点击会话即可进入聊天界面,你可以在这里直接与远程的 AI 助手对话,下达编程指令。

HAPI Web 界面中的 OpenCode 对话界面

此时,在 code-server 的终端里,你会看到两边是同步的,AI 在终端中执行任务,其输出和状态也会实时反馈到 Web 界面。

code-server 终端与 HAPI Web 界面同步显示 AI 任务

在 HAPI 的设置中,你还可以将默认语言更改为中文,以获得更好的本地化体验。

HAPI 设置界面,可切换语言为中文

移动端访问

移动端的访问方式与网页端完全一致。在手机浏览器中输入相同的地址 http://服务器IP:3197,使用相同的密码登录。

手机端 HAPI 登录界面

登录后,你同样可以查看所有活跃的 AI 会话,并进行远程交互,真正实现“随时随地”的 vibe coding。

手机端 HAPI 对话界面

小结

这套方案为注重隐私和掌控感的开发者打造了一个本地优先的 AI 代理平台。它成功地将强大的云端 VS Code 体验和多种 AI 编程助手整合到你自己掌控的 Docker容器 中。

从安全角度出发,不建议将服务直接暴露到公网。对于远程访问需求,更安全的做法是使用 tailscalezerotier 等工具组建虚拟内网,或者通过反向代理配置严格的访问控制。

现在,你已经拥有了一台可以随时随地进行 Vibe Coding 的个人工作站。它不仅能在电脑浏览器里提供完整的 Visual Studio Code 开发体验,更能让你在手机上轻松接入同一套 云原生开发环境,无缝继续你的创作。欢迎在 云栈社区 分享你的搭建经验和更多玩法。

参考文档

linuxserver/docker-code-server
地址:https://github.com/linuxserver/docker-code-server

tiann/hapi: App for Claude Code / Codex / Gemini / OpenCode, vibe coding anytime, anywhere
地址:https://github.com/tiann/hapi

HAPI - Vibe Coding Anytime, Anywhere
地址:https://hapi.run/

Quick Start | HAPI
地址:https://hapi.run/docs/guide/quick-start




上一篇:干货解析:开源AI教学平台OpenMAIC如何实现40%完课率,重塑个性化学习
下一篇:AI重塑软件业:架构、定价与组织如何应对智能体革命
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-3-18 09:02 , Processed in 0.890069 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表