AI图像生成服务器

一个基于ComfyUI的分布式AI图像生成服务,支持多种AI生成功能,包括文本到图像、图像到图像转换、风格迁移、语音合成等,适用于创意设计和内容生成。

  • by Peleke
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 Peleke/comfyui-mcp

使用说明

ComfyUI MCP服务器

是的,此图像是由该工具生成的。是的,我们知道人工智能艺术充其量是道德上的问题,最坏的情况下是真正危险的。我们建立这个是为了内部资产生成,而不是为了取代艺术家。负责任地使用或根本不使用。


当你的Mac渲染黑色帧时,你会学习如何分布。

我希望Claude通过我本地的ComfyUI设置生成图像。Ran Sonic。10秒的纯黑色画面。GPU无法跟上。

所以我分发了它。

MCP服务器在Fly.io-static上运行,自动缩放。GPU计算在RunPod上运行,按秒付费。生成的资产与签名的URL一起进入Supabase。Tailscale将它们安全地连接在一起。最初的“让我生成一些图像”变成了一个生产分布式系统,因为另一种选择是一个什么都不输出的空间加热器。

现在,Claude可以生成图像,对其进行升级,运行ControlNet管道,进行智能修复/外绘,使用IP适配器传输样式,合成语音,并创建唇同步的说话头视频——所有这些都是通过自然对话完成的。 40个工具。796次测试。不收取API费用。全参数控制。

You: "Generate a cyberpunk cityscape at sunset and save it to ./assets/hero.png"

Claude: I'll generate that image for you.
        [Calls generate_image with prompt, saves to ./assets/hero.png]
        Done! The cyberpunk cityscape has been saved to ./assets/hero.png

特性

  • 想象工具:终极生成工具——用自然语言描述你想要什么,并通过自动检测模型设置获得优化结果
  • 智能提示:根据您的模型自动生成优化提示(Illustrious、Pony、Flux、SDXL、Realistic、SD1.5)
  • 管道执行:链txt2img→ 嗨,修复→ 在一个命令中升级
  • 质量预设:从“草稿”(快速)到“超级”(升级后的完整管道)
  • 文本到图像:通过完全参数控制从文本提示生成图像
  • 图像到图像:使用AI引导转换现有图像
  • AI升级:使用RealESRGAN和其他型号提高分辨率
  • LoRA支持:应用具有可调权重的自定义样式和角色LoRA
  • 控制网:使用边缘检测、深度图、姿势等生成引导
  • IP适配器:从参考图像转换风格和构图
  • 修复:有选择地重新生成遮罩区域,同时保留上下文
  • 外绘:通过连贯的AI生成在任何方向上扩展画布
  • 智能口罩:使用GroundingDINO+SAM分割自动生成掩码
  • 文本转语音:从短音频样本中克隆F5-TTS语音
  • 嘴唇同步视频:使用SONIC制作会说话的头部视频
  • 肖像一代:多后端化身创建(SDXL、Flux GGUF、Flux FP8)
  • 模型发现:列出可用的检查点、LoRA、采样器和调度器
  • 队列监视:检查生成状态和待处理作业

先决条件

  • Comfy用户界面 在本地运行
  • Node.js 20+
  • 至少一个稳定扩散检查点模型

必需的自定义节点

某些功能需要额外的ComfyUI自定义节点。通过ComfyUI管理器或手动安装这些:

功能 必需节点 存储库
IP适配器(样式转换) ComfyUI_IPAdapter_plus cubiq/ComfyUI_IPA适配器+
ControlNet预处理 comfyui_ControlNet_aux Fannovel16/comfyui_controlnet_aux
智能口罩(SAM) comfyui_segment_anything 故事/喜剧_片段_任何东西
文本检测(GroundingDINO) ComfyUI接地DINO IDEA研究/扎根迪诺
唇同步(SONIC) 康菲优伊SONIC smthemex/ComfyUI索尼
TTS(F5-TTS) ComfyUI-F5-TTS 超杰/康富友-F5-TTS

使用ComfyUI管理器快速安装:

  1. 打开ComfyUI web界面
  2. 点击“管理器”按钮
  3. 搜索节点名称并安装
  4. 重新启动ComfyUI

核心功能 (txt2img、img2img、升级、基本ControlNet)无需任何自定义节点即可工作。

快速开始

选项A:从npm安装(推荐)

npx @peleke.s/comfyui-mcp

添加 ~/.claude/settings.json (全球)或 .claude/settings.local.json (项目特定):

{
  "mcpServers": {
    "comfyui": {
      "command": "npx",
      "args": ["-y", "@peleke.s/comfyui-mcp"],
      "env": {
        "COMFYUI_URL": "http://localhost:8188",
        "COMFYUI_MODEL": "dreamshaper_8.safetensors"
      }
    }
  }
}

选项B:从源代码运行

git clone https://github.com/Peleke/comfyui-mcp.git
cd comfyui-mcp
npm install
npm run build
{
  "mcpServers": {
    "comfyui": {
      "command": "node",
      "args": ["/absolute/path/to/comfyui-mcp/dist/index.js"],
      "env": {
        "COMFYUI_URL": "http://localhost:8188",
        "COMFYUI_MODEL": "dreamshaper_8.safetensors"
      }
    }
  }
}

启动ComfyUI

确保ComfyUI正在配置的URL上运行(默认值:http://localhost:8188).

重新启动Claude代码

重要:Claude Code在启动时加载MCP服务器。添加配置后,您必须重新启动Claude Code(退出并重新启动)。

生成图像

"Generate a portrait with warm lighting and save it to ./images/portrait.png"

可用工具

generate_image

从文本提示(txt2img)生成图像。

参数 类型 默认值 说明
prompt string required 要生成什么
negative_prompt string “质量差,模糊” 要避免什么
width number 512 图像宽度(像素)
height number 768 图像高度(像素)
步骤 数量 28 采样步骤
cfg_scale number 7 无分类器引导量表
采样器 字符串 “euler_ancestral” 采样算法
调度器 字符串 “正常” 噪声调度器
model string 环境默认值 检查点模型名称
种子 数量 随机 重复性随机种子
loras array none 要应用的LoRA(见下文)
output_path string required 保存图像的位置
upload_to_cloud bool true 上传到云存储并返回签名的URL

退货: { success, path, remote_url?, seed, message }

当 upload_to_cloud 为真,并且配置了云存储, remote_url 包含一个有效期为1小时的签名URL。

LoRA格式:

{
  "name": "style_lora.safetensors",
  "strength_model": 0.8,
  "strength_clip": 0.8
}

img2img

使用AI引导转换现有图像。

参数 类型 默认值 说明
prompt string required 要生成什么
input_image string 必填 ComfyUI输入文件夹中的文件名
降噪 数字 0.75 0.0=无变化,1.0=完全再生
output_path string required 保存结果的位置
(加上所有txt2img参数)

upscale_image

使用AI升级模型来升级图像。

参数 类型 默认值 说明
input_image string 必填 ComfyUI输入文件夹中的文件名
upscale_model string “RealESRGAN_x4plus.pth” 升级模型
target_width number native 可选调整宽度
target_height number native 可选调整高度
output_path string required 保存结果的位置

发现工具

工具 说明
list_models 可用检查点模型
list_loras 可用的LoRA适配器
list_samplers 采样算法(欧拉、dpm++等)
list_schedulers 噪声调度器(正常、karras等)
list_upscale_models 升级模型(RealESRGAN等)
get_queue_status 正在运行和挂起的作业

想象(推荐)

生成图像的最简单方法。 用自然语言描述你想要什么,它可以处理一切:自动检测你的模型系列,制作优化的提示,应用质量预设,并运行整个流程。

参数 类型 默认值 说明
description string 必填 生成内容的自然语言描述
output_path string required 保存最终图像的位置
model string env默认值 检查点模型(如果未设置,则自动检测)
model_family string auto “杰出”、“小马”、“通量”、“sdxl”、“现实”、“sd 15”
风格 字符串 无 “动漫”、“电影”、“肖像”、“风景”等。
artist_reference string none 艺术家风格,例如“吉卜力工作室”
质量 字符串 “标准” “草稿”、“标准”、“高”、“超”
loras 阵列 无 要应用的LoRA
种子 数量 随机 用于再现性
upload_to_cloud bool true 上传到云端并返回签名的URL

退货: { success, imagePath, remote_url?, seed, prompt, modelFamily, pipelineSteps, settings, message }

质量预设:

  • draft:快速生成,仅限txt2img
  • standard:平衡质量(默认)
  • high:包括高分辨率修复通行证
  • ultra:高分辨率修复+升级的完整管道

execute_pipeline

运行多步骤生成管道:txt2img→ 嗨,修复→ 高档。

参数 类型 默认值 说明
prompt string 必填 正提示
model string 必填 检查点模型
output_path string 必填 最终输出位置
enable_hires_fix bool false 添加img2img细化过程
hires_denoise number 0.4 高分辨率降噪(建议0.3-0.5)
enable_upscale bool false 添加AI升级步骤
(加上所有txt2img参数)

工艺品_礼品

根据自然描述生成优化的提示。当您想在生成之前查看/编辑提示时很有用。

参数 类型 默认值 说明
description string 必填 自然语言描述
model_name string none 用于自动检测模型族
model_family string auto 显式族覆盖
style string none 要应用的样式预设
rating string “安全” 内容评级(适用于小马模型)

返回:优化的正面提示、负面提示、推荐设置、LoRA建议。

获取购买指南

获取特定模型族的提示和示例提示。

参数 类型 必填 说明
model_family string yes “杰出”、“小马”、“通量”等。

列表_购买_策略

列出所有支持的模型族及其提示特征。

ControlNet工具

使用参考图像的结构信息指导图像生成。

工具 说明
generate_with_controlnet 单控制网络调节(cany、深度、姿势等)
generate_with_multi_controlnet 组合多个controlnet条件
预处理_控制_图像 预览控制信号(边缘图、骨架等)
generate_with_hidden_image 使用二维码ControlNet嵌入隐藏图像
style_photo 将照片转换为艺术风格(动漫、油画)
generate_with_pose 使用OpenPose从引用中复制精确的姿势
generate_with_composity 使用语义分割匹配布局/组合
list_controlnet_models 按类型列出可用的controlnet模型

支持的控件类型: canny, depth, openpose, qrcode, scribble, lineart, semantic_seg

IP适配器

从参考图像中转移风格、构图或人物肖像。

要求: ComfyUI_IPA适配器+ 自定义节点

参数 类型 默认值 说明
prompt string 必填 生成文本提示
reference_image string 必填 参考图像文件名
影响力 字符串 “平衡” “微妙”、“平衡”、“强大”、“主导”
transfer_type string “style” “style、组成”、“face”
output_path string required 保存结果的位置

内涂和补漆

有选择地编辑图像区域或扩展画布边界。

工具 说明
inpaint 重新生成蒙版区域(白色=重新生成,黑色=保留)
outpaint 使用AI生成的内容在任何方向上扩展画布
create_mask 使用AI分割或手动区域生成掩码

输入参数:

参数 类型 默认值 说明
prompt string required 在掩码区域生成什么
source_image string 必填 源图像文件名
mask_image string required 蒙版图像(白色=inpaint)
denoise_strength number 0.75 0.0=无变化,1.0=完全再生
output_path string required 保存结果的位置

外涂参数:

参数 类型 默认值 说明
prompt string required 在扩展区域中生成什么
source_image string 必填 源图像文件名
extend_left/right/top/bott 数字 0 要扩展的像素
羽化 数字 40 边缘混合(像素)
output_path string required 保存结果的位置

create_mask参数:

参数 类型 默认值 说明
source_image string 必填 要从中创建掩码的图像
预设 字符串 无 “手”、“脸”、“眼睛”、“身体”、“背景”、“前景”
text_prompt string none 自定义检测(“红衫军”、“猫”)
region object none 手动{x,y,宽度,高度}百分比
expand_pixels number 0 向外扩展掩码
feather_pixels 数量 0 模糊蒙版边缘
invest bool false 切换白/黑
output_path string required 掩码保存位置

文本转语音(F5-TTS)

从短参考音频中克隆语音生成语音。

工具 说明
tts_generate 从克隆语音的文本生成语音
list_tts_models 可用的tts型号
list_voices 可用语音样本

tts_generate参数:

参数 类型 默认值 说明
text string 必填 要说话的文本
voice_reference string 必填 用于语音克隆的参考音频
voice_reference_text string none 引用的转录(提高质量)
速度 数量 1.0 语音速度(0.5-2.0)
output_path string 必填 保存音频的位置

嘴唇同步视频

从肖像和音频中创建会说话的头部视频。

工具 说明
lipsync_generate 从图像+音频生成唇形同步视频
talk 完整管道:文本→ TTS → 对口形→ 视频
list_lipsync_models 可用唇同步型号
list_avatars 输入/头像中的肖像图像/
list_voices_catalog 带元数据的语音样本

肖像一代

生成针对唇形同步和化身使用进行优化的AI肖像。

工具 说明
create_portrait 带样式/表情控制的单幅肖像
batch_create_portraits 批量生成多幅肖像

后端选项: sdxl (检查点), flux_gguf (量化), flux_fp8 (完全精确)

健康与诊断

工具 说明
check_connection 使用GPU信息和延迟进行全面健康检查
ping_confyui 快速连接检查

用法示例

使用Imagine(推荐)

"Imagine a cozy coffee shop with warm lighting and plants,
save to ./assets/coffee_shop.png with high quality"
"Create an anime-style portrait of a warrior princess in a
fantasy setting, style: anime, quality: ultra"
"Generate a professional product photo of a sneaker on white
background using my realistic model, artist reference: apple product photography"

基础世代

"Generate a mountain landscape at golden hour, save to ./assets/landscape.png"

使用LoRA

"Create an anime-style portrait using the animeStyle.safetensors LoRA
at 0.8 strength, save to ./output/anime_portrait.png"

图像变换

"Take the sketch in ComfyUI's input folder called sketch.png and turn
it into a detailed illustration with 0.7 denoise"

升级

"Upscale hero.png to 4K using RealESRGAN"

批处理工作流

"Generate 3 variations of a forest scene with different lighting:
1. Misty morning
2. Harsh noon sun
3. Sunset through trees
Save them to ./scenes/forest_*.png"

建筑

┌─────────────┐     MCP Protocol    ┌─────────────┐     REST/WS     ┌──────────┐
│   Claude    │ ◄─────────────────► │  MCP Server │ ◄─────────────► │ ComfyUI  │
│   (Client)  │    Tool Calls       │  (Bridge)   │   Workflows     │  (API)   │
└─────────────┘                     └─────────────┘                 └──────────┘

MCP服务器:

  1. 向AI客户端公开工具
  2. 接收带有参数的请求
  3. 构建ComfyUI工作流程JSON
  4. 通过REST API排队工作流
  5. 通过WebSocket监控进度
  6. 检索并保存生成的图像

ComfyUI工作流如何工作

ComfyUI将图像生成表示为节点图。每个节点执行一个操作:

CheckpointLoader → CLIPTextEncode → KSampler → VAEDecode → SaveImage
       ↓                                ↑
    LoraLoader(s) ──────────────────────┘

我们的服务器根据您的参数动态构建这些图。当您指定LoRA时,我们将LoraLoader节点注入链中。工作流以JSON格式提交给ComfyUI /prompt 终点。

为什么这个架构

这里的一些决定不是来自人工智能,而是来自对大规模破坏的了解:

  • 分布式速率限制(Uptash Redis):当您有多个Fly.io实例时,内存中的速率限制器会失败。滑动窗口算法,基于分层的限制,通过IP回退的API密钥。
  • Quirrel用于长时间运行的作业:Fly.io有连接限制(25个硬连接,20个软连接)。肖像生成、TTS和lipsync在作业队列中异步运行。否则,HTTP超时会终止请求。
  • 存储抽象层:单接口,三种实现(Supabase、GCP、local)。使用环境变量交换提供程序。没有供应商锁定。
  • 尾鳞片网:RunPod URL是公开的。Tailscale在Fly.io和GPU节点之间添加了一个安全层。
  • 激励策略模式:Illustrious想要标签,Flux想要自然语言,Pony需要分数标签。六个模型系列,六种策略,从检查点名称自动检测。另一种选择是无法维护的意大利面条。

AI建议“在本地使用Playwright”实现浏览器自动化。在分布式环境中,这根本不合理。知道 当 分配事务。

环境变量

核心

变量 默认值 描述
计算机URL http://localhost:8188 令人欣慰的API终点
COMFYUI_MODEL (无) 默认检查点模型
COMFYUI_OUTPUT_DIR /tmp/COMFYUI输出 回退输出目录

云存储(可选)

变量 默认值 描述
STORAGE_PROVIDER (无) 设置为“suabase”以启用云上传
SUPABASE_URL (无) 您的SUPABASE项目URL
SUPABASE_SECRET_KEY (无) SUPABASE服务角色密钥(sb_SECRET_…)
SUPABASE_BUCKET 生成的资产 存储桶名称

HTTP服务器

变量 默认值 描述
端口 3001 HTTP服务器端口
NODE_ENV 开发 设置为Fly.io的“生产”

项目结构

comfyui-mcp/
├── src/
│   ├── index.ts              # MCP server entry point (40 tools)
│   ├── comfyui-client.ts     # ComfyUI REST/WebSocket client
│   ├── workflows/
│   │   ├── txt2img.json      # Text-to-image template
│   │   ├── img2img.json      # Image-to-image template
│   │   ├── upscale.json      # Upscaling template
│   │   ├── inpaint.json      # Inpainting template
│   │   ├── outpaint.json     # Outpainting template
│   │   └── builder.ts        # Workflow parameterization & LoRA injection
│   ├── prompting/            # Smart prompt generation system
│   │   ├── generator.ts      # Main PromptGenerator class
│   │   ├── model-detection.ts# Auto-detect model family
│   │   └── strategies/       # Per-model prompting strategies
│   ├── storage/              # Cloud storage abstraction
│   │   ├── index.ts          # Provider factory
│   │   └── supabase.ts       # Supabase implementation
│   └── tools/
│       ├── imagine.ts        # Main generation tool
│       ├── pipeline.ts       # Multi-step pipeline executor
│       ├── controlnet.ts     # ControlNet tools
│       ├── ipadapter.ts      # IP-Adapter style transfer
│       ├── inpaint.ts        # Inpaint/outpaint/mask tools
│       ├── tts.ts            # Text-to-speech (F5-TTS)
│       ├── lipsync.ts        # Lip-sync video generation
│       ├── avatar.ts         # Portrait generation
│       └── health.ts         # Connection diagnostics
├── deploy/                   # RunPod deployment
│   ├── serverless/           # Serverless handler
│   ├── terraform/            # Infrastructure as code
│   └── scripts/              # Deployment utilities
├── buildlog/                 # Development journal
├── .github/workflows/        # CI/CD pipelines
├── vitest.config.ts          # Test configuration
├── BUILD_JOURNAL.md          # Feature narratives
└── README.md

发展

# Install dependencies
npm install

# Run in development mode
npm run dev

# Build for production
npm run build

# Run production build
npm start

# Run tests
npm test

# Run tests in watch mode
npm run test:watch

# Run tests with coverage
npm run test:coverage

796次测试 涵盖所有工具、提示策略、存储提供商和管道执行。

故障排除

Claude代码中未显示工具

  1. 确保在添加MCP配置后重新启动了Claude Code
  2. 验证服务器是否手动启动: npx @peleke.s/comfyui-mcp (应打印“ComfyUI MCP服务器在stdio上运行”)
  3. 尝试杀死所有Claude Code实例并重新启动

“连接被拒绝”

确保ComfyUI正在配置的ComfyUI_URL上运行。

“找不到模型”

跑 list_models 查看可用的检查点。模型名称必须完全匹配,包括文件扩展名。

“输出中没有图像”

检查ComfyUI的web界面是否存在工作流错误。排队提示可能因缺少节点或参数无效而失败。

“节点不存在”错误

某些功能需要自定义节点。如果您看到以下错误 IPAdapterModelLoader does not exist 或 DWPreprocessor does not exist,安装所需的自定义节点(请参阅先决条件部分)。

缓慢的一代

生成时间取决于硬件、型号大小和步数。减少步骤以加快草稿速度。

LoRA不适用

使用验证LoRA文件名 list_loras确保强度值合理(通常为0.5-1.2)。

延伸

代码库是为扩展而设计的:

  • 视频生成:ComfyUI支持AnimateDiff——适用相同的工作流模式
  • 自定义节点:任何ComfyUI自定义节点都可以集成到工作流模板中
  • 新车型系列:在中添加提示策略 src/prompting/strategies/
  • 附加后端:通过新型号后端扩展肖像生成

云部署

架构概述

flowchart TB
    subgraph Client["Client Layer"]
        CC[Claude Code<br/>MCP Client]
        WEB[Web App<br/>landline-landing]
    end

    subgraph Service["Service Layer (Fly.io)"]
        MCP[comfyui-mcp<br/>MCP Server]
        HTTP[HTTP Server<br/>REST API]
    end

    subgraph GPU["GPU Layer (RunPod)"]
        COMFY[ComfyUI<br/>RTX 4090]
    end

    subgraph Storage["Storage Layer (Supabase)"]
        BUCKET[Storage Bucket<br/>generated-assets]
        SIGNED[Signed URLs<br/>1hr expiry]
    end

    CC -->|MCP Protocol| MCP
    WEB -->|HTTPS REST| HTTP
    MCP -->|Proxy URL| COMFY
    HTTP -->|Proxy URL| COMFY
    MCP -->|Upload| BUCKET
    HTTP -->|Upload| BUCKET
    BUCKET -->|Generate| SIGNED
    SIGNED -->|View in Browser| WEB
    SIGNED -->|View in Browser| CC

运作原理

  1. 客户端请求:Claude Code(通过MCP)或web应用程序(通过HTTP)发送生成请求
  2. 服务处理:该服务构建ComfyUI工作流并将其排队
  3. GPU执行:RunPod在租用的GPU(RTX 4090)上执行工作流
  4. 云存储:结果上传到Supabase存储
  5. 已签名的URL:返回一个1小时的签名URL以供安全浏览器查看

RunPod设置

没有本地GPU?在RunPod上运行ComfyUI并远程连接。

  1. 使用PyTorch模板创建RunPod pod
  2. SSH进入并运行:
curl -fsSL https://raw.githubusercontent.com/Peleke/comfyui-mcp/main/deploy/quick-deploy.sh | bash -s -- --dreamshaper
  1. 获取您的pod URL: https://<POD_ID>-8188.proxy.runpod.net
  2. 本地配置:
./deploy/scripts/configure-local.sh https://<POD_ID>-8188.proxy.runpod.net

看 部署/README.md 详细说明。

云存储(Supabase)

生成的图像可以自动上传到Supabase Storage,并带有签名的URL,以便安全共享。

设置:

  1. 创建Supabase项目
  2. 创建一个名为的存储桶 generated-assets
  3. 添加RLS策略: true (或 auth.role() = 'service_role' 用于受限访问)
  4. 设置环境变量(见下文)

用途:

  • MCP工具(imagine, generate_image)包括 upload_to_cloud: true 默认情况下
  • 结果包括a remote_url 带有1小时签名URL的字段
  • URL可以直接在浏览器中打开查看

HTTP服务器(Web集成)

对于不能直接使用MCP的web应用程序,可以使用HTTP服务器:

# Start the HTTP server
npm run serve
# or
node dist/http-server.js

终点:

端点 方法 描述
/health GET 使用GPU信息进行健康检查
/imagine POST 自然语言图像生成
/image POST 直接生成txt2img
/portrait POST 人工智能肖像生成
/tts POST 使用F5-TTS进行文本转语音
/lipsync POST 与MuseTalk进行视频唇形同步

例子:

curl -X POST https://your-service.fly.dev/imagine \
  -H "Content-Type: application/json" \
  -d '{
    "description": "A cyberpunk cityscape at sunset",
    "output_path": "/tmp/cyberpunk.png"
  }'

# Response:
{
  "success": true,
  "imagePath": "/tmp/cyberpunk.png",
  "signedUrl": "https://xxx.supabase.co/storage/v1/object/sign/...",
  "seed": 1234567890,
  "message": "✨ Image generated successfully!"
}

Fly.io部署

将HTTP服务器部署到Fly.io以进行生产web集成:

# Install flyctl
curl -L https://fly.io/install.sh | sh

# Deploy
fly launch
fly secrets set \
  COMFYUI_URL="https://<POD_ID>-8188.proxy.runpod.net" \
  COMFYUI_MODEL="novaFurryXL.safetensors" \
  SUPABASE_URL="https://xxx.supabase.co" \
  SUPABASE_SECRET_KEY="sb_secret_xxx" \
  SUPABASE_BUCKET="generated-assets" \
  STORAGE_PROVIDER="supabase"

fly deploy

相关

许可证

麻省理工学院


完整教程:参见 文章.md 了解从头开始构建此服务器的详细演练,包括架构决策和实现细节。