services: mongo: image: mongo:7.0 container_name: stoeberhunde-mongo restart: unless-stopped environment: - MONGO_INITDB_ROOT_USERNAME=stoeberhunde - MONGO_INITDB_ROOT_PASSWORD=${MONGO_PASSWORD} - MONGO_INITDB_DATABASE=stoeberhunde volumes: - mongo-data:/data/db healthcheck: test: ["CMD", "mongosh", "--username", "stoeberhunde", "--password", "${MONGO_PASSWORD}", "--authenticationDatabase", "admin", "--eval", "db.adminCommand('ping')"] interval: 30s timeout: 10s retries: 3 start_period: 40s backend: build: ./backend container_name: stoeberhunde-backend restart: unless-stopped # Port 5012 only bound to localhost ports: - "0.0.0.0:5012:5000" environment: - NODE_ENV=production - MONGO_URI=mongodb://stoeberhunde:${MONGO_PASSWORD}@mongo:27017/stoeberhunde?authSource=admin - JWT_SECRET=${JWT_SECRET} - JWT_EXPIRES_IN=24h - CORS_ORIGIN=${CORS_ORIGIN:-http://localhost:8082} - ADMIN_THORSTEN_PASSWORD=${ADMIN_THORSTEN_PASSWORD} - GEOCODE_URL=https://nominatim.openstreetmap.org/search - GEOCODE_USER_AGENT=stoeberhunde-app/1.0 (t.meyer@jaegerschaft-fallingbostel.de) - GEOCODE_MIN_DELAY_MS=1100 depends_on: mongo: condition: service_healthy healthcheck: test: ["CMD", "wget", "-q", "--spider", "http://localhost:5000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s frontend: build: context: ./frontend args: - PUBLIC_URL=/stoeberhunde/ - REACT_APP_API_URL=${REACT_APP_API_URL:-} container_name: stoeberhunde-frontend restart: unless-stopped ports: - "8082:80" depends_on: - backend healthcheck: test: ["CMD", "wget", "-q", "--spider", "http://localhost/health"] interval: 30s timeout: 10s retries: 3 volumes: mongo-data: name: stoeberhunde-mongo-data