# Docker Compose para DESARROLLO con hot reload # Uso: docker compose -f docker-compose.dev.yml up services: # ============================================ # FRONTEND (Vite dev server con hot reload) # ============================================ frontend: image: node:22-alpine container_name: ${COMPOSE_PROJECT_NAME:-myapp}-frontend-dev working_dir: /app command: sh -c "corepack enable && pnpm install && pnpm dev --host 0.0.0.0" volumes: - ./frontend:/app - frontend_node_modules:/app/node_modules ports: - "${FRONTEND_PORT:-5173}:5173" environment: - VITE_API_URL=http://localhost:${BACKEND_PORT:-8080} depends_on: - backend networks: - app-network # ============================================ # BACKEND (Go con air para hot reload) # ============================================ backend: image: cosmtrek/air:latest container_name: ${COMPOSE_PROJECT_NAME:-myapp}-backend-dev working_dir: /app volumes: - ./backend:/app - go_mod_cache:/go/pkg/mod ports: - "${BACKEND_PORT:-8080}:8080" environment: - DATABASE_URL=postgres://${POSTGRES_USER:-app}:${POSTGRES_PASSWORD:-secret}@db:5432/${POSTGRES_DB:-app}?sslmode=disable - REDIS_URL=redis://redis:6379 - ENV=development depends_on: db: condition: service_healthy networks: - app-network # ============================================ # DATABASE (PostgreSQL) # ============================================ db: image: postgres:16-alpine container_name: ${COMPOSE_PROJECT_NAME:-myapp}-db-dev environment: POSTGRES_USER: ${POSTGRES_USER:-app} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-secret} POSTGRES_DB: ${POSTGRES_DB:-app} volumes: - postgres_data_dev:/var/lib/postgresql/data ports: - "${POSTGRES_PORT:-5432}:5432" networks: - app-network healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-app}"] interval: 5s timeout: 5s retries: 5 # ============================================ # CACHE (Redis) # ============================================ redis: image: redis:7-alpine container_name: ${COMPOSE_PROJECT_NAME:-myapp}-redis-dev ports: - "${REDIS_PORT:-6379}:6379" networks: - app-network # ============================================ # ADMINER (UI para DB - opcional) # ============================================ adminer: image: adminer:latest container_name: ${COMPOSE_PROJECT_NAME:-myapp}-adminer ports: - "8081:8080" depends_on: - db networks: - app-network networks: app-network: driver: bridge volumes: postgres_data_dev: frontend_node_modules: go_mod_cache: