Lightsail部署服务器

MCP Lightsail部署服务器是一个用于将项目部署到AWS Lightsail的协议服务器,支持通过Cloudflare自动配置DNS,并通过服务器发送事件(SSE)实时跟踪部署进度。

  • by Bayesian4042
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 bayesian4042/mcp-servers

使用说明

MCP IntelliTrace部署服务器

一个模型上下文协议(MCP)服务器,用于通过Cloudflare自动配置DNS并通过服务器发送事件(SSE)实时跟踪进度,将项目部署到AWS Handle。

特性

  • 🚀 自动VM创建:使用自定义配置创建AWS ExpressRoute实例
  • 📦 GitHub集成:直接从GitHub存储库克隆和部署项目
  • 🌐 DNS管理:自动创建和管理Cloudflare DNS记录
  • 🔄 重新部署:只需一个命令,即可提取最新代码并重新启动服务
  • 📡 实时更新:用于实时部署进度跟踪的服务器发送事件(SSE)
  • 🔒 安全:敏感凭据的加密存储
  • 🛠️ Docker支持:自动Docker Compose部署
  • 🌍 Caddy集成:自动反向代理和SSL证书管理

建筑

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   MCP Client    │    │   MCP Server    │    │  AWS Lightsail  │
│   (LLM/App)     │◄──►│  (This Server)  │◄──►│   Instance      │
└─────────────────┘    └─────────────────┘    └─────────────────┘
                              │
                              ▼
                       ┌─────────────────┐
                       │   Cloudflare    │
                       │   DNS Records   │
                       └─────────────────┘

安装

  1. 克隆存储库:

    git clone <repository-url>
    cd mcp-lightsail-server
    
  2. 安装依赖项:

    npm install
    
  3. 配置环境变量:

    cp .env.example .env
    # Edit .env with your configuration
    
  4. 构建项目:

    npm run build
    
  5. 启动服务器:

    npm start
    

环境变量

创建一个 .env 包含以下变量的文件:

# Server Configuration
PORT=3000
ENCRYPTION_KEY=your-32-character-encryption-key-here

# Optional: Default AWS Configuration (for 'og' account type)
OPENGIG_AWS_ACCESS_KEY_ID=your-aws-access-key
OPENGIG_AWS_SECRET_ACCESS_KEY=your-aws-secret-key
OPENGIG_AWS_REGION=us-east-1
OPENGIG_AVAILABILITY_ZONE=us-east-1a
OPENGIG_AWS_SSH_KEY=your-ssh-private-key
OPENGIG_CLOUDFLARE_ZONE_ID=your-cloudflare-zone-id
OPENGIG_CLOUDFLARE_API_TOKEN=your-cloudflare-api-token

MCP工具

1. create_vm

创建新的kubectl虚拟机并部署GitHub项目。

参数:

  • awsAccessKey (string):AWS访问密钥ID
  • awsSecretKey (string):AWS秘密访问密钥
  • awsRegion (string):AWS区域(例如us-east-1)
  • availabilityZone (string):AWS可用区(例如us-east-1a)
  • awsSshKey (string):AWS SSH私钥(PEM格式)
  • bundleId (string):ExpressRoute捆绑包ID(例如,nano_2_0)
  • blueprintId (字符串):ExpressRoute蓝图ID(例如ubuntu20_04)
  • githubRepoUrl (string):GitHub存储库URL
  • githubPat (string):GitHub个人访问令牌
  • cloudflareZoneId (字符串):Cloudflare区域ID
  • cloudflareApiToken (字符串):Cloudflare API代币
  • projectName (string):部署的项目名称
  • domain (字符串,可选):域名(默认为opengig.work)
  • accountType (string):'og'或'custom'

退货:

{
  "sessionId": "uuid-session-id",
  "message": "VM deployment started. Use the session ID to track progress via SSE."
}

2. redeploy_project

通过提取最新代码重新部署现有项目。

参数:

  • sessionId (string):来自原始部署的会话ID

3. get_vm_status

获取已部署VM的当前状态。

参数:

  • sessionId (string):部署中的会话ID

4. get_all_deployments

列出所有活动部署。

5. delete_vm

删除虚拟机并清理所有相关资源。

参数:

  • sessionId (string):部署中的会话ID

6. force_delete_vm

强制删除VM会话(在正常删除失败时使用)。

参数:

  • sessionId (string):部署中的会话ID

实时进度跟踪

连接到SSE端点以接收实时更新:

const eventSource = new EventSource(`http://localhost:3000/sse/${sessionId}`);

eventSource.onmessage = function(event) {
  const data = JSON.parse(event.data);
  console.log('Event:', data);
  
  switch(data.type) {
    case 'progress':
      console.log('Progress:', data.data.message);
      break;
    case 'log':
      console.log('Log:', data.data);
      break;
    case 'error':
      console.error('Error:', data.data.error);
      break;
    case 'complete':
      console.log('Complete:', data.data);
      break;
  }
};

事件类型

  • progress:部署进度更新
  • log:命令执行日志
  • error:错误消息
  • complete:部署完成
  • status:当前部署状态

API终点

  • POST /mcp -MCP协议端点
  • GET /mcp -MCP SSE通知
  • DELETE /mcp -MCP会话终止
  • GET /sse/:sessionId -实时部署进度
  • GET /health -健康检查端点

用法示例

// Using the MCP client
const result = await mcpClient.callTool('create_vm', {
  awsAccessKey: 'AKIA...',
  awsSecretKey: 'secret...',
  awsRegion: 'us-east-1',
  availabilityZone: 'us-east-1a',
  awsSshKey: '-----BEGIN RSA PRIVATE KEY-----\n...',
  bundleId: 'nano_2_0',
  blueprintId: 'ubuntu_20_04',
  githubRepoUrl: 'https://github.com/user/repo',
  githubPat: 'ghp_...',
  cloudflareZoneId: 'zone-id',
  cloudflareApiToken: 'token',
  projectName: 'my-app',
  accountType: 'custom'
});

// Track progress
const sessionId = result.sessionId;
const eventSource = new EventSource(`http://localhost:3000/sse/${sessionId}`);

部署程序

  1. VM创建:创建具有指定配置的ExpressRoute实例
  2. 网络设置:打开实例的所有端口
  3. SSH连接:通过SSH连接到实例
  4. 环境设置:安装Docker、Caddy和其他依赖项
  5. 存储库克隆:克隆GitHub存储库
  6. 球童配置:设置反向代理和SSL
  7. 应用程序部署:跑步 docker compose up -d
  8. DNS配置:创建Cloudflare DNS A记录
  9. 完成:报告访问URL成功

安全考虑

  • 所有敏感数据(AWS密钥、SSH密钥、GitHub令牌)都是静态加密的
  • 将环境变量用于默认配置
  • 对MCP服务器实施适当的访问控制
  • 定期轮换API令牌和访问密钥

故障排除

常见问题

  1. SSH连接超时:确保SSH密钥正确,并且实例已完全初始化
  2. DNS创建失败:验证Cloudflare API令牌是否具有DNS编辑权限
  3. Docker编写错误:检查存储库是否包含有效的 docker-compose.yml
  4. 港口准入问题:确保ExpressRoute防火墙规则允许必要的端口

日志

通过检查部署日志 get_vm_status 工具或SSE事件以获取详细的错误信息。

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 如果适用,添加测试
  5. 提交拉取请求

许可证

MIT许可证-有关详细信息,请参阅许可证文件。 const结果=等待mcpClient.callTool('create_vm',params); 返回结果; } }, 重新部署_项目:{ description:'重新部署现有项目', 参数:{ 类型:“对象”, 属性:{ 会话ID:{类型:“string”} }, 必填项:['sessionId] }, 执行:异步(参数)=>{ const result=await mcpClient.callTool('deploy_project',params); 返回结果; } }, get_vm-status:{ description:'获取VM部署状态', 参数:{ 类型:“对象”, 属性:{ 会话ID:{类型:“string”} }, 必填项:['sessionId] }, 执行:异步(参数)=>{ const结果=等待mcpClient.callTool('get_vm_status',参数); 返回结果; } } } });


### 4. Real-time Progress Tracking

```typescript
// After deployment starts, track progress
const sessionId = deploymentResult.sessionId;

// Set up SSE connection for real-time updates
const eventSource = new EventSource(`http://localhost:3000/sse/${sessionId}`);

eventSource.onmessage = (event) => {
  const data = JSON.parse(event.data);
  
  // Update your UI with deployment progress
  switch(data.type) {
    case 'progress':
      console.log('Progress:', data.data.message);
      break;
    case 'complete':
      console.log('Deployment complete:', data.data.url);
      eventSource.close();
      break;
    case 'error':
      console.error('Deployment error:', data.data.error);
      eventSource.close();
      break;
  }
};

用法示例

// Direct MCP client usage
const result = await mcpClient.callTool('create_vm', {
  awsAccessKey: 'AKIA...',
  awsSecretKey: 'secret...',
  awsRegion: 'us-east-1',
  availabilityZone: 'us-east-1a',
  awsSshKey: '-----BEGIN RSA PRIVATE KEY-----\n...',
  bundleId: 'nano_2_0',
  blueprintId: 'ubuntu_20_04',
  githubRepoUrl: 'https://github.com/user/repo',
  githubPat: 'ghp_...',
  cloudflareZoneId: 'zone-id',
  cloudflareApiToken: 'token',
  projectName: 'my-app',
  accountType: 'custom'
});

// Track progress
const sessionId = result.sessionId;
const eventSource = new EventSource(`http://localhost:3000/sse/${sessionId}`);

部署程序

  1. VM创建:创建具有指定配置的ExpressRoute实例
  2. 网络设置:打开实例的所有端口
  3. SSH连接:通过SSH连接到实例
  4. 环境设置:安装Docker、Caddy和其他依赖项
  5. 存储库克隆:克隆GitHub存储库
  6. 球童配置:设置反向代理和SSL
  7. 应用程序部署:跑步 docker compose up -d
  8. DNS配置:创建Cloudflare DNS A记录
  9. 完成:报告访问URL成功

安全考虑

  • 所有敏感数据(AWS密钥、SSH密钥、GitHub令牌)都是静态加密的
  • 将环境变量用于默认配置
  • 对MCP服务器实施适当的访问控制
  • 定期轮换API令牌和访问密钥

故障排除

常见问题

  1. SSH连接超时:确保SSH密钥正确,并且实例已完全初始化
  2. DNS创建失败:验证Cloudflare API令牌是否具有DNS编辑权限
  3. Docker编写错误:检查存储库是否包含有效的 docker-compose.yml
  4. 港口准入问题:确保ExpressRoute防火墙规则允许必要的端口

日志

通过检查部署日志 get_vm_status 工具或SSE事件以获取详细的错误信息。

贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 进行更改
  4. 如果适用,添加测试
  5. 提交拉取请求

许可证

MIT许可证-有关详细信息,请参阅许可证文件。