services: # CLI 모드 (일회성 명령 실행) cli: build: . image: cf-bouncer-manager:latest volumes: - ~/.ssh:/root/.ssh:ro - ./data:/root/cf-bouncer-manager environment: - CFB_BOUNCER_HOST=${CFB_BOUNCER_HOST:-} - CFB_BOUNCER_PORT=${CFB_BOUNCER_PORT:-22} - CFB_BOUNCER_USER=${CFB_BOUNCER_USER:-root} - CFB_BOUNCER_KEY=${CFB_BOUNCER_KEY:-} - CFB_CROWDSEC_HOST=${CFB_CROWDSEC_HOST:-} - CFB_CROWDSEC_PORT=${CFB_CROWDSEC_PORT:-22} - CFB_CROWDSEC_USER=${CFB_CROWDSEC_USER:-root} - CFB_CROWDSEC_KEY=${CFB_CROWDSEC_KEY:-} entrypoint: ["uv", "run", "python", "cf_bouncer.py"] command: ["--help"] # API 서버 모드 api: build: . image: cf-bouncer-manager:latest ports: - "8000:8000" volumes: - ~/.ssh:/root/.ssh:ro - ./data:/root/cf-bouncer-manager environment: - CFB_BOUNCER_HOST=${CFB_BOUNCER_HOST:-} - CFB_BOUNCER_PORT=${CFB_BOUNCER_PORT:-22} - CFB_BOUNCER_USER=${CFB_BOUNCER_USER:-root} - CFB_BOUNCER_KEY=${CFB_BOUNCER_KEY:-} - CFB_CROWDSEC_HOST=${CFB_CROWDSEC_HOST:-} - CFB_CROWDSEC_PORT=${CFB_CROWDSEC_PORT:-22} - CFB_CROWDSEC_USER=${CFB_CROWDSEC_USER:-root} - CFB_CROWDSEC_KEY=${CFB_CROWDSEC_KEY:-} - CFB_API_HOST=0.0.0.0 - CFB_API_PORT=8000 entrypoint: ["uv", "run", "uvicorn", "api_server:app", "--host", "0.0.0.0", "--port", "8000"] restart: unless-stopped healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3