企业部署工具组合教程
本教程介绍如何搭建 Claude Code + New API + 自定义 MCP 的企业级部署方案,满足企业的安全、合规和管理需求。
🎯 组合优势
| 工具 | 作用 | 解决的问题 |
|---|---|---|
| Claude Code | AI 编程助手 | 统一开发工具 |
| New API | API 网关 | 统一接口、审计、限流 |
| 自定义 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/callbackLDAP 集成
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:
- 添加 Prometheus 数据源
- 导入 New API 仪表板模板
- 配置告警通知渠道
🔒 第六步:安全加固
网络隔离
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月