writing-skills
writing-skills
Use when creating new skills, editing existing skills, or verifying skills work before deployment
setup-compose-stackKonfiguriere allgemeine Docker-Compose-Stacks fuer gaengige Anwendungsmuster. Umfasst Web-App + Datenbank + Cache + Worker-Dienste, benannte Volumes, Netzwerke, Health-Checks, depends_on, Umgebungsverwaltung und Profile. Verwende diesen Skill beim Betrieb einer Web-App mit Datenbank oder Cache, beim Einrichten einer Entwicklungsumgebung mit mehreren Dienste…
Independent GitHub snapshot · Automated classification · Original documentation governs
Docker Compose fuer Multi-Service-Anwendungsstacks mit Datenbanken, Caches und Workern konfigurieren.
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:
Erwartet: docker compose up startet alle Dienste, wobei die App auf eine gesunde Datenbank wartet.
Health-Checks ermoeglichen depends_on mit 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
Dies isoliert die Datenbank von direktem externen Zugriff, waehrend die App beide Netzwerke verbindet.
.env-Datei erstellen (git-ignoriert):
POSTGRES_PASSWORD=secure_password_here
APP_SECRET=your_secret_key
In Compose referenzieren:
services:
postgres:
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
app:
env_file:
- .env
.env.example erstellen (in Git eingecheckt):
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 wird automatisch zusammengefuehrt:
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
Erwartet: Alle Dienste starten, Health-Checks bestehen, App verbindet sich mit Datenbank und Cache.
Bei Fehler: docker compose logs <service> pruefen. Haeufige Probleme: Port-Konflikte, fehlende Umgebungsvariablen, Health-Check-Timeouts.
docker compose up startet alle Dienste fehlerfrei.env ist git-ignoriert; .env.example ist eingechecktdocker compose down stoppt alles sauberdepends_on ohne condition: service_healthy wartet nur auf Container-Start, nicht auf Bereitschaft..env-Dateien oder Docker Secrets verwenden. Niemals Passwoerter committen..:/app ueberschreibt im Image gebaute node_modules. Ein anonymes Volume verwenden: /app/node_modules.docker compose ps und lsof -i :<port> auf Konflikte pruefen.version:-Schluessel: Compose V2 ignoriert den version:-Schluessel. Fuer moderne Setups weglassen./mnt/c/...-Pfade verwenden, wenn Windows-Verzeichnisse aus WSL eingehaengt werden.setup-docker-compose - R-spezifische Docker-Compose-Konfigurationencreate-dockerfile - Das Dockerfile schreiben, das Compose referenziertcreate-multistage-dockerfile - Optimierte Images fuer den Stack bauenconfigure-nginx - Nginx-Reverse-Proxy zum Stack hinzufuegen