#ubuntu #vibe-kanban #vibe-coding #npm #npx #pm2


```table-of-contents
```

 **Ubuntu Server 下安装、管理 Vibe-Kanban + OpenCode 的完整文档**，以 `shenwei` 用户操作、使用 Node 20 和 pm2 管理进程，包含详细命令和验证步骤。

以下是完整 Markdown 文档：

---

# Vibe-Kanban + OpenCode 在 Ubuntu Server 上安装与管理指南

本文档详细说明了如何在 Ubuntu Server 上使用非 root 用户（`shenwei`）安装 Node 20、Vibe-Kanban 与 OpenCode，并通过 pm2 管理进程，同时提供完整的验证步骤。

---

## 1️⃣ 清理旧的安装

**目的**：清理之前安装的 Node、Vibe-Kanban、OpenCode、工作树等，避免权限冲突和端口占用。

### 步骤：

1. 停止所有旧进程
    

```bash
# 查看旧的 vibe-kanban 或 opencode 进程
ps aux | grep -E 'vibe-kanban|opencode' | grep -v grep

# 停掉进程
kill <PID>
```

2. 删除旧工作树与缓存
    

```bash
rm -rf /var/tmp/vibe-kanban/worktrees/*
rm -rf ~/.vibe-kanban
```

3. 确保用户 `shenwei` 对目录有读写权限
    

```bash
sudo chown -R shenwei:shenwei /var/tmp/vibe-kanban
sudo chown -R shenwei:shenwei ~/.vibe-kanban
```

4. 如果之前系统安装了旧 Node 或全局 npm 包，可选择卸载
    

```bash
sudo apt remove nodejs npm -y
sudo rm -rf /usr/local/lib/node_modules
sudo rm -f /usr/local/bin/node /usr/local/bin/npm
```

---

## 2️⃣ 安装 Node 20（使用 nvm）

**目的**：确保 Node 版本为 20，兼容最新 Vibe-Kanban 和 OpenCode。

### 安装 nvm

```bash
# 下载并安装 nvm（代理环境下可用 proxychains）
curl -fsSL https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash

# 添加环境变量到 shenwei 的 bash 配置
echo 'export NVM_DIR="$HOME/.nvm"' >> ~/.bashrc
echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.bashrc

# 重新加载 bash
source ~/.bashrc
```

### 安装 Node 20

```bash
nvm install 20
nvm use 20
nvm alias default 20

# 验证 Node 和 npm
node -v   # 应该显示 v20.x.x
npm -v
```

---

## 3️⃣ 安装 Vibe-Kanban 与 OpenCode（用户 `shenwei`）

### 安装 Vibe-Kanban

```bash
# 安装最新版本
npm install -g vibe-kanban

# 创建工作目录
mkdir -p ~/vibe-kanban-projects
cd ~/vibe-kanban-projects
```

### 安装 OpenCode

```bash
# 安装 OpenCode CLI
npm install -g opencode-ai

# 验证安装
opencode --version
```

> ⚠️ 注意：不要用 root 启动 OpenCode serve，vibe-kanban 会自动 spawn executor

---

## 4️⃣ 查看安装后的进程和验证

### 查看进程

```bash
# 查看 Node 相关进程
ps aux | grep -E 'vibe-kanban|opencode' | grep -v grep

# 查看监听端口
ss -lntp | grep opencode
ss -lntp | grep vibe-kanban
```

### 参考用pm2启动进程
### 验证 vibe-kanban 启动

```bash
# 使用 debug 模式启动
RUST_LOG=debug HOST=0.0.0.0 PORT=9999 npx vibe-kanban
```

- 日志中应包含：
    

```
Server running on http://0.0.0.0:9999
Starting executor on port <random_port>
```

- 如果浏览器无法自动打开，可手动访问：[http://192.168.3.45:9999](http://192.168.3.45:9999/)
    

### 验证 OpenCode executor

- vibe-kanban 启动后会 spawn executor（随机端口），可通过日志查看端口
    
- 检查端口是否在监听：
    

```bash
ss -lntp | grep opencode
```

- 用 curl 测试 executor 健康（假设端口 40829）：
    

```bash
curl http://127.0.0.1:40829/health
# 返回 OK
```

> ⚠️ 遇到 I/O error 时，通常是 executor 没启动或端口被占用

---

## 5️⃣ 使用 pm2 管理进程

### 安装 pm2

```bash
npm install -g pm2
```

### 使用 pm2 启动 Vibe-Kanban

```bash
pm2 start "RUST_LOG=debug HOST=0.0.0.0 PORT=9999 npx vibe-kanban" --name vibe-kanban

# 查看状态
pm2 status

# 查看日志
pm2 logs vibe-kanban
```

### 使用 pm2 启动 OpenCode Executor
``` bash 
pm2 start "opencode serve --hostname 127.0.0.1 --port 40829" --name opencode-executor

# 查看状态
pm2 status

# 查看日志
pm2 logs opencode-executor
```



---

## 6️⃣ 完整验证步骤

1. 清理旧工作树和进程
    
2. 确认 Node 20 已正确安装
    
3. 确认 Vibe-Kanban 与 OpenCode 已安装并属于 `shenwei` 用户
    
4. 启动 vibe-kanban：
    

```bash
RUST_LOG=debug HOST=0.0.0.0 PORT=9999 npx vibe-kanban
```

5. 检查日志：
    

```
Server running on http://0.0.0.0:9999
Starting executor on port <random_port>
```

6. 检查监听端口：
    

```bash
ss -lntp | grep node
```

7. 用浏览器或 curl 访问：
    

```
http://127.0.0.1:9999
curl http://127.0.0.1:<executor_port>/health
```

8. pm2 管理进程：
    

```bash
pm2 start "RUST_LOG=debug HOST=0.0.0.0 PORT=9999 npx vibe-kanban" --name vibe-kanban
pm2 logs vibe-kanban
pm2 save
pm2 startup systemd -u shenwei --hp /home/shenwei
```

9. 完整测试：
    

- 创建测试项目
    
- 创建任务
    
- 日志中不应再出现：
    

```
OpenCode executor error: I/O error: error sending request ...
```

---

### ✅ 总结

- **不要用 root** 启动 OpenCode serve
    
- **vibe-kanban 自行 spawn executor**，随机端口即可
    
- pm2 只管理 **vibe-kanban**，executor 随进程一起管理
    
- 保证 `/var/tmp/vibe-kanban` 和 `~/.vibe-kanban` 权限属于用户
    
- Node 版本 20 + npm 最新即可
   