手把手:开发环境与 agent 模板
在 agent-01 里装好开发工具、Claude Code 和通用配置,配好 SSH 免密登录,再做成模板。以后新开 agent 只需要克隆,然后做几步个性化设置。
install(在模板源虚拟机里装好全部工具和全局代理,含 Claude Code、Codex CLI、OpenCode、T3 Code)、cleanup(转换成模板前清理身份和凭证)、init 主机名(每台克隆机改名、登录 Claude/Codex/OpenCode/GitHub、装 T3 后台服务)。下载:curl -fsSL https://pages.chenos.dev/workstation/scripts/agent-template.sh -o ~/agent-template.sh。完整用法见 手把手:用 agent-template.sh。整体流程
agent-01:装工具 → 装 Claude Code 和通用配置 → 配好 SSH 免密 →(可选)共享文件夹、预装源码 │ │ 关机,完整克隆一份 ▼ 9000 tpl-agent:清理身份信息 → 转换成模板 │ │ 克隆 ▼ agent-02、agent-03 …:改主机名 → 绑定 IP → 登录 Claude → 配 GitHub 凭证 → 开始干活
| 放进模板 | 不放进模板(每台单独做) |
|---|---|
| 开发工具、Node、Docker、Claude Code 程序本身 | Claude Code 登录 |
| CLAUDE.md、settings.json、skills 等通用配置 | GitHub 凭证、私钥 |
| 代理设置、镜像源、时区 | 主机名、IP 绑定 |
| 你电脑的 SSH 公钥(authorized_keys) | T3 Code 配对 |
| 共享文件夹挂载、软链接、公开仓库的源码 | 私有仓库的凭证 |
第一部分:装开发工具
SSH 登录 agent-01 执行。下面多处用 sudo -E,作用是把代理环境变量一起带进 sudo。
1.1基础工具
sudo apt update
sudo apt install -y git build-essential tmux htop unzip jq gh libatomic1 # libatomic1:T3 Code 运行需要
gh 是 GitHub 命令行工具,克隆后用来登录 GitHub。
1.2Node.js 24 LTS 和 pnpm
curl -fsSL https://deb.nodesource.com/setup_24.x | sudo -E bash -
sudo apt install -y nodejs
sudo corepack enable # 启用 pnpm 和 yarn
node -v && pnpm -v
1.3Docker(项目里要用数据库之类的服务才需要)
curl -fsSL https://get.docker.com | sudo -E sh
sudo usermod -aG docker $USER # 以后用 docker 不用加 sudo,重新登录后生效
装好后一定要给 Docker 配代理,否则拉不了镜像。见 搭建教程 4.3 ②。配完后测试:
docker run --rm hello-world # 重新登录后执行,能看到 Hello from Docker! 就说明正常
第二部分:装 Claude Code,搬通用配置
2.1安装,但不登录
curl -fsSL https://claude.ai/install.sh | bash claude --version
2.2把原来那台机器上的通用配置搬过来
只搬“规则和习惯”,不搬登录信息和历史记录:
| ~/.claude 里的内容 | 搬不搬 |
|---|---|
CLAUDE.md(全局规则,比如 pages 文档放在哪里) | ✅ 搬 |
settings.json(主题、权限等设置) | ✅ 搬,搬完检查一遍里面有没有原来机器的路径 |
skills/、agents/、commands/(如果有) | ✅ 搬 |
.credentials.json、.claude.json | ❌ 不搬,这是登录信息 |
projects/、sessions/、history.jsonl、file-history/ | ❌ 不搬,这是原来机器上的会话记录和记忆,里面的路径也对不上 |
cache/、telemetry/、plugins/ 等 | ❌ 不搬,新机器上会自动生成;插件在新机器上重新安装 |
在原来那台机器上执行(agent-01 是你在 ~/.ssh/config 里配的别名,见第三部分;还没配的话先写成 dev@agent-01的IP):
cd ~/.claude rsync -av CLAUDE.md settings.json agent-01:~/.claude/ for d in skills agents commands; do [ -d "$d" ] && rsync -av "$d" agent-01:~/.claude/; done
2.3修正配置里的路径
原来机器上的用户名和新虚拟机里的不一样(比如 chenos 和 dev),配置里写死的绝对路径要改过来。在 agent-01 里:
grep -rn '/home/' ~/.claude/CLAUDE.md ~/.claude/settings.json ~/.claude/skills 2>/dev/null # 先看看有哪些 sed -i "s|/home/chenos/|/home/$USER/|g" ~/.claude/CLAUDE.md ~/.claude/settings.json # 把 chenos 换成原来的用户名
~/NocoBase/pages/,不用再管 Caddy。可以把多个 agent 写文档的规则一起加进 CLAUDE.md。2.4T3 Code 命令行工具(如果要用)
sudo apt install -y libatomic1 # 缺它会报 libatomic.so.1: cannot open shared object file
curl -fsSL https://t3.codes/install.sh | sh
同样只装不配对。用法见 T3 Code 教程。
第三部分:在你的电脑上配置 SSH 免密登录和 Remote-SSH
这一部分在你自己的电脑上做。要在做模板之前完成:你电脑的公钥会跟着模板进入每一台克隆机,以后连哪台都不用输密码。
3.1生成密钥(已经有的话跳过)
macOS、Linux 用终端,Windows 用 PowerShell:
ssh-keygen -t ed25519 # 一路按回车
3.2把公钥放到 agent-01 上
macOS 或 Linux:
ssh-copy-id dev@192.168.50.111
Windows PowerShell:
type $env:USERPROFILE\.ssh\id_ed25519.pub | ssh dev@192.168.50.111 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
再执行 ssh dev@192.168.50.111,不用输密码就能登录,说明成功了。
3.3给每台虚拟机起个短名字
编辑你电脑上的 ~/.ssh/config(Windows 是 C:\Users\你的用户名\.ssh\config):
Host agent-01 HostName 192.168.50.111 User dev Host agent-02 HostName 192.168.50.112 User dev
之后直接 ssh agent-01 就能连上。以后每新开一台 agent,在这里加一段。
3.4VS Code Remote-SSH
- VS Code 左侧点 扩展 → 搜索 Remote - SSH(作者是 Microsoft)→ 安装
- 按
F1→ Remote-SSH: Connect to Host → 选agent-01 - 第一次连接时,VS Code 会自动在虚拟机里装好服务端组件(会走虚拟机里配好的代理)
- 连上后 打开文件夹,选虚拟机里的项目目录
虚拟机这边不需要装任何东西,只要装 Ubuntu 时勾选了 OpenSSH server 就行。
3.5(推荐)禁止用密码登录 SSH
确认免密登录可以用之后,在 agent-01 里关掉密码登录,更安全。这个设置也会跟着进入模板:
echo 'PasswordAuthentication no' | sudo tee /etc/ssh/sshd_config.d/10-no-password.conf sudo systemctl restart ssh
第四部分:可选的预装内容
4.1共享文件夹
如果打算让所有虚拟机共用一个文件夹(推荐,pages 文档就放在里面),现在就按 共享文件夹教程第一部分做好:宿主机建目录、在 PVE 里登记、给 agent-01 加 Virtiofs 设备、写进 fstab、建软链接。这样克隆出来的虚拟机就都自带了。
4.2预装源码和依赖
代码量大的项目,在模板里先 clone 好、装好依赖,克隆出来的虚拟机只需要增量更新:
mkdir -p ~/NocoBase && cd ~/NocoBase
git clone https://github.com/nocobase/nocobase.git nocobase3 # 换成你实际用的仓库地址和分支
cd nocobase3 && pnpm install
.git/config 或者凭证缓存里,跟着模板复制到每一台机器。等克隆出来、每台单独登录 GitHub 之后再 clone。4.3tmux 小配置
cat > ~/.tmux.conf <<'EOF' set -g mouse on # 可以用鼠标滚动、切换窗格 set -g history-limit 50000 # 保留更多的输出历史,方便回看 agent 的输出 EOF
第五部分:清理并转换成模板
5.1从 agent-01 克隆一份出来
- 先给 agent-01 拍一个快照,名称填
tools-ready - 在 agent-01 里执行
sudo poweroff关机 - 在 PVE 里右键 agent-01 → 克隆:VM ID 填
9000,名称填tpl-agent,模式选 完整克隆 - 克隆完成后,只启动 9000,agent-01 先保持关机
5.2清理身份信息
9000 用的是和 agent-01 相同的 IP,用 ssh agent-01 就能连上它。登录后执行:
# 1. 让每台克隆机开机时自动生成自己的 SSH 主机密钥 sudo mkdir -p /etc/systemd/system/ssh.service.d sudo tee /etc/systemd/system/ssh.service.d/regen-keys.conf <<'EOF' [Service] ExecStartPre= ExecStartPre=/usr/bin/ssh-keygen -A ExecStartPre=/usr/sbin/sshd -t EOF # 2. 删掉现有的 SSH 主机密钥 sudo rm -f /etc/ssh/ssh_host_* # 3. 清空 machine-id,克隆机开机时会自动生成新的(否则几台机器会拿到同一个 IP) sudo truncate -s 0 /etc/machine-id sudo rm -f /var/lib/dbus/machine-id sudo ln -s /etc/machine-id /var/lib/dbus/machine-id # 4. 确认没有残留的登录信息(正常情况下这些都不存在) ls ~/.claude/.credentials.json ~/.config/gh ~/.git-credentials ~/.ssh/id_* 2>/dev/null # 5. 清理软件包缓存和命令历史,关机 sudo apt clean rm -f ~/.bash_history && history -c sudo poweroff
第 4 步如果列出了文件,说明有登录信息残留,先删掉再继续。
5.3转换成模板
- 在 PVE 里右键 9000 (tpl-agent) → 转换成模板
- 重新启动 agent-01,它继续正常使用
第六部分:克隆新的 agent
6.1克隆并开机
- 右键模板 tpl-agent → 克隆
- VM ID:
202;名称:agent-02;模式:完整克隆。克隆出来的机器和模板完全独立,local-lvm按实际使用量占空间,也不会浪费太多 - 启动,在 概要 页面看它分到的 IP
6.2改主机名,绑定 IP
ssh dev@<新机器的IP> sudo hostnamectl set-hostname agent-02 sudo sed -i 's/agent-01/agent-02/g' /etc/hosts
- 在路由器里给它绑定固定 IP,比如
192.168.50.112。克隆机的 MAC 地址是新的,在 硬件 → 网络设备 里看。然后sudo reboot - 在你电脑的
~/.ssh/config里加一段agent-02 - 如果连接时提示主机密钥变了(REMOTE HOST IDENTIFICATION HAS CHANGED),这是因为克隆机生成了新的密钥。执行
ssh-keygen -R 192.168.50.112删掉旧记录再连
6.3登录 Claude Code
claude auth login
6.4配置 Git 身份和 GitHub 凭证
git config --global user.name "你的名字" git config --global user.email "你的邮箱"
GitHub 凭证有两种做法:
| 做法 | 怎么做 | 适合 |
|---|---|---|
| 每台一个细粒度 token(推荐) | GitHub → Settings → Developer settings → Fine-grained tokens → 只勾选这台 agent 要用的仓库,权限给 Contents 和 Pull requests 读写,设一个过期时间。然后执行 gh auth login --with-token,粘贴 token | agent 权限最小;哪台出问题,单独撤销它的 token 就行 |
| 直接登录你的账号 | gh auth login,选 GitHub.com → HTTPS → 用浏览器登录 | 省事,但这台 agent 能访问你的所有仓库 |
任选一种之后,执行下面这条,让 git 也用这个凭证:
gh auth setup-git
6.5拉代码,开始干活
cd ~/NocoBase/nocobase3 && git pull && pnpm install # 模板里预装过的项目 cd ~/NocoBase && git clone https://github.com/xxx/私有仓库.git # 私有仓库现在 clone
要用 T3 Code 的话,再按 T3 Code 教程连接。
第七部分:日常使用 tmux
agent 跑在 tmux 里,断开 SSH、关掉 VS Code、电脑合盖都不会中断。
tmux new -s work # 新建一个会话,在里面启动 agent # 按 Ctrl+B,再按 D:暂时离开这个会话,agent 在后台继续跑 tmux attach -t work # 下次登录后回到这个会话 tmux ls # 看看有哪些会话
你的电脑 VS Code ──Remote-SSH──▶ agent-01
├── 编辑代码、看文件改动(VS Code 窗口)
└── VS Code 的终端里 tmux attach,查看 agent 的进度
在外面或者用手机连,见 Tailscale 教程。
第八部分:更新模板
模板本身不能开机,没法直接更新。做法是克隆一台出来,更新完再做成新模板:
- 从
tpl-agent完整克隆一台,比如 ID9001 - 开机,更新软件、装新工具:
sudo apt update && sudo apt full-upgrade -y、claude update等 - 重新执行一遍 5.2 的清理,关机
- 转换成模板,命名为
tpl-agent-v2 - 以后从新模板克隆;确认没问题后,旧模板可以删掉