feat: add server provisioning system with Queue

- Add server-provision.ts for async server creation
- Add SERVER_PROVISION_QUEUE with DLQ for reliability
- Add cron job for auto-cleanup of pending orders (5min)
- Add server delete confirmation with inline keyboard
- Update types for server orders, images, and provisioning
- Add server tables to schema (server_orders, server_instances)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
kappa
2026-01-28 20:26:17 +09:00
parent d3b743c3c1
commit 5ba555864a
8 changed files with 1378 additions and 216 deletions

View File

@@ -48,9 +48,11 @@ preview_id = "302ad556567447cbac49c20bded4eb7e"
binding = "CLOUD_ORCHESTRATOR"
service = "cloud-orchestrator"
# Cron Trigger: 매일 자정(KST) 실행 - 24시간 경과된 입금 대기 자동 취소
# Cron Triggers:
# - 매일 자정(KST): 24시간 경과된 입금 대기 자동 취소 + 정합성 검증
# - 매 5분: pending 상태 서버 주문 자동 삭제 (5분 경과)
[triggers]
crons = ["0 15 * * *"] # UTC 15:00 = KST 00:00
crons = ["0 15 * * *", "*/5 * * * *"] # UTC 15:00 = KST 00:00, 매 5분
# Secrets (wrangler secret put 으로 설정):
# - BOT_TOKEN: Telegram Bot Token
@@ -62,3 +64,21 @@ crons = ["0 15 * * *"] # UTC 15:00 = KST 00:00
# - DEPOSIT_API_SECRET: Deposit API 인증 키 (namecheap-api 연동)
# - DOMAIN_OWNER_ID: 도메인 관리 권한 Telegram ID (보안상 secrets 권장)
# - DEPOSIT_ADMIN_ID: 예치금 관리 권한 Telegram ID (보안상 secrets 권장)
# Server Provision Queue
[[queues.producers]]
queue = "server-provision-queue"
binding = "SERVER_PROVISION_QUEUE"
[[queues.consumers]]
queue = "server-provision-queue"
max_retries = 3
max_batch_size = 10
max_batch_timeout = 30
max_concurrency = 5
dead_letter_queue = "provision-dlq"
# Dead Letter Queue
[[queues.consumers]]
queue = "provision-dlq"
max_retries = 0