Writing Skills
writing-skills
效率与协作技能,来自 obra/superpowers,查看原文获取完整用途和操作说明。
setup-compose-stack【部署与运维】Configure general-purpose Docker Compose stacks for common application patterns. Covers web app + database + cache + worker services, named volumes, networks, health checks, depends_on, environment management, and profiles. Use when running a web app with a database or cache, setting up a development environment with multiple services, orchestrating …
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
為含資料庫、快取與工作者之多服務應用堆疊配置 Docker Compose。
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 啟動所有服務,應用等待健康之資料庫。
健康檢查啟用 depends_on 之 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
services:
app:
networks:
- frontend
- backend
postgres:
networks:
- backend
nginx:
networks:
- frontend
ports:
- "80:80"
networks:
frontend:
driver: bridge
backend:
driver: bridge
此將資料庫與直接外部存取隔離,而應用橋接兩網路。
建立 .env 文件(git 已忽略):
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
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
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
docker-compose.override.yml 自動合併:
services:
app:
build:
target: dev
volumes:
- .:/app
- /app/node_modules
environment:
NODE_ENV: development
DEBUG: "app:*"
command: ["npm", "run", "dev"]
# 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
預期: 所有服務啟動、健康檢查通過、應用連接至資料庫與快取。
失敗時: 檢查 docker compose logs <service>。常見問題:連接埠衝突、缺環境變數、健康檢查超時。
docker compose up 無錯啟動所有服務.env 已 git 忽略;.env.example 已提交docker compose down 乾淨停止所有condition: service_healthy 之 depends_on 僅等待容器啟動,非就緒。.env 文件或 Docker secrets。絕不提交密碼。.:/app 覆寫於映像中建之 node_modules。用匿名卷:/app/node_modules。docker compose ps 與 lsof -i :<port> 檢查衝突。version: 鍵:Compose V2 忽略 version: 鍵。對現代設置省略之。/mnt/c/... 路徑。setup-docker-compose - R 特定之 Docker Compose 配置create-dockerfile - 撰寫 compose 參照之 Dockerfilecreate-multistage-dockerfile - 為堆疊建構優化映像configure-nginx - 對堆疊加入 Nginx 反向代理