o2o-triple-pick/backend/.env.example
jwkim 277378477a 오늘의 응원가 자동 생성 파이프라인 (Suno)
- 경기 맥락(전날 결과·순위·연전 차수·선발투수) 조립 → LLM 작사
  (콜앤리스폰스·섹션 태그 형식) → Suno(sunoapi.org) 생성 → songs 테이블
- 워커: 킥오프 150분 전 윈도우 진입 시 생성 시작 + 2분 주기 폴링
- API: GET /api/songs/today · POST /api/songs/callback(싱크대)
  · POST /api/songs/generate(관리자 강제 생성)
- 프론트: MusicBar 가 경기 상세·메인에서 오늘의 응원가를 동적 로드
  (정적 플레이리스트는 폴백 유지)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-25 09:33:34 +09:00

88 lines
3.8 KiB
Plaintext

# ─────────────────────────────────────────────────────────────
# TriplePick 백엔드 환경변수 — 복사: cp .env.example .env
# ─────────────────────────────────────────────────────────────
# ── 데이터베이스 (외부 PostgreSQL 연결) ──
# DB_HOST 가 설정되면 아래 DB_* 로 접속 URL 을 조합한다(특수문자 비밀번호 안전 처리).
# 비밀번호에 # 가 들어가면 따옴표로 감쌀 것: DB_PASSWORD="비밀#번호"
DB_NAME=triplepick
DB_USER=o2o_db_admin
DB_PASSWORD=changeme
DB_HOST=172.30.1.36
DB_PORT=5432
# (대안) DB_HOST 를 비워두면 아래 DATABASE_URL 을 그대로 사용. 로컬 sqlite 테스트 등.
# DATABASE_URL=postgresql+asyncpg://triplepick:triplepick@localhost:5432/triplepick
# 일반
TIMEZONE=Asia/Seoul
CORS_ORIGINS=*
PUBLIC_ORIGIN=http://localhost:8080
# 투표 윈도우 (도메인 규칙)
VOTE_OPEN_HOURS_BEFORE=168 # 오픈 = 킥오프 D-7
VOTE_LOCK_MINUTES_BEFORE=5 # 마감 = 킥오프 5분 전
DEMO_FORCE_OPEN=true # 운영 배포 시 false
# 스케줄링 서버 (워커)
# 경기 일정 동적 수집: 매일 KST 09:00 외부 소스에서 일정·투표시간 갱신
SCHEDULE_SYNC_HOUR=9
SCHEDULE_SYNC_MINUTE=0
SCHEDULE_SOURCE=openfootball # openfootball(키 불필요) | football-data(토큰) | fallback
SCHEDULE_URL=https://raw.githubusercontent.com/openfootball/worldcup.json/master/2026/worldcup.json
SCHEDULE_GROUP=Group A
FOOTBALL_DATA_TOKEN= # football-data 사용 시 토큰 (football-data.org/client/register)
FOOTBALL_DATA_COMPETITION=WC
# 결과(스코어) 소스 — 일정과 분리. 비우면 SCHEDULE_SOURCE 사용.
# openfootball 은 결과 미게시 → 자동 종료 쓰려면 football-data 권장.
RESULT_SOURCE=football-data
AI_GENERATE_HOUR=0 # 매일 KST 00:05 AI 예측 생성
AI_GENERATE_MINUTE=5
RESULT_EMAIL_DELAY_MINUTES=180 # 경기 종료 3시간 후 결과 메일
STATUS_TICK_SECONDS=60
# 관리자 (강한 토큰으로 교체)
ADMIN_API_TOKEN=change-me-admin-token
# ── 카카오 로그인 (o2o-castad-backend 인증 이식) ──
# 카카오 개발자 콘솔(developers.kakao.com) 앱의 REST API 키.
# redirect_uri 는 콘솔 [카카오 로그인 > Redirect URI] 에 등록돼 있어야 한다.
# 운영: https://triplepick.o2o.kr/api/auth/kakao/callback
KAKAO_CLIENT_ID=
KAKAO_CLIENT_SECRET= # 콘솔에서 Client Secret 활성화한 경우만
KAKAO_REDIRECT_URI=http://localhost:8080/api/auth/kakao/callback
JWT_SECRET=change-me-triplepick-jwt-secret # 32자 이상 무작위 문자열로 교체
# ── 외부 연동: AI 3모델 (실연동, 키 없으면 해당 모델 생성 생략) ──
OPENAI_API_KEY=
OPENAI_MODEL=gpt-4o
ANTHROPIC_API_KEY=
ANTHROPIC_MODEL=claude-opus-4-8
GOOGLE_API_KEY=
GOOGLE_MODEL=gemini-2.5-flash
# ── 외부 연동: 축구 데이터 (API-Football 무료 티어) ──
# 키 없으면 데이터 수집/주입 생략 → 기존(이름만) 예측으로 동작.
# 발급: https://dashboard.api-football.com (무료 100req/일)
FOOTBALL_API_KEY=
# ── 외부 연동: 이메일 ──
# 1순위: Azure Communication Services(ACS) Email (endpoint + accesskey)
# AZURE_ACS_SENDER 는 검증된 MailFrom 주소(예: donotreply@triplepick.o2o.kr)
AZURE_ACS_ENDPOINT=https://o2o-common-acs.korea.communication.azure.com/
AZURE_ACS_ACCESSKEY=
AZURE_ACS_SENDER=donotreply@triplepick.o2o.kr
# 2순위(폴백): SMTP — ACS 미설정 시 사용
SMTP_HOST=
SMTP_PORT=587
SMTP_USER=
SMTP_PASSWORD=
SMTP_FROM=TriplePick <no-reply@triplepick.app>
SMTP_STARTTLS=true
# Suno (sunoapi.org 게이트웨이) — 오늘의 응원가 자동 생성
SUNO_API_KEY=
SONGS_ENABLED=true