services: auth-service: build: . command: python -m gapido_auth.transport.grpc.server environment: MONGO_URI: mongodb://mongo:27017 MONGO_DB_NAME: ${MONGO_DB_NAME:-gapido_auth} REDIS_URL: redis://redis:6379/0 RABBITMQ_URL: amqp://guest:guest@rabbitmq:5672/ JWT_SECRET_KEY: ${JWT_SECRET_KEY:-change-me-use-a-long-random-secret} JWT_ISSUER: ${JWT_ISSUER:-gapido-auth} ACCESS_TOKEN_TTL_SECONDS: ${ACCESS_TOKEN_TTL_SECONDS:-900} REFRESH_TOKEN_TTL_SECONDS: ${REFRESH_TOKEN_TTL_SECONDS:-604800} OTP_TTL_SECONDS: ${OTP_TTL_SECONDS:-120} OTP_MAX_ATTEMPTS: ${OTP_MAX_ATTEMPTS:-5} OTP_REQUEST_LIMIT: ${OTP_REQUEST_LIMIT:-3} OTP_REQUEST_WINDOW_SECONDS: ${OTP_REQUEST_WINDOW_SECONDS:-300} SMS_PROVIDER: ${SMS_PROVIDER:-kavenegar} KAVENEGAR_LOGIN_TEMPLATE: ${KAVENEGAR_LOGIN_TEMPLATE:-login-otp} SMS_IR_VERIFY_TEMPLATE_ID: ${SMS_IR_VERIFY_TEMPLATE_ID:-570574} ADMIN_MOBILE: ${ADMIN_MOBILE:-989120000000} GRPC_HOST: 0.0.0.0 GRPC_PORT: 50051 ports: - "50051:50051" depends_on: mongo: condition: service_started redis: condition: service_started rabbitmq: condition: service_healthy sms-worker: build: . command: python -m gapido_auth.infrastructure.worker environment: MONGO_URI: mongodb://mongo:27017 REDIS_URL: redis://redis:6379/0 RABBITMQ_URL: amqp://guest:guest@rabbitmq:5672/ SMS_PROVIDER: ${SMS_PROVIDER:-kavenegar} KAVENEGAR_API_KEY: ${KAVENEGAR_API_KEY:-replace-with-real-key} SMS_IR_API_KEY: ${SMS_IR_API_KEY:-replace-with-real-key} depends_on: rabbitmq: condition: service_healthy mongo: image: mongo:7 ports: - "27017:27017" volumes: - mongo-data:/data/db redis: image: redis:7-alpine ports: - "6379:6379" rabbitmq: image: rabbitmq:3.13-management-alpine ports: - "5672:5672" - "15672:15672" healthcheck: test: ["CMD", "rabbitmq-diagnostics", "check_port_connectivity"] interval: 5s timeout: 5s retries: 20 volumes: mongo-data: