x-app: &app build: context: . dockerfile: docker/php/Dockerfile image: radical-app volumes: - .:/var/www/html environment: &app-env DB_CONNECTION: pgsql DB_HOST: postgres DB_PORT: 5432 DB_DATABASE: ${DB_DATABASE:-radical} DB_USERNAME: ${DB_USERNAME:-radical} DB_PASSWORD: ${DB_PASSWORD:-secret} REDIS_HOST: redis REDIS_PORT: 6379 QUEUE_CONNECTION: redis CACHE_STORE: redis SESSION_DRIVER: redis depends_on: postgres: condition: service_healthy redis: condition: service_healthy services: app: <<: *app horizon: <<: *app command: php artisan horizon restart: unless-stopped depends_on: app: condition: service_started nginx: image: nginx:1.27-alpine ports: - "${APP_PORT:-8000}:80" volumes: - .:/var/www/html:ro - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro depends_on: - app node: image: node:24-alpine working_dir: /var/www/html command: sh -c "npm install && npm run dev -- --host 0.0.0.0" volumes: - .:/var/www/html - node-modules:/var/www/html/node_modules ports: - "5173:5173" postgres: image: postgres:16-alpine environment: POSTGRES_DB: ${DB_DATABASE:-radical} POSTGRES_USER: ${DB_USERNAME:-radical} POSTGRES_PASSWORD: ${DB_PASSWORD:-secret} ports: - "${DB_FORWARD_PORT:-5432}:5432" volumes: - postgres-data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USERNAME:-radical} -d ${DB_DATABASE:-radical}"] interval: 5s timeout: 5s retries: 10 redis: image: redis:7-alpine volumes: - redis-data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 5s retries: 10 volumes: postgres-data: redis-data: node-modules: