Happy Docs 中文文档

自建 Happy Server

几分钟内搭建自己的中继服务器,完全掌控你的 Claude Code 移动端。

为什么要自建?

自建意味着完全隐私、无限制、团队可控、零依赖。

当你自建 Happy Server,你获得:
- 完全隐私 — 加密数据留在你自己的硬件上
- 无限制 — 自定义速率限制和存储
- 团队可控 — 一台服务器服务整个团队
- 零依赖 — 永远不用担心服务下线

整个服务端只有 1,293 行 TypeScript。你可以自己读一遍来验证它只是转发加密消息。

快速开始

第一步:克隆并构建

# 获取代码
git clone https://github.com/slopus/happy-server
cd happy-server

# 用 Docker 构建
docker build -t happy-server:latest .

第二步:运行服务器

docker run -d \
  --name happy-server \
  -p 3000:3000 \
  -e NODE_ENV=production \
  -e DATABASE_URL="postgresql://postgres:postgres@localhost:5432/happy-server" \
  -e REDIS_URL="redis://localhost:6379" \
  -e SEED="your-seed-for-token-generation" \
  -e PORT=3005 \
  --restart unless-stopped \
  happy-server:latest

重要:用你的实际配置替换环境变量值:
- DATABASE_URL:你的 PostgreSQL 连接字符串
- REDIS_URL:你的 Redis 连接字符串
- SEED:用于 token 生成的安全随机种子
- PORT:应用监听的端口(3005)

第三步:配置你的设备

手机端:
1. 打开 Happy App
2. 进入 Settings
3. 将 "Relay Server URL" 设为 http://your-server:3000
4. 保存

电脑端:

export HAPPY_SERVER_URL="http://your-server:3000"
# 配置你的 CLI 使用你的服务器

就这样!你的 Happy 现在通过自己的服务器运行了。

生产环境 HTTPS 配置

用 Caddy 是最简单的方式,自动管理 SSL 证书。

正式使用建议上 HTTPS。用 Caddy 最简单:

# 安装 Caddy(自动管理 SSL 证书)
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy

# 配置反向代理
sudo tee /etc/caddy/Caddyfile <<EOF
your-domain.com {
    reverse_proxy localhost:3000
}
EOF

# 启动 Caddy
sudo systemctl restart caddy

然后在 Happy Coder 设置中使用 https://your-domain.com

Docker Compose 配置

用 Docker Compose 更易管理,一次拉起 Server + PostgreSQL + Redis。

# docker-compose.yml
version: '3.8'
services:
  happy-server:
    image: happy-server:latest
    ports:
      - "3000:3000"
    restart: unless-stopped
    environment:
      - NODE_ENV=production
      - DATABASE_URL=postgresql://postgres:postgres@localhost:5432/happy-server
      - REDIS_URL=redis://localhost:6379
      - SEED=your-seed-for-token-generation
      - PORT=3005
    depends_on:
      - postgres
      - redis

  postgres:
    image: postgres:15
    environment:
      - POSTGRES_DB=happy-server
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    volumes:
      - postgres_data:/var/lib/postgresql/data
    ports:
      - "5432:5432"

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:

运行:docker-compose up -d

这个配置包含了 Happy Server 依赖的 PostgreSQL 和 Redis 容器。

托管选择

选项 1:家庭服务器(免费)

在家里任何一台电脑上运行:
- 树莓派(一次性 $35)
- 旧笔记本
- Mac Mini
- 一直开着的台式机

选项 2:云 VPS($5-10/月)

服务商 价格 备注
DigitalOcean $6/月 Droplet 够用
Linode $5/月 共享 CPU
Vultr $6/月 常规性能
Hetzner 4 欧/月 欧洲性价比之王

选项 3:企业内网

在公司网络内部署供团队使用。服务器可以在防火墙和代理后面正常工作。

系统要求

Happy Server 非常轻量。

规模 RAM CPU 存储 网络
1-10 个开发者 512MB 1 核 10GB 100Mbps
10-100 个开发者 2GB 2 核 100GB 1Gbps

监控你的服务器

# 查看日志
docker logs -f happy-server

# 检查健康端点
curl http://your-server:3000/health

# 查看连接数
curl http://your-server:3000/stats

备份数据

服务器存储的是加密 blob,没有设备密钥谁也读不了。

服务器把加密 blob 存储在 /data。备份方法:

# 简单备份
tar -czf backup-$(date +%Y%m%d).tar.gz ./data

# 或同步到其他位置
rsync -av ./data/ backup-location/

记住:这些备份是加密的。没有你的设备密钥,谁也读不了。

安全说明

Happy Server 的设计从根本上保护你的数据安全。

  1. 服务器无法读取你的数据 — 发送前一切已加密
  2. 不需要账号 — 认证使用密码学证明
  3. 不记录你的代码 — 服务器只记录连接元数据
  4. 开源 — 自己审计代码

额外安全建议:
- 生产环境使用 HTTPS
- 团队部署时放在 VPN 后面
- 配置 fail2ban 防暴力破解

成本对比

方案 费用
自建(家庭硬件) 免费
自建(VPS) $5-10/月,无限使用
Omnara $9/月/用户
Cursor Mobile 跑在他们的 VM 上
Terragon/Siteboon 按用量计费
Conductor 免费层之后 $29/月

自建省钱又掌控在手。

进阶:Kubernetes 部署

给使用 Kubernetes 的团队准备的生产配置。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: happy-server
spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  replicas: 1
  selector:
    matchLabels:
      app: happy-server
  template:
    metadata:
      labels:
        app: happy-server
    spec:
      containers:
      - name: happy-server
        image: happy-server:latest  # 替换为你实际的镜像仓库
        ports:
        - containerPort: 3005
        envFrom:
        - secretRef:
            name: happy-secrets
---
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  name: happy-server-pdb
spec:
  minAvailable: 1
  selector:
    matchLabels:
      app: happy-server

---
apiVersion: v1
kind: Service
metadata:
  name: happy-server
spec:
  selector:
    app: happy-server
  ports:
  - port: 3005
    targetPort: 3005
  type: ClusterIP

配置说明
- 所有端口统一使用 3005(应用实际监听端口)
- 使用上面创建的 happy-secrets Secret
- 更新 image 名称为你实际的容器仓库地址

Kubernetes Secrets

创建环境变量的 Secret 文件:

# happy-secrets.yaml
apiVersion: v1
kind: Secret
metadata:
  name: happy-secrets
type: Opaque
stringData:
  DATABASE_URL: "postgresql://postgres:postgres@postgres-service:5432/happy-server"
  REDIS_URL: "redis://redis-service:6379"
  SEED: "your-secure-seed-for-token-generation"
  PORT: "3005"
  NODE_ENV: "production"

应用 Secret:

kubectl apply -f happy-secrets.yaml

安全提示:替换为你的实际配置。生产环境建议:
- 使用强随机的 SEED 值
- 使用正确的数据库凭据
- 考虑使用外部 Secret 管理工具如 external-secrets-operator 配合 Vault

下一步

服务器设置完成后:

  1. 配置团队访问
  2. 设置监控
  3. 启用语音编程

自建 Happy Server 只需 3 分钟,让你永久掌控 Claude Code 移动端访问。无订阅、无锁定、无意外。