docker-compose.yml
Rama main · réplica de lectura del repositorio original.
# QA Studio - Self-Contained Development Environment
# This docker-compose file provides all services needed to run QA Studio locally
# No external cloud services required!
services:
# PostgreSQL Database
postgres:
image: postgres:16-alpine
container_name: qastudio-postgres
restart: unless-stopped
environment:
POSTGRES_DB: qastudio
POSTGRES_USER: qastudio
POSTGRES_PASSWORD: ${DB_PASSWORD:-qastudio_dev_password}
volumes:
- postgres-data:/var/lib/postgresql/data
ports:
- '5432:5432'
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U qastudio']
interval: 10s
timeout: 5s
retries: 5
# Redis for caching and session storage
redis:
image: redis:7-alpine
container_name: qastudio-redis
restart: unless-stopped
command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD:-qastudio_redis_pass}
volumes:
- redis-data:/data
ports:
- '6379:6379'
healthcheck:
test: ['CMD', 'redis-cli', '--pass', '${REDIS_PASSWORD:-qastudio_redis_pass}', 'ping']
interval: 10s
timeout: 5s
retries: 5
# MinIO for object storage (S3-compatible)
# Use this for storing test attachments (screenshots, videos, logs)
minio:
image: minio/minio:latest
container_name: qastudio-minio
restart: unless-stopped
environment:
MINIO_ROOT_USER: ${MINIO_USER:-qastudio}
MINIO_ROOT_PASSWORD: ${MINIO_PASSWORD:-qastudio_minio_pass}
volumes:
- minio-data:/data
ports:
- '9000:9000' # API
- '9001:9001' # Console UI
command: server /data --console-address ":9001"
healthcheck:
test: ['CMD', 'curl', '-f', 'http://localhost:9000/minio/health/live']
interval: 30s
timeout: 20s
retries: 3
# Create MinIO bucket on startup
minio-init:
image: minio/mc:latest
container_name: qastudio-minio-init
depends_on:
- minio
entrypoint: >
/bin/sh -c "
sleep 5;
/usr/bin/mc alias set myminio http://minio:9000 ${MINIO_USER:-qastudio} ${MINIO_PASSWORD:-qastudio_minio_pass};
/usr/bin/mc mb myminio/qastudio --ignore-existing;
/usr/bin/mc anonymous set download myminio/qastudio;
exit 0;
"
# MailHog for email testing
# Captures all outbound emails and provides a web UI
mailhog:
image: mailhog/mailhog:latest
container_name: qastudio-mailhog
restart: unless-stopped
ports:
- '1025:1025' # SMTP server
- '8025:8025' # Web UI
logging:
driver: 'none' # Disable logs to reduce noise
# QA Studio Web Application
web:
build:
context: .
dockerfile: Dockerfile
target: development
container_name: qastudio-web
restart: unless-stopped
environment:
# Database
DATABASE_URL: postgresql://qastudio:${DB_PASSWORD:-qastudio_dev_password}@postgres:5432/qastudio
# Redis
REDIS_URL: redis://:${REDIS_PASSWORD:-qastudio_redis_pass}@redis:6379
# MinIO (S3-compatible storage)
STORAGE_TYPE: minio
S3_ENDPOINT: http://minio:9000
S3_ACCESS_KEY: ${MINIO_USER:-qastudio}
S3_SECRET_KEY: ${MINIO_PASSWORD:-qastudio_minio_pass}
S3_BUCKET: qastudio
S3_REGION: us-east-1
# Email (MailHog)
SMTP_HOST: mailhog
SMTP_PORT: 1025
SMTP_SECURE: 'false'
SMTP_FROM: noreply@qastudio.local
# App Config
ORIGIN: http://localhost:3000
NODE_ENV: development
# Deployment Mode
# Defaults to 'true' for Docker deployments (self-hosted mode)
# - All features unlocked (AI analysis, advanced reports, integrations)
# - Unlimited users and projects
# - No Stripe/payment infrastructure required
# Set to 'false' if running as hosted SaaS with payment processing
# See SELF_HOSTED.md for details
SELF_HOSTED: ${SELF_HOSTED:-true}
# Session Secret (change in production!)
SESSION_SECRET: ${SESSION_SECRET:-dev_secret_change_me_in_production}
volumes:
# Mount source code for hot reload (cached for better performance on Mac/Windows)
- .:/app:cached
- /app/node_modules
- /app/.svelte-kit
ports:
- '3000:3000'
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
minio:
condition: service_healthy
mailhog:
condition: service_started
command: sh -c "npx prisma migrate deploy && npm run dev -- --host"
volumes:
postgres-data:
driver: local
redis-data:
driver: local
minio-data:
driver: local
networks:
default:
name: qastudio-network