setup-compose-stack
について
このスキルは、データベース、キャッシュ、バックグラウンドワーカーを備えたウェブアプリケーションなど、一般的なマルチサービスアプリケーションパターン向けのDocker Compose構成を生成します。名前付きボリューム、ヘルスチェック、依存関係管理、環境変数処理といった本番環境対応の機能を実装しています。開発者はこれを使用して、開発、テスト、またはデプロイメントシナリオ向けの再現可能なコンテナ化環境を迅速に作成できます。
クイックインストール
Claude Code
推奨npx skills add pjt222/agent-almanac -a claude-code/plugin add https://github.com/pjt222/agent-almanacgit clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/setup-compose-stackこのコマンドをClaude Codeにコピー&ペーストしてスキルをインストールします
ドキュメント
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 upstarts w/o errs - Health checks pass DB+cache
- App connects all deps
- Named volumes persist across restarts
-
.envgit-ignored;.env.examplecommitted -
docker compose downcleanly stops - Profiles separate dev from prod
Traps
- No health checks:
depends_onw/ocondition: service_healthyonly waits for container start, not ready. - Hardcoded pwds:
.env|Docker secrets. Never commit pwds. - Volume mount overwrites: Mounting
.:/appoverwrites image'snode_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 configscreate-dockerfile— write Dockerfilecreate-multistage-dockerfile— optimized imagesconfigure-nginx— add Nginx reverse proxy
GitHub リポジトリ
関連スキル
railway-docs
ドキュメントこのスキルは、Railwayの機能や仕様、特定のドキュメントURLに関する質問に答えるために、最新のRailwayドキュメントを取得します。開発者がRailwayの公式情報源から正確かつ最新の情報を直接受け取れるようにします。ユーザーがRailwayの動作方法について尋ねたり、Railwayドキュメントを参照する際にご利用ください。
n8n-code-python
ドキュメントこのClaudeスキルは、n8nのコードノードでPythonコードを記述するための専門的なガイダンスを提供します。具体的には、Pythonの標準ライブラリの使用方法や、`_input`、`_json`、`_node`といったn8n独自の構文の扱い方を解説します。n8n環境内におけるPythonの制限事項を開発者が理解できるよう支援し、ほとんどのワークフローではJavaScriptの使用を推奨しながらも、特定のデータ変換ニーズに対応するPythonソリューションを提案します。
archon
ドキュメントArchonスキルは、RAGを活用したセマンティック検索とプロジェクト管理をREST APIを通じて提供します。ドキュメントの検索、階層的なプロジェクト/タスクの管理、ドキュメントアップロード機能を備えたナレッジ検索の実行にご利用いただけます。外部ドキュメントを検索する際は、他の情報源を利用する前に常にArchonを最優先で使用してください。
n8n-code-javascript
ドキュメントこのClaudeスキルは、n8nのCodeノードでJavaScriptコードを書くための専門的なガイダンスを提供します。`$input`/`$json`変数、HTTPヘルパー、DateTime処理などの重要なn8n固有の構文を網羅し、一般的なエラーのトラブルシューティングも行います。CodeノードでカスタムJavaScript処理を必要とするn8nワークフローを開発する際にご利用ください。
