services: db: image: postgres:15-alpine container_name: blog_db restart: always environment: POSTGRES_USER: josemi POSTGRES_PASSWORD: josemivi POSTGRES_DB: blog_db volumes: - postgres_data:/var/lib/postgresql/data - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql ports: - "9003:5432" backend: build: ./backend container_name: blog_backend restart: always ports: - "9002:9002" depends_on: - db environment: # IMPORTANTE: Usamos 'db' como host porque Docker los conecta por nombre DATABASE_URL: postgres://josemi:josemivi@db:5432/blog_db JWT_SECRET: secreto_super_seguro_de_josemi PORT: 9002 volumes: - ./backend:/app # Esta línea protege tus librerías instaladas en el build - /app/node_modules # Forzamos que use el comando de desarrollo definido en tu package.json command: npm run dev frontend: build: ./frontend container_name: blog_frontend restart: always ports: - "9001:3000" depends_on: - backend environment: NEXT_PUBLIC_API_URL: http://localhost:9001 volumes: - ./frontend:/app - /app/node_modules volumes: postgres_data: