services: db: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} volumes: - db_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 10s timeout: 5s retries: 5 directus: image: directus/directus:11 restart: unless-stopped environment: KEY: ${DIRECTUS_KEY} SECRET: ${DIRECTUS_SECRET} DB_CLIENT: pg DB_HOST: ${POSTGRES_HOST} DB_PORT: ${POSTGRES_PORT} DB_DATABASE: ${POSTGRES_DB} DB_USER: ${POSTGRES_USER} DB_PASSWORD: ${POSTGRES_PASSWORD} ADMIN_EMAIL: ${DIRECTUS_ADMIN_EMAIL} ADMIN_PASSWORD: ${DIRECTUS_ADMIN_PASSWORD} ADMIN_TOKEN: ${DIRECTUS_ADMIN_TOKEN:-dev-admin-token-change-me} PUBLIC_URL: ${DIRECTUS_PUBLIC_URL} CORS_ENABLED: "true" CORS_ORIGIN: ${DIRECTUS_CORS_ORIGIN} WEBSOCKETS_ENABLED: "false" healthcheck: test: ["CMD-SHELL", "wget -q -O - http://127.0.0.1:8055/server/health >/dev/null 2>&1"] interval: 10s timeout: 5s retries: 10 depends_on: db: condition: service_healthy volumes: - directus_uploads:/directus/uploads networks: - default - webapps directus-bootstrap: image: node:22-alpine restart: "no" working_dir: /app volumes: - ./:/app environment: DIRECTUS_URL: ${DIRECTUS_URL} DIRECTUS_ADMIN_EMAIL: ${DIRECTUS_ADMIN_EMAIL} DIRECTUS_ADMIN_PASSWORD: ${DIRECTUS_ADMIN_PASSWORD} command: ["node", "scripts/bootstrap-directus.mjs"] depends_on: db: condition: service_healthy directus: condition: service_healthy web: build: context: . command: ["sh", "-c", "npm install && npm run dev -- --host 0.0.0.0 --port 80"] environment: PUBLIC_SITE_URL: ${PUBLIC_SITE_URL} PUBLIC_PPR_API_BASE: ${PUBLIC_PPR_API_BASE} DIRECTUS_URL: ${DIRECTUS_URL} DIRECTUS_PUBLIC_URL: ${DIRECTUS_PUBLIC_URL} DIRECTUS_HOMEPAGE_BANNER_FOLDER: ${DIRECTUS_HOMEPAGE_BANNER_FOLDER} DIRECTUS_PORT: ${DIRECTUS_PORT} DIRECTUS_ADMIN_TOKEN: ${DIRECTUS_ADMIN_TOKEN} depends_on: directus: condition: service_healthy directus-bootstrap: condition: service_completed_successfully restart: unless-stopped volumes: - ./:/app - ./public/images:/app/public/images - web_node_modules:/app/node_modules - web_astro:/app/.astro networks: - default - webapps volumes: db_data: directus_uploads: web_node_modules: web_astro: networks: default: webapps: external: true