CD / README.md
tkadkghdlf's picture
Sync from GitHub via hub-sync
f711f7f verified
|
Raw
History Blame Contribute Delete
5.14 kB
metadata
title: CD
sdk: docker
app_port: 7860

Tranimal Run Workspace

MSA ๊ธฐ๋ฐ˜ ๋กœ์ปฌ ๊ฐœ๋ฐœ์šฉ ์›Œํฌ์ŠคํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

๊ตฌ์กฐ

main/                    # Next.js frontend
api/
  api-gateway/           # ๋‹จ์ผ ์ง„์ž… API
  auth-service/          # ์ธ์ฆ/ํšŒ์›/๋Ÿฐ ์„ธ์…˜ ์ €์žฅ
  ai-service/            # ๊ฒฝ๋กœ ์ƒ์„ฑ/CLIP ์ ์ˆ˜ํ™”
router/ai/               # OSM + CLIP ํŒŒ์ดํ”„๋ผ์ธ ์Šคํฌ๋ฆฝํŠธ
docker-compose.yml
.env

๋น ๋ฅธ ์‹œ์ž‘

  1. ๋ฃจํŠธ .env ์ค€๋น„
  2. ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰
docker compose up -d --build
  1. ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ (์ตœ์ดˆ 1ํšŒ ๋˜๋Š” ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ์‹œ)
docker compose exec auth-service alembic upgrade head

์ ‘์†:

  • Frontend: http://localhost:3000
  • API Gateway: http://localhost:8000
  • Auth Service: http://localhost:8001
  • AI Service: http://localhost:8002

Hugging Face Spaces ๋ฐฐํฌ

๋ฌด๋ฃŒ ์ž„์‹œ ์‹œ์—ฐ์šฉ Docker Space ๋ฐฐํฌ ๊ตฌ์„ฑ์ž…๋‹ˆ๋‹ค.

Space ์„ค์ •:

  • SDK: Docker
  • Template: Blank
  • Hardware: CPU Basic (Free)
  • Storage Bucket: Off
  • Dev Mode: Off
  • App port: 7860

Space์˜ Settings > Variables and secrets์— ๊ฐ’์„ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. DB URL, SMTP ๋น„๋ฐ€๋ฒˆํ˜ธ, JWT ํ‚ค๋Š” ๋ฐ˜๋“œ์‹œ Secret์œผ๋กœ ๋„ฃ๊ณ  ์ €์žฅ์†Œ์— ์ปค๋ฐ‹ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Secrets:

  • AUTH_DATABASE_URL
  • PROTOTYPE_PGVECTOR_URL
  • TEXT_PROTOTYPE_PGVECTOR_URL
  • JWT_SECRET_KEY
  • GOOGLE_OAUTH_CLIENT_ID (Google ๋กœ๊ทธ์ธ์„ ์“ฐ๋Š” ๊ฒฝ์šฐ)
  • SMTP_USERNAME, SMTP_PASSWORD, SMTP_FROM_EMAIL (๋ฉ”์ผ ๋ฐœ์†ก์„ ์“ฐ๋Š” ๊ฒฝ์šฐ)

Variables:

  • NEXT_PUBLIC_API_BASE_URL=https://<account>-<space>.hf.space
  • NEXT_INTERNAL_API_PROXY_TARGET=http://127.0.0.1:8000
  • CORS_ORIGINS=https://<account>-<space>.hf.space
  • PASSWORD_RESET_FRONTEND_URL=https://<account>-<space>.hf.space/password-reset
  • AUTH_SERVICE_URL=http://127.0.0.1:8001
  • AI_SERVICE_URL=http://127.0.0.1:8002
  • AI_WORKSPACE_DIR=/app/router/ai
  • TTS_DEVICE=cpu
  • TTS_SPEED=1.0
  • TTS_CACHE_DIR=/tmp/runnimal-tts-cache

GitHub ์ €์žฅ์†Œ์˜ DemoService ๋ธŒ๋žœ์น˜๊ฐ€ Hugging Face Space์™€ ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค. GitHub ์ €์žฅ์†Œ ์„ค์ •์—์„œ HUGGINGFACE_TOKEN secret์„ ๋จผ์ € ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

GitHub repository > Settings > Secrets and variables > Actions > New repository secret
Name: HUGGINGFACE_TOKEN
Value: Hugging Face write token

๊ทธ ๋‹ค์Œ DemoService ๋ธŒ๋žœ์น˜๋ฅผ GitHub์— pushํ•ฉ๋‹ˆ๋‹ค.

git switch DemoService
git push -u origin DemoService

์ด ๋ธŒ๋žœ์น˜์— ํฌํ•จ๋œ .github/workflows/sync-huggingface-space.yml๊ฐ€ tkadkghdlf/CD Space๋กœ ํŒŒ์ผ์„ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. Hugging Face ์ชฝ ํ•˜๋“œ์›จ์–ด๋Š” ๊ณ„์† CPU Basic (Free)๋กœ ์œ ์ง€ํ•˜๊ณ , Storage Bucket/Dev Mode/Custom Hardware๋Š” ์ผœ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

