Nexmoe

Nexmoe

一个开发者。关于勇敢与热爱,互联网/创造/赛博朋克
twitter
github

ComfyUI を使用して Docker イメージを本番環境にデプロイする方法

皆さんこんにちは、私は白日梦想家 Nexmoe です。最近、Docker を基にした ComfyUI の弾性 Serverless アプリケーションをオープンソース化しました。このアプリケーションは、完全なフロントエンドとバックエンドの分離アーキテクチャとユーザーフレンドリーなインターフェースを備えています。

ComfyUI のワークフローの開発を完了した後、それを本番環境にデプロイするのは少し厄介なことです。そこで、皆さんが学ぶためのケーススタディをオープンソース化しました。

デモ:https://hadoop.nexmoe.com/
オープンソースアドレス:https://github.com/nexmoe/serverless-comfyui

プロジェクトの特徴#

  • 🐳 完全な Docker 化デプロイメントソリューション
  • 🎨 モダンなフロントエンドインターフェース
  • 🔌 モジュラーなバックエンドアーキテクチャ
  • 🛠 簡単な設定と使用方法

アーキテクチャ図#

Mermaid Loading...

プロジェクト構造#

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 以上の VRAM が必要)
  • モデルを保存するための十分なディスクスペース(100G〜200G)

クイックスタート#

バックエンドのローカルテスト#

  1. バックエンドの Dockerfile ディレクトリに移動
cd backend
  1. モデルファイルをダウンロード

参考にしてください: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

  1. Docker イメージをビルド
docker build -t gongji/comfyui:0.1 .
  1. Docker コンテナを実行
docker run -it --rm --gpus all -p 3000:3000 -p 8188:8188 --name comfyui gongji/comfyui:0.1

コンテナが起動した後、以下にアクセスできます:

フロントエンドのローカルテスト#

  1. フロントエンドディレクトリに移動
cd frontend
  1. 環境変数を設定
cp .env.example .env
# .envファイルを編集して必要な環境変数を設定
  1. 依存関係をインストールして起動
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. プロンプトデータを準備
    const promptData = { ...promptob };  // JSONファイルから基本プロンプトをインポート
    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('有効な画像データが返されませんでした');
    }
}

主要なステップの説明:

  1. プロンプトの準備

    • JSON ファイルから基本プロンプト設定をインポート
    • 必要に応じてプロンプト内のパラメータ(入力画像など)を変更
  2. リクエストの送信

    • POST メソッドを使用
    • Content-Type を application/json に設定
    • リクエストボディはシリアライズされたプロンプトデータ
  3. レスポンスの処理

    • レスポンスのステータスコードをチェック
    • 戻りの JSON データを解析
    • 生成された画像(base64 形式)を抽出
  4. エラーハンドリング

    • エラーログを記録
    • 適切なエラーメッセージをスロー

環境変数の設定#

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

注意:

  • 作成したバケットには適切なアクセス権限を設定してください
  • MinIO を使用する場合、エンドポイントは完全な URL である必要があります(例:http://localhost:9000)
  • AWS S3 を使用する場合、エンドポイントの設定は省略できます

貢献ガイドライン#

Issue や Pull Request の提出を歓迎します!

ライセンス#

MIT ライセンス

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。