services: pm-api: build: context: ./backend dockerfile: Dockerfile container_name: pm-api environment: PM_DATABASE_URL: postgresql+asyncpg://postgres:postgres@procurement-postgres:5432/procurement PM_SESSION_SECRET: ${PM_SESSION_SECRET:-12278fc281bd0e22950e76364e1a18cea61fbc6a24604fdd79690a817ec36ac8} PM_ADMIN_USER: ${PM_ADMIN_USER:-admin} PM_ADMIN_PASSWORD: ${PM_ADMIN_PASSWORD:-pm123456} PM_FILES_DIR: /data/files PM_DEV_ROLE_SWITCH: ${PM_DEV_ROLE_SWITCH:-false} PM_ERP_BASE_URL: http://procurement-api:8000 PM_ERP_CASDOOR_ENDPOINT: http://casdoor:8000 PM_ERP_CASDOOR_CLIENT_ID: ${PM_ERP_CASDOOR_CLIENT_ID:-inventory-app-client} PM_ERP_CASDOOR_CLIENT_SECRET: ${PM_ERP_CASDOOR_CLIENT_SECRET:-inventory-app-secret-2026} PM_ERP_SERVICE_USERNAME: ${PM_ERP_SERVICE_USERNAME:-pm-service} PM_ERP_SERVICE_PASSWORD: ${PM_ERP_SERVICE_PASSWORD:-pm-service-2026} PM_CASDOOR_ISSUER: ${PM_CASDOOR_ISSUER:-http://localhost:8080} volumes: - pm_files:/data/files - ./backend/app:/srv/pm/app networks: - default - erp_network restart: unless-stopped pm-frontend: build: context: ./frontend dockerfile: Dockerfile container_name: pm-frontend ports: - "8083:80" depends_on: - pm-api labels: - "traefik.enable=true" - "traefik.http.routers.pm.rule=PathPrefix(`/pm`)" - "traefik.http.routers.pm.entrypoints=web" - "traefik.http.routers.pm.priority=100" - "traefik.http.services.pm.loadbalancer.server.port=80" networks: - default - traefik_network restart: unless-stopped volumes: pm_files: networks: default: name: pm_default erp_network: name: all-together_default external: true traefik_network: external: true