Zurück zu Fähigkeiten

setup-compose-stack

pjt222
Aktualisiert Yesterday
6 Ansichten
17
2
17
Auf GitHub ansehen
Dokumentationapi

Über

Diese Fähigkeit erstellt Docker Compose-Konfigurationen für gängige Multi-Service-Anwendungsmuster wie Web-Apps mit Datenbanken, Caches und Hintergrund-Workern. Sie implementiert produktionsreife Funktionen wie benannte Volumes, Health Checks, Abhängigkeitsmanagement und die Handhabung von Umgebungsvariablen. Entwickler sollten sie nutzen, um schnell reproduzierbare containerisierte Umgebungen für Entwicklungs-, Test- oder Bereitstellungsszenarien zu erstellen.

Schnellinstallation

Claude Code

Empfohlen
Primär
npx skills add pjt222/agent-almanac -a claude-code
Plugin-BefehlAlternativ
/plugin add https://github.com/pjt222/agent-almanac
Git CloneAlternativ
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/setup-compose-stack

Kopieren Sie diesen Befehl und fügen Sie ihn in Claude Code ein, um diese Fähigkeit zu installieren

Dokumentation

Set Up Compose Stack

Configure Docker Compose for multi-service stacks w/ DBs, caches, workers.

Use When

  • Web app + DB|cache
  • Dev env w/ multi services
  • Bg workers + API
  • Reproducible multi-service envs

In

  • Required: App service (lang, port, entry)
  • Required: Supporting services (DB, cache, queue)
  • Optional: Dev vs prod config
  • Optional: Existing Dockerfiles

Do

Step 1: Core Stack

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 starts all, app waits for healthy DB.

Step 2: Health Checks

Enable depends_on w/ condition: 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

Step 3: Networks

services:
  app:
    networks:
      - frontend
      - backend

  postgres:
    networks:
      - backend

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

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

Isolates DB from external; app bridges both.

Step 4: Env Vars

.env (git-ignored):

POSTGRES_PASSWORD=secure_password_here
APP_SECRET=your_secret_key

Reference:

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

.env.example (committed):

POSTGRES_PASSWORD=changeme
APP_SECRET=changeme

Step 5: Worker Services

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

Step 6: Profiles for Optional

services:
  app:
    # always starts
    build: .

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

  adminer:
    image: adminer
    ports:
      - "8080:8080"
    profiles:
      - dev
# Start core services only
docker compose up

# Start with dev tools
docker compose --profile dev up

Step 7: Override for Dev

docker-compose.override.yml auto-merged:

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

Step 8: Build + Run

# Build all images
docker compose build

# Start in background
docker compose up -d

# View logs
docker compose logs -f app

# Check service status
docker compose ps

# Stop and remove
docker compose down

# Stop and remove volumes (full reset)
docker compose down -v

→ All services start, health checks pass, app connects DB+cache.

If err: docker compose logs <service>. Common: port conflicts, missing env vars, health check timeouts.

Check

  • docker compose up starts w/o errs
  • Health checks pass DB+cache
  • App connects all deps
  • Named volumes persist across restarts
  • .env git-ignored; .env.example committed
  • docker compose down cleanly stops
  • Profiles separate dev from prod

Traps

  • No health checks: depends_on w/o condition: service_healthy only waits for container start, not ready.
  • Hardcoded pwds: .env|Docker secrets. Never commit pwds.
  • Volume mount overwrites: Mounting .:/app overwrites image's node_modules. Anonymous volume: /app/node_modules.
  • Port conflicts: docker compose ps + lsof -i :<port>.
  • version: key: Compose V2 ignores. Omit for modern.
  • WSL path issues: /mnt/c/... for Windows dirs from WSL.

  • setup-docker-compose — R-specific configs
  • create-dockerfile — write Dockerfile
  • create-multistage-dockerfile — optimized images
  • configure-nginx — add Nginx reverse proxy

GitHub Repository

pjt222/agent-almanac
Pfad: i18n/caveman-ultra/skills/setup-compose-stack
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

Verwandte Skills

railway-docs

Dokumentation

Diese Fähigkeit ruft aktuelle Railway-Dokumentation ab, um Fragen zu Funktionen, Funktionalität oder spezifischen Dokumentations-URLs zu beantworten. Sie stellt sicher, dass Entwickler genaue, aktuelle Informationen direkt aus den offiziellen Quellen von Railway erhalten. Nutzen Sie sie, wenn Nutzer fragen, wie Railway funktioniert oder auf Railway-Dokumentation verweisen.

Skill ansehen

n8n-code-python

Dokumentation

Dieses Claude Skill bietet fachkundige Anleitung zum Schreiben von Python-Code in n8n-Code-Nodes, insbesondere für die Verwendung der Python-Standardbibliothek und den Umgang mit n8ns spezieller Syntax wie `_input`, `_json` und `_node`. Es hilft Entwicklern, die Grenzen von Python innerhalb von n8n zu verstehen, empfiehlt JavaScript für die meisten Workflows und bietet gleichzeitig Python-Lösungen für spezifische Datenumwandlungsanforderungen.

Skill ansehen

archon

Dokumentation

Die Archon-Funktion bietet semantische Suche auf RAG-Basis und Projektmanagement über eine REST-API. Nutzen Sie sie für das Abfragen von Dokumentation, die Verwaltung hierarchischer Projekte/Aufgaben und die Durchführung von Wissenabruf mit Dokumenten-Upload-Fähigkeiten. Priorisieren Sie stets Archon zuerst bei der Suche in externer Dokumentation, bevor Sie andere Quellen verwenden.

Skill ansehen

n8n-code-javascript

Dokumentation

Diese Claude-Skill bietet fachkundige Anleitung für das Schreiben von JavaScript-Code in n8n-Code-Nodes. Sie behandelt wesentliche n8n-spezifische Syntax wie `$input`/`$json`-Variablen, HTTP-Helfer und DateTime-Verarbeitung und hilft bei der Fehlerbehebung häufiger Probleme. Nutzen Sie sie bei der Entwicklung von n8n-Workflows, die eine benutzerdefinierte JavaScript-Verarbeitung in Code-Nodes erfordern.

Skill ansehen