Skip to content

企业部署工具组合教程

本教程介绍如何搭建 Claude Code + New API + 自定义 MCP 的企业级部署方案,满足企业的安全、合规和管理需求。


🎯 组合优势

工具作用解决的问题
Claude CodeAI 编程助手统一开发工具
New APIAPI 网关统一接口、审计、限流
自定义 MCP内部系统集成连接企业内部资源

企业级特性:

  • 🔐 SSO 单点登录集成
  • 📊 完整的审计日志
  • 🚦 精细化权限控制
  • 💰 成本中心分摊
  • 🔄 内部系统集成

🏗️ 架构设计

┌─────────────────────────────────────────────────────┐
│                    开发者终端                         │
│                   Claude Code                        │
└──────────────┬──────────────────────────────────────┘


┌─────────────────────────────────────────────────────┐
│                  企业内网边界                         │
│              Nginx / API Gateway                     │
└──────────────┬──────────────────────────────────────┘


┌─────────────────────────────────────────────────────┐
│                   New API 网关                       │
│  • 身份认证   • 权限控制   • 审计日志                 │
│  • 限流保护   • 成本统计   • 渠道管理                 │
└──────────────┬──────────────────────────────────────┘

      ┌────────┼────────┬────────────┐
      ↓        ↓        ↓            ↓
┌──────────┐ ┌────────┐ ┌────────┐ ┌──────────┐
│Anthropic │ │内部MCP │ │Jira API│ │GitLab API│
│   API    │ │ 服务器 │ │        │ │          │
└──────────┘ └────────┘ └────────┘ └──────────┘

📦 第一步:部署 New API 集群

高可用架构部署

bash
# 创建部署目录
mkdir -p /opt/new-api-cluster && cd /opt/new-api-cluster

# 创建 docker-compose.yml
cat > docker-compose.yml << 'EOF'
version: '3.8'

services:
  nginx:
    image: nginx:alpine
    container_name: new-api-nginx
    restart: always
    ports:
      - "443:443"
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
      - ./ssl:/etc/nginx/ssl:ro
    depends_on:
      - new-api-1
      - new-api-2

  new-api-1:
    image: calciumion/new-api:latest
    container_name: new-api-1
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SQL_DSN=root:${DB_PASSWORD}@tcp(mysql:3306)/newapi
      - REDIS_CONN_STRING=redis://:${REDIS_PASSWORD}@redis:6379
      - SESSION_SECRET=${SESSION_SECRET}
      - CRYPTO_SECRET=${CRYPTO_SECRET}
    volumes:
      - ./data1:/data

  new-api-2:
    image: calciumion/new-api:latest
    container_name: new-api-2
    restart: always
    environment:
      - TZ=Asia/Shanghai
      - SQL_DSN=root:${DB_PASSWORD}@tcp(mysql:3306)/newapi
      - REDIS_CONN_STRING=redis://:${REDIS_PASSWORD}@redis:6379
      - SESSION_SECRET=${SESSION_SECRET}
      - CRYPTO_SECRET=${CRYPTO_SECRET}
    volumes:
      - ./data2:/data

  mysql:
    image: mysql:8.0
    container_name: new-api-mysql
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
      - MYSQL_DATABASE=newapi
    volumes:
      - ./mysql:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password

  redis:
    image: redis:7-alpine
    container_name: new-api-redis
    restart: always
    command: redis-server --requirepass ${REDIS_PASSWORD}
    volumes:
      - ./redis:/data

  prometheus:
    image: prom/prometheus:latest
    container_name: new-api-prometheus
    restart: always
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - ./prometheus-data:/prometheus

  grafana:
    image: grafana/grafana:latest
    container_name: new-api-grafana
    restart: always
    ports:
      - "3001:3000"
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
    volumes:
      - ./grafana-data:/var/lib/grafana
EOF

# 创建环境变量文件
cat > .env << 'EOF'
DB_PASSWORD=your-strong-db-password
REDIS_PASSWORD=your-strong-redis-password
SESSION_SECRET=your-session-secret-min-32-chars
CRYPTO_SECRET=your-crypto-secret-min-32-chars
GRAFANA_PASSWORD=admin-password
EOF

# 创建 Nginx 配置
cat > nginx.conf << 'EOF'
upstream new-api-backend {
    least_conn;
    server new-api-1:3000 weight=1 max_fails=3 fail_timeout=30s;
    server new-api-2:3000 weight=1 max_fails=3 fail_timeout=30s;
}

server {
    listen 80;
    server_name api.company.com;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name api.company.com;

    ssl_certificate /etc/nginx/ssl/fullchain.pem;
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;

    client_max_body_size 50M;

    location / {
        proxy_pass http://new-api-backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        proxy_connect_timeout 60s;
        proxy_send_timeout 600s;
        proxy_read_timeout 600s;
    }

    # 健康检查端点
    location /health {
        access_log off;
        proxy_pass http://new-api-backend;
    }
}
EOF

