services: app: build: context: . dockerfile: Dockerfile ports: - "${PORT:-3000}:3000" networks: - moo-network env_file: - .env environment: - NODE_ENV=${NODE_ENV:-production} - HOST=0.0.0.0 - DB_HOST=db - DB_PORT=3306 - DB_SSL= - DB_USER=${DB_USER:-mootasks} - DB_PASSWORD=${DB_PASSWORD:-password} - DB_NAME=${DB_NAME:-mootasks} - DATABASE_URL=mysql://${DB_USER:-mootasks}:${DB_PASSWORD:-password}@db:3306/${DB_NAME:-mootasks} - SMTP_HOST=${SMTP_HOST:-mailpit} - SMTP_PORT=${SMTP_PORT:-1025} - SMTP_USER=${SMTP_USER:-} - SMTP_PASSWORD=${SMTP_PASSWORD:-} - SMTP_FROM=${SMTP_FROM:-noreply@localhost} volumes: - ./app:/app/app - ./server:/app/server - ./scripts:/app/scripts - ./nuxt.config.ts:/app/nuxt.config.ts - ./tsconfig.json:/app/tsconfig.json - ./package.json:/app/package.json - ./drizzle:/app/drizzle - ./drizzle.config.ts:/app/drizzle.config.ts depends_on: db: condition: service_healthy restart: always db: image: mysql:8.4 container_name: db command: --default-authentication-plugin=mysql_native_password --host-cache-size=0 ports: - "${DB_LOCAL_PORT:-3306}:3306" environment: - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD:-password} - MYSQL_USER=${DB_USER:-mootasks} - MYSQL_PASSWORD=${DB_PASSWORD:-password} - MYSQL_DATABASE=${DB_NAME:-mootasks} - MYSQL_TCP_PORT=3306 healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${DB_ROOT_PASSWORD:-password}"] interval: 10s timeout: 5s retries: 5 volumes: - db-data:/var/lib/mysql networks: - moo-network adminer: image: adminer:latest ports: - "${ADMINER_PORT:-8080}:8080" environment: - ADMINER_DEFAULT_SERVER=db depends_on: db: condition: service_healthy networks: - moo-network mailpit: image: axllent/mailpit:latest ports: - "${MAILPIT_SMTP_PORT:-1025}:1025" - "${MAILPIT_UI_PORT:-8025}:8025" networks: - moo-network networks: moo-network: driver: bridge volumes: db-data: