MCP HubMCP Hub
Вернуться к навыкам

setup-compose-stack

pjt222
Обновлено 2 days ago
8 просмотров
17
2
17
Посмотреть на GitHub
Документацияapi

О программе

Этот навык Claude настраивает стеки Docker Compose для распространённых шаблонов многокомпонентных приложений, включая веб-приложения, базы данных, кэши и фоновые обработчики. Он управляет именованными томами, сетями, проверками работоспособности, зависимостями и конфигурацией окружения для создания воспроизводимых сред разработки. Используйте его, когда требуется оркестрировать связанные сервисы (например, API с обработчиками задач) или развернуть контейнеризированные среды для совместной работы команды.

Быстрая установка

Claude Code

Рекомендуется
Основной
npx skills add pjt222/agent-almanac -a claude-code
Команда плагинаАльтернативный
/plugin add https://github.com/pjt222/agent-almanac
Git клонированиеАльтернативный
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/setup-compose-stack

Скопируйте и вставьте эту команду в Claude Code для установки этого навыка

Документация


name: setup-compose-stack description: > 一般的なアプリケーションパターン用のDocker Composeスタックを設定する。Webアプリ + データベース + キャッシュ + ワーカーサービス、名前付きボリューム、ネットワーク、ヘルスチェック、depends_on、 環境管理、およびプロファイルをカバーする。データベースやキャッシュを伴うWebアプリの実行、 複数サービスの開発環境のセットアップ、APIと並行したバックグラウンドワーカーのオーケストレーション、 またはチーム間で再現可能なマルチサービス環境の構築に使用する。 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: containerization complexity: intermediate language: Docker tags: docker-compose, orchestration, postgres, redis, multi-service, health-checks locale: ja source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16

Composeスタックのセットアップ

データベース、キャッシュ、ワーカーを含むマルチサービスアプリケーションスタック用のDocker Composeを設定する。

使用タイミング

  • データベースやキャッシュを伴うWebアプリの実行
  • 複数サービスの開発環境のセットアップ
  • APIと並行したバックグラウンドワーカーのオーケストレーション
  • チーム間で再現可能なマルチサービス環境が必要な場合

入力

  • 必須: アプリケーションサービス(言語、ポート、エントリポイント)
  • 必須: 必要なサポートサービス(データベース、キャッシュ、キューなど)
  • 任意: 開発 vs 本番の設定
  • 任意: カスタムサービス用の既存Dockerfile

手順

ステップ1: コアスタックの定義

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgres://appuser:apppass@postgres:5432/appdb
      REDIS_URL: redis://redis:6379
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_started
    restart: unless-stopped

  postgres:
    image: postgres:16
    environment:
      POSTGRES_DB: appdb
      POSTGRES_USER: appuser
      POSTGRES_PASSWORD: apppass
    volumes:
      - pgdata:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U appuser -d appdb"]
      interval: 5s
      timeout: 5s
      retries: 5

  redis:
    image: redis:7-alpine
    ports:
      - "6379:6379"
    volumes:
      - redisdata:/data

volumes:
  pgdata:
  redisdata:

期待結果: docker compose upでアプリがデータベースの正常起動を待ってからすべてのサービスが起動する。

ステップ2: ヘルスチェックの追加

ヘルスチェックによりdepends_oncondition: service_healthyが使用可能になる:

services:
  postgres:
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U appuser -d appdb"]
      interval: 5s
      timeout: 5s
      retries: 5

  redis:
    healthcheck:
      test: ["CMD", "redis-cli", "ping"]
      interval: 5s
      timeout: 3s
      retries: 5

  app:
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
      interval: 10s
      timeout: 5s
      retries: 3
      start_period: 10s

ステップ3: ネットワークの設定

services:
  app:
    networks:
      - frontend
      - backend

  postgres:
    networks:
      - backend

  nginx:
    networks:
      - frontend
    ports:
      - "80:80"

networks:
  frontend:
    driver: bridge
  backend:
    driver: bridge

これによりデータベースが直接外部アクセスから分離され、アプリが両方のネットワークをブリッジする。

ステップ4: 環境変数の管理

.envファイル(git-ignored)を作成する:

POSTGRES_PASSWORD=secure_password_here
APP_SECRET=your_secret_key

composeで参照する:

services:
  postgres:
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
  app:
    env_file:
      - .env

.env.example(gitにコミット)を作成する:

POSTGRES_PASSWORD=changeme
APP_SECRET=changeme

ステップ5: ワーカーサービスの追加

services:
  worker:
    build:
      context: .
      dockerfile: Dockerfile
    command: ["node", "src/worker.js"]
    environment:
      DATABASE_URL: postgres://appuser:apppass@postgres:5432/appdb
      REDIS_URL: redis://redis:6379
    depends_on:
      postgres:
        condition: service_healthy
      redis:
        condition: service_started
    restart: unless-stopped
    deploy:
      replicas: 2

ステップ6: オプションサービスにプロファイルを使用

services:
  app:
    # 常に起動する
    build: .

  mailhog:
    image: mailhog/mailhog
    ports:
      - "8025:8025"
    profiles:
      - dev

  adminer:
    image: adminer
    ports:
      - "8080:8080"
    profiles:
      - dev
# コアサービスのみ起動
docker compose up

# 開発ツール付きで起動
docker compose --profile dev up

ステップ7: 開発用オーバーライドの作成

docker-compose.override.ymlは自動的にマージされる:

services:
  app:
    build:
      target: dev
    volumes:
      - .:/app
      - /app/node_modules
    environment:
      NODE_ENV: development
      DEBUG: "app:*"
    command: ["npm", "run", "dev"]

ステップ8: ビルドと実行

# すべてのイメージをビルド
docker compose build

# バックグラウンドで起動
docker compose up -d

# ログの表示
docker compose logs -f app

# サービスステータスの確認
docker compose ps

# 停止と削除
docker compose down

# 停止とボリューム削除(完全リセット)
docker compose down -v

期待結果: すべてのサービスが起動し、ヘルスチェックが通り、アプリがデータベースとキャッシュに接続する。

失敗時: docker compose logs <service>を確認する。よくある問題: ポートの競合、環境変数の不足、ヘルスチェックのタイムアウト。

バリデーション

  • docker compose upがエラーなくすべてのサービスを起動する
  • データベースとキャッシュのヘルスチェックが通る
  • アプリケーションがすべての依存サービスに接続する
  • 名前付きボリュームが再起動間でデータを永続化する
  • .envがgit-ignoredされ、.env.exampleがコミットされている
  • docker compose downがすべてを正常に停止する
  • プロファイルが開発ツールと本番サービスを分離する

よくある落とし穴

  • ヘルスチェックなし: condition: service_healthyなしのdepends_onはコンテナの起動のみを待ち、準備完了は待たない
  • composeにハードコードされたパスワード: .envファイルまたはDockerシークレットを使用する。パスワードをコミットしない
  • ボリュームマウントの上書き: .:/appのマウントがイメージ内でビルドされたnode_modulesを上書きする。匿名ボリュームを使用する: /app/node_modules
  • ポートの競合: docker compose pslsof -i :<port>で競合を確認する
  • version:キー: Compose V2はversion:キーを無視する。最新のセットアップでは省略する
  • WSLパスの問題: WSLからWindowsディレクトリをマウントする場合は/mnt/c/...パスを使用する

関連スキル

  • setup-docker-compose - R固有のDocker Compose設定
  • create-dockerfile - composeが参照するDockerfileの作成
  • create-multistage-dockerfile - スタック用に最適化されたイメージのビルド
  • configure-nginx - スタックにNginxリバースプロキシを追加

GitHub репозиторий

pjt222/agent-almanac
Путь: i18n/ja/skills/setup-compose-stack
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Похожие навыки

railway-docs

Документация

Этот навык получает актуальную документацию Railway, чтобы отвечать на вопросы о функциях, возможностях или конкретных URL-адресах документации. Он гарантирует, что разработчики получают точную и современную информацию напрямую из официальных источников Railway. Используйте его, когда пользователи спрашивают, как работает Railway, или ссылаются на документацию Railway.

Просмотреть навык

n8n-code-python

Документация

Этот навык Claude предоставляет экспертные рекомендации по написанию кода Python в узлах Code платформы n8n, в частности, по использованию стандартной библиотеки Python и работе со специальным синтаксисом n8n, таким как `_input`, `_json` и `_node`. Он помогает разработчикам понять ограничения Python в среде n8n и рекомендует использовать JavaScript для большинства рабочих процессов, предлагая решения на Python для конкретных задач по преобразованию данных.

Просмотреть навык

archon

Документация

Навык Archon предоставляет семантический поиск на основе RAG и управление проектами через REST API. Используйте его для запросов к документации, управления иерархическими проектами/задачами и выполнения поиска информации с возможностью загрузки документов. Всегда в первую очередь обращайтесь к Archon при поиске во внешней документации, прежде чем использовать другие источники.

Просмотреть навык

n8n-code-javascript

Документация

Этот навык Claude предоставляет экспертные рекомендации по написанию кода JavaScript в узлах Code платформы n8n. Он охватывает важный синтаксис, специфичный для n8n, включая переменные `$input`/`$json`, HTTP-хелперы и работу с DateTime, а также помогает в устранении распространённых ошибок. Используйте его при разработке рабочих процессов в n8n, требующих кастомной обработки JavaScript в узлах Code.

Просмотреть навык