惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Microsoft Azure Blog
Microsoft Azure Blog
GbyAI
GbyAI
P
Proofpoint News Feed
Engineering at Meta
Engineering at Meta
Recent Announcements
Recent Announcements
L
LangChain Blog
B
Blog
阮一峰的网络日志
阮一峰的网络日志
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
M
MIT News - Artificial intelligence
D
Docker
WordPress大学
WordPress大学
J
Java Code Geeks
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
The GitHub Blog
The GitHub Blog
博客园 - 叶小钗
Last Week in AI
Last Week in AI
Stack Overflow Blog
Stack Overflow Blog
有赞技术团队
有赞技术团队
MyScale Blog
MyScale Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MongoDB | Blog
MongoDB | Blog
博客园 - Franky

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派
ComfyUI 如何部署 Docker 镜像到生产环境 - 少数派
2025-01-09 · via 少数派

大家好,我是白日梦想家 Nexmoe。近期,我将一套基于 Docker 打包的 ComfyUI 弹性 Serverless 应用进行了开源,该应用具备完整的前后端分离架构以及用户友好的界面。

在完成 ComfyUI 工作流的开发后,把它部署到生产环境是一件较为棘手的事情。因此,我开源了一套案例,以供大家学习参考。

Demo:https://hadoop.nexmoe.com/

开源地址:nexmoe/serverless-comfyui: 一个基于 Docker 的 ComfyUI 弹性 Serverless 应用,提供完整的前后端分离架构和用户友好的界面。

项目特点

  • 完整的 Docker 化部署方案
  • 现代化的前端界面
  • 模块化的后端架构
  • 简单的配置和使用方式

架构图

项目结构

comfy-docker/
├── frontend/           # Next.js 前端项目
│   ├── src/           # 源代码
│   └── .env          # 环境配置
├── backend/           # ComfyUI 后端
│   ├── checkpoints/   # 模型检查点
│   ├── controlnet/    # ControlNet 模型
│   ├── custom_nodes/  # 自定义节点
│   └── loras/        # LoRA 模型
└── bruno/            # API 测试文件

frontend/ 目录结构如下,模型 和 自定义节点 需要自行下载安装

.
├── Dockerfile
├── checkpoints
│   └── dreamshaperXL_sfwV2TurboDPMSDE.safetensors
├── controlnet
│   ├── sai_xl_canny_256lora.safetensors
│   └── sai_xl_depth_256lora.safetensors
├── custom_nodes
│   ├── ComfyUI-Custom-Scripts
│   ├── ComfyUI-WD14-Tagger
│   ├── ComfyUI_Comfyroll_CustomNodes
│   ├── comfyui-art-venture
│   └── comfyui_controlnet_aux
├── docker-compose.yml
├── loras
│   └── StudioGhibli.Redmond-StdGBRRedmAF-StudioGhibli.safetensors
├── provisioning.sh  // 自定义脚本
└── sanhua.json  // 工作流

环境要求

  • Docker & Docker Compose
  • NVIDIA GPU(当前演示工作流需要 12G 显存以上)
  • 足够的磁盘空间(100G~200G)用于存储模型

快速开始

后端本地测试

进入后端 Dockerfile 目录

cd backend

下载模型文件

请参考:https://gongjiyun.com/docs/tutorials/comfyui.html#%E4%B8%8B%E8%BD%BD%E6%A8%A1%E5%9E%8B%E5%92%8C%E6%89%A9%E5%B1%95

构建 Docker 镜像

docker build -t gongji/comfyui:0.1 .

运行 Docker 容器

docker run -it --rm --gpus all -p 3000:3000 -p 8188:8188 --name comfyui gongji/comfyui:0.1

容器启动后可以访问:

前端本地测试

进入前端目录

cd frontend

配置环境变量

cp .env.example .env

安装依赖并启动

pnpm install
pnpm dev

ComfyUI Docker 部署到 Serverless 弹性平台

请参考 共绩科技的 ComfyUI 部署文档

API 文档

项目使用 Bruno 进行 API 测试和文档管理,相关文件位于 bruno/ 目录。

ComfyUI API 调用示例

以下是调用 ComfyUI API 的示例代码(参考 frontend/src/app/api/route.ts):

async function generateImage(imageUrl: string) {
    // 1. 准备 prompt 数据
    const promptData = { ...promptob };  // 从 JSON 文件导入基础 prompt
    promptData.prompt["30"].inputs.image = imageUrl;  // 修改输入图片

    // 2. 设置请求选项
    const url = `${process.env.GONGJI_ENDPOINT}/prompt`;
    const options = {
        method: 'POST',
        headers: { 'content-type': 'application/json' },
        body: JSON.stringify(promptData)
    };

    // 3. 发送请求
    const response = await fetch(url, options);
    const data = await response.json();

    // 4. 错误处理
    if (response.status !== 200) {
        throw new Error(response.statusText);
    }

    // 5. 处理返回的图片数据
    if (data.images && data.images.length > 0) {
        return data.images[0];  // 返回 base64 格式的图片数据
    } else {
        throw new Error('没有返回有效的图片数据');
    }
}

环境变量配置

在使用 API 之前,确保配置以下环境变量:

GONGJI_ENDPOINT=your-comfyui-api-endpoint 
# ComfyUI API 端点

S3 配置说明

项目的图片上传功能需要配置 S3 存储服务。你可以使用 AWS S3 或其他兼容 S3 协议的对象存储服务(如 MinIO)。

frontend/.env 文件中配置以下环境变量:

S3_ENDPOINT=your-s3-endpoint
S3_ACCESS_KEY=your-access-key
S3_SECRET_KEY=your-secret-key
S3_BUCKET=your-bucket-name
S3_REGION=your-region

注意:

  • 确保创建的 bucket 具有适当的访问权限
  • 如果使用 MinIO,endpoint 应该是完整的 URL(例如:http://localhost:9000)
  • 使用 AWS S3 时,可以省略 endpoint 配置

贡献指南

欢迎提交 Issue 和 Pull Request!

许可证

MIT License