RDS๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, Hugging Face ์ปจํ…Œ์ด๋„ˆ๊ฐ€ DB์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋„๋ก RDS ๋ณด์•ˆ ๊ทธ๋ฃน์˜ PostgreSQL 5432 ํฌํŠธ๋ฅผ ํ—ˆ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž„์‹œ ์‹œ์—ฐ์„ ์œ„ํ•ด 0.0.0.0/0์„ ์—ด์—ˆ๋‹ค๋ฉด ์‹œ์—ฐ์ด ๋๋‚œ ๋’ค ๋ฐ”๋กœ ๋‹ซ์Šต๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ๋ณ€์ˆ˜ (.env)

๋ฃจํŠธ .env์— ์•„๋ž˜ ํ‚ค๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

ํ•„์ˆ˜

  • AUTH_DATABASE_URL
    • auth-service๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” PostgreSQL URL
    • ์˜ˆ: postgresql+psycopg://USER:PASS@HOST:5432/DB?sslmode=require

AI ๋ผ์šฐํŠธ/pgvector ์‚ฌ์šฉ ์‹œ ๊ถŒ์žฅ

  • PROTOTYPE_PGVECTOR_URL
  • PROTOTYPE_PGVECTOR_TABLE (๊ธฐ๋ณธ: quickdraw_prototypes)
  • PROTOTYPE_PGVECTOR_SOURCE (๊ธฐ๋ณธ: quickdraw_avg_v1)
  • TEXT_PROTOTYPE_PGVECTOR_URL
  • TEXT_PROTOTYPE_PGVECTOR_TABLE (๊ธฐ๋ณธ: quickdraw_text_prototypes)
  • TEXT_PROTOTYPE_PGVECTOR_SOURCE (๊ธฐ๋ณธ: clip_text_prompt_avg_v1)
  • EMBEDDING_PGVECTOR_URL
  • EMBEDDING_PGVECTOR_TABLE (๊ธฐ๋ณธ: quickdraw_embeddings)
  • EMBEDDING_PGVECTOR_SOURCE (๊ธฐ๋ณธ: quickdraw_train_v1)
  • IMAGE_PROTO_WEIGHT (์˜ˆ: 0.8)
  • TEXT_PROTO_WEIGHT (์˜ˆ: 0.2)

๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ๋ฉ”์ผ ์‚ฌ์šฉ ์‹œ

  • PASSWORD_RESET_FRONTEND_URL (์˜ˆ: http://localhost:3000/password-reset)
  • SMTP_HOST
  • SMTP_PORT
  • SMTP_USERNAME
  • SMTP_PASSWORD
  • SMTP_USE_TLS (true/false)
  • SMTP_FROM_EMAIL
  • SMTP_FROM_NAME

SMTP๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด, ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ๋งํฌ๋Š” ๋ฉ”์ผ ๋Œ€์‹  auth-service ๋กœ๊ทธ์— ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

AI ๊ฒฝ๋กœ ์ƒ์„ฑ API

ํ”„๋ก ํŠธ๋Š” ์•„๋ž˜ ๊ฒฝ๋กœ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

POST http://localhost:8000/api/v1/ai/routes/generate

์ฃผ์š” ํŒŒ๋ผ๋ฏธํ„ฐ:

  • source: place | current
  • place ๋˜๋Š” latitude/longitude
  • routeCount
  • targetDistanceKm
  • labels
  • selectedLabel
  • selectedTopK

์„ฑ๋Šฅ ๋ฉ”๋ชจ

ํ˜„์žฌ ai-service๋Š” ์‹œ์ž‘ ์‹œ CLIP ํŒŒ์ดํ”„๋ผ์ธ์„ prewarm ํ•ฉ๋‹ˆ๋‹ค.

  • ์ฒซ ์š”์ฒญ๋ณด๋‹ค ๋‘ ๋ฒˆ์งธ ์š”์ฒญ๋ถ€ํ„ฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.
  • ์ด์œ : ๋ชจ๋ธ/ํ”„๋กœํ† ํƒ€์ž… ๋ฉ”๋ชจ๋ฆฌ ์บ์‹œ ์žฌ์‚ฌ์šฉ

์ฃผ์˜

  • .env์˜ ์‹ค์ œ ๋น„๋ฐ€๋ฒˆํ˜ธ/ํ† ํฐ์€ ์ปค๋ฐ‹ํ•˜์ง€ ๋งˆ์„ธ์š”.
  • generated_routes, cache, *.tsbuildinfo ๊ฐ™์€ ์‹คํ–‰ ์‚ฐ์ถœ๋ฌผ์€ ๋ณดํ†ต ๋ฒ„์ „๊ด€๋ฆฌ ์ œ์™ธ๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.