services: db: extends: file: docker-compose.yaml service: db backend: extends: file: docker-compose.yaml service: backend backend-init: extends: file: docker-compose.yaml service: backend-init frontend-dev: image: node:20-alpine container_name: ctms_frontend_dev restart: always working_dir: /app command: - sh - -c - | set -e lock_hash="$$(sha256sum package-lock.json | awk '{print $$1}')" marker="node_modules/.ctms-package-lock.sha256" if [ ! -f "$$marker" ] || [ "$$(cat "$$marker")" != "$$lock_hash" ]; then npm ci printf '%s' "$$lock_hash" > "$$marker" fi npm run dev -- --host 0.0.0.0 environment: NPM_CONFIG_REGISTRY: ${NPM_CONFIG_REGISTRY:-https://registry.npmmirror.com} VITE_RUNTIME_ENV: ${ENV:-development} VITE_ALLOW_INSECURE_DEV_LOGIN: ${VITE_ALLOW_INSECURE_DEV_LOGIN:-true} healthcheck: test: ["CMD-SHELL", "wget -q -O /dev/null http://127.0.0.1:5173/"] interval: 2s timeout: 2s retries: 90 start_period: 5s volumes: - ./frontend:/app - frontend_node_modules:/app/node_modules depends_on: - backend networks: - ctms_net nginx: image: nginx:1.27-alpine container_name: ctms_nginx restart: always ports: - "8888:80" volumes: - ./nginx/nginx.dev.conf:/etc/nginx/nginx.conf:ro - ./nginx/certs:/etc/nginx/certs:ro - ./frontend/public/favicon.ico:/usr/share/nginx/html/favicon.ico:ro depends_on: backend: condition: service_started frontend-dev: condition: service_healthy networks: - ctms_net volumes: frontend_node_modules: networks: ctms_net: driver: bridge