# 启动服务
docker-compose up -d

🎬 企业配置演示

SSL 证书配置

bash
# 使用 Let's Encrypt
mkdir -p ssl
certbot certonly --standalone -d api.company.com \
  --email admin@company.com --agree-tos

# 复制证书
cp /etc/letsencrypt/live/api.company.com/fullchain.pem ssl/
cp /etc/letsencrypt/live/api.company.com/privkey.pem ssl/

# 重启 Nginx
docker-compose restart nginx

🔐 第二步:SSO 集成

OIDC 配置

New API 支持 OIDC 单点登录,可以集成企业 IdP(如 Keycloak、Okta)。

bash
# 在 docker-compose.yml 中添加环境变量
environment:
  - OIDC_ENABLED=true
  - OIDC_ISSUER=https://sso.company.com/realms/company
  - OIDC_CLIENT_ID=new-api
  - OIDC_CLIENT_SECRET=your-client-secret
  - OIDC_REDIRECT_URI=https://api.company.com/oauth/callback

LDAP 集成

bash
# 配置 LDAP 认证
environment:
  - LDAP_ENABLED=true
  - LDAP_URL=ldap://ldap.company.com:389
  - LDAP_BIND_DN=cn=admin,dc=company,dc=com
  - LDAP_BIND_PASSWORD=ldap-password
  - LDAP_USER_BASE=ou=users,dc=company,dc=com
  - LDAP_USER_FILTER=(uid=%s)

🔧 第三步:自定义 MCP 服务器

企业内部系统 MCP

创建自定义 MCP 服务器连接内部系统:

python
# mcp-company-internal.py
import asyncio
from mcp.server import Server
from mcp.types import Tool, TextContent

# 初始化 MCP 服务器
server = Server("company-internal")

@server.list_tools()
async def list_tools():
    return [
        Tool(
            name="query_jira",
            description="查询 Jira 工单信息",
            inputSchema={
                "type": "object",
                "properties": {
                    "issue_key": {
                        "type": "string",
                        "description": "Jira 工单号"
                    }
                },
                "required": ["issue_key"]
            }
        ),
        Tool(
            name="search_confluence",
            description="搜索 Confluence 文档",
            inputSchema={
                "type": "object",
                "properties": {
                    "query": {
                        "type": "string",
                        "description": "搜索关键词"
                    }
                },
                "required": ["query"]
            }
        ),
        Tool(
            name="query_gitlab",
            description="查询 GitLab 代码库信息",
            inputSchema={
                "type": "object",
                "properties": {
                    "project_id": {
                        "type": "string",
                        "description": "项目 ID"
                    }
                },
                "required": ["project_id"]
            }
        )
    ]

@server.call_tool()
async def call_tool(name: str, arguments: dict):
    if name == "query_jira":
        # 调用内部 Jira API
        return [TextContent(type="text", text=f"工单详情...")]
    elif name == "search_confluence":
        # 调用内部 Confluence API
        return [TextContent(type="text", text=f"文档搜索结果...")]
    elif name == "query_gitlab":
        # 调用内部 GitLab API
        return [TextContent(type="text", text=f"代码库信息...")]

if __name__ == "__main__":
    server.run()

部署 MCP 服务器

bash
# 创建 Dockerfile
cat > Dockerfile << 'EOF'
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY mcp-company-internal.py .
CMD ["python", "mcp-company-internal.py"]
EOF

# requirements.txt
cat > requirements.txt << 'EOF'
mcp>=0.1.0
httpx
EOF

# 构建并运行
docker build -t mcp-company-internal .
docker run -d --name mcp-company \
  --network new-api-cluster_default \
  -e JIRA_URL=https://jira.company.com \
  -e JIRA_TOKEN=xxx \
  -e CONFLUENCE_URL=https://confluence.company.com \
  -e CONFLUENCE_TOKEN=xxx \
  -e GITLAB_URL=https://gitlab.company.com \
  -e GITLAB_TOKEN=xxx \
  mcp-company-internal

👥 第四步:用户与权限管理

部门组织架构

在 New API 中创建用户组:

组织架构:
├── 研发部
│   ├── 前端组(每月 $500 额度)
│   ├── 后端组(每月 $800 额度)
│   └── 测试组(每月 $200 额度)
├── 产品部(每月 $300 额度)
└── 运维部(每月 $400 额度)

权限分级

级别权限模型限制
初级开发基础使用Haiku, Sonnet
高级开发完整功能Haiku, Sonnet, Opus
架构师无限制所有模型 + MCP
管理员后台管理完全访问

批量创建用户

bash
# create-users.sh
#!/bin/bash

# 从 LDAP 同步用户
ldapsearch -x -H ldap://ldap.company.com \
  -D "cn=admin,dc=company,dc=com" \
  -w password \
  -b "ou=users,dc=company,dc=com" \
  "(objectClass=person)" uid mail | \
while read line; do
  if [[ $line =~ uid:\ (.+) ]]; then
    username="${BASH_REMATCH[1]}"
  elif [[ $line =~ mail:\ (.+) ]]; then
    email="${BASH_REMATCH[1]}"
    # 调用 New API 创建用户
    curl -X POST https://api.company.com/api/user \
      -H "Authorization: Bearer $ADMIN_TOKEN" \
      -d "{\"username\":\"$username\",\"email\":\"$email\"}"
  fi
done

📊 第五步:监控与告警

Prometheus 配置

yaml
# prometheus.yml
global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'new-api'
    static_configs:
      - targets: ['new-api-1:3000', 'new-api-2:3000']
    metrics_path: '/api/metrics'

  - job_name: 'nginx'
    static_configs:
      - targets: ['nginx:9113']

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['alertmanager:9093']

rule_files:
  - 'alert_rules.yml'

告警规则

yaml
# alert_rules.yml
groups:
  - name: new-api-alerts
    rules:
      - alert: HighRequestRate
        expr: rate(http_requests_total[5m]) > 1000
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "高请求率告警"

      - alert: HighErrorRate
        expr: rate(http_requests_errors[5m]) > 10
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "高错误率告警"

      - alert: HighTokenUsage
        expr: daily_token_usage > 10000000
        labels:
          severity: warning
        annotations:
          summary: "日 Token 用量超标"

Grafana 仪表板

访问 http://your-server:3001 配置 Grafana:

  1. 添加 Prometheus 数据源
  2. 导入 New API 仪表板模板
  3. 配置告警通知渠道

🔒 第六步:安全加固

网络隔离

bash
# 创建独立 Docker 网络
docker network create --driver bridge \
  --subnet=172.20.0.0/16 \
  new-api-internal

# 只暴露 Nginx 端口,其他服务在内网

审计日志

bash
# 启用详细审计日志
environment:
  - ENABLE_AUDIT_LOG=true
  - AUDIT_LOG_PATH=/data/audit.log
  - LOG_LEVEL=info

# 日志格式
{
  "timestamp": "2025-12-17T10:30:00Z",
  "user": "zhang.san",
  "action": "api_call",
  "model": "claude-3-5-sonnet",
  "tokens": 1234,
  "cost": 0.05,
  "ip": "192.168.1.100"
}

限流策略

bash
# 在 Nginx 中配置限流
http {
    limit_req_zone $binary_remote_addr zone=api_limit:10m rate=100r/m;
    
    server {
        location /v1/ {
            limit_req zone=api_limit burst=20 nodelay;
        }
    }
}

📋 第七步:员工使用指南

员工配置文档

markdown
# Claude Code 企业版使用指南

## 1. 安装 Claude Code
参考官方文档安装

## 2. 配置企业 API
# 添加到 ~/.bashrc
export ANTHROPIC_BASE_URL="https://api.company.com"
export ANTHROPIC_API_KEY="您的企业令牌"

## 3. 验证配置
claude --version
claude
> 你好,请确认连接正常

## 4. 使用规范
- 不得用于个人项目
- 遵守公司代码规范
- 敏感信息不得发送给 AI
- 定期查看用量统计

💰 成本管理

成本中心分摊

sql
-- 按部门统计月度成本
SELECT 
  department,
  SUM(tokens) as total_tokens,
  SUM(cost) as total_cost,
  COUNT(DISTINCT user_id) as user_count
FROM usage_logs
WHERE month = '2025-12'
GROUP BY department;

-- 输出示例
研发部-前端组  | 2,500,000 | $125.00 | 15
研发部-后端组  | 4,800,000 | $240.00 | 20
研发部-测试组  | 800,000   | $40.00  | 8
产品部        | 1,200,000 | $60.00  | 10

预算告警

bash
# 设置部门预算
前端组:$500/月
后端组:$800/月
测试组:$200/月

# 触发告警条件
- 达到 80% 发送提醒
- 达到 100% 暂停访问
- 每周生成用量报告

🔍 故障排查

常见问题

Q: 员工无法连接?

bash
# 检查网络连通性
curl -I https://api.company.com/health

# 检查令牌有效性
curl https://api.company.com/api/user/self \
  -H "Authorization: Bearer $TOKEN"

Q: 响应缓慢?

bash
# 查看 New API 日志
docker logs new-api-1 --tail 100

# 查看 Nginx 日志
docker logs new-api-nginx --tail 100

# 检查数据库连接
docker exec new-api-mysql mysql -e "SHOW PROCESSLIST;"

Q: MCP 服务器无响应?

bash
# 检查 MCP 容器状态
docker ps | grep mcp

# 查看 MCP 日志
docker logs mcp-company --tail 100

📈 效果评估

指标部署前部署后
API 管理分散混乱统一规范
成本可见性无法统计精确到部门/人
安全审计缺失完整日志
故障恢复>30分钟<5分钟
开发效率基准提升 40%

🎓 相关资源


最后更新:2025年12月

Claude Code 中文文档 - 社区翻译项目