docker compose 수정 ,

develop
hbyang 2026-06-10 15:23:05 +09:00
parent 1a803b7fa0
commit dc50fc6d8c
4 changed files with 42 additions and 35 deletions

View File

@ -2,8 +2,17 @@
# TriplePick 백엔드 환경변수 — 복사: cp .env.example .env # TriplePick 백엔드 환경변수 — 복사: cp .env.example .env
# ───────────────────────────────────────────────────────────── # ─────────────────────────────────────────────────────────────
# DB (docker-compose 내부 네트워크 기본값). 로컬 단독이면 localhost 로. # ── 데이터베이스 (외부 PostgreSQL 연결) ──
DATABASE_URL=postgresql+asyncpg://triplepick:triplepick@db:5432/triplepick # 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 TIMEZONE=Asia/Seoul

View File

@ -16,11 +16,34 @@ class Settings(BaseSettings):
) )
# ── 데이터베이스 ───────────────────────────────────────── # ── 데이터베이스 ─────────────────────────────────────────
# docker-compose 의 db 서비스를 가리키는 기본값. 로컬 단독 실행 시 .env 로 덮어쓴다. # 외부 DB 연결: DB_HOST 가 설정되면 아래 DB_* 항목으로 접속 URL 을 조합한다
# (비밀번호 특수문자는 SQLAlchemy 가 안전하게 인코딩). DB_HOST 미설정 시
# database_url(또는 sqlite 등 직접 지정값)을 그대로 사용.
db_host: str = ""
db_port: int = 5432
db_name: str = "triplepick"
db_user: str = "triplepick"
db_password: str = "triplepick"
# 직접 지정용 폴백 (DB_HOST 미설정 시 사용). 로컬 sqlite 테스트 등.
database_url: str = ( database_url: str = (
"postgresql+asyncpg://triplepick:triplepick@db:5432/triplepick" "postgresql+asyncpg://triplepick:triplepick@db:5432/triplepick"
) )
def sqlalchemy_url(self): # noqa: ANN201
"""엔진 생성용 URL. DB_HOST 가 있으면 DB_* 로 조합(특수문자 안전)."""
if self.db_host:
from sqlalchemy import URL
return URL.create(
"postgresql+asyncpg",
username=self.db_user,
password=self.db_password,
host=self.db_host,
port=self.db_port,
database=self.db_name,
)
return self.database_url
# ── 일반 ──────────────────────────────────────────────── # ── 일반 ────────────────────────────────────────────────
timezone: str = "Asia/Seoul" # 모든 경기 시각의 기준 (KST) timezone: str = "Asia/Seoul" # 모든 경기 시각의 기준 (KST)
cors_origins: str = "*" # 콤마구분. nginx 프록시 사용 시 동일 출처라 보통 불필요. cors_origins: str = "*" # 콤마구분. nginx 프록시 사용 시 동일 출처라 보통 불필요.

View File

@ -20,7 +20,7 @@ class Base(DeclarativeBase):
pass pass
engine = create_async_engine(settings.database_url, echo=False, pool_pre_ping=True) engine = create_async_engine(settings.sqlalchemy_url(), echo=False, pool_pre_ping=True)
SessionLocal = async_sessionmaker(engine, expire_on_commit=False, class_=AsyncSession) SessionLocal = async_sessionmaker(engine, expire_on_commit=False, class_=AsyncSession)

View File

@ -1,39 +1,21 @@
# TriplePick — 전체 스택을 한 번에 실행. # TriplePick — 외부 PostgreSQL 에 연결하는 구성 (로컬 db 컨테이너 없음).
# db PostgreSQL
# api FastAPI (uvicorn) # api FastAPI (uvicorn)
# worker APScheduler (상태전이 · 매일 AI 예측 생성 · 결과 메일) # worker APScheduler (상태전이 · 매일 AI 예측 생성 · 결과 메일)
# frontend Vite 빌드 → nginx (정적 + /api 프록시) # frontend Vite 빌드 → nginx (정적 + /api 프록시)
# #
# 실행: cp backend/.env.example backend/.env (키 채우기) → docker compose up --build # DB 는 이미 떠 있는 외부 PostgreSQL(예: 172.30.1.36:5432)에 연결한다.
# backend/.env 에 DB_HOST/DB_PORT/DB_NAME/DB_USER/DB_PASSWORD 를 채우면
# app 이 접속 URL 을 조합해 그 DB 에 스키마(테이블)를 생성한다.
#
# 실행: cp backend/.env.example backend/.env (DB·키 채우기) → docker compose up --build
# 접속: http://localhost:8080 # 접속: http://localhost:8080
services: services:
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: triplepick
POSTGRES_PASSWORD: triplepick
POSTGRES_DB: triplepick
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U triplepick -d triplepick"]
interval: 5s
timeout: 5s
retries: 10
ports:
- "5432:5432"
api: api:
build: ./backend build: ./backend
env_file: env_file:
- path: ./backend/.env - path: ./backend/.env
required: false required: false
environment:
DATABASE_URL: postgresql+asyncpg://triplepick:triplepick@db:5432/triplepick
depends_on:
db:
condition: service_healthy
ports: ports:
- "8000:8000" - "8000:8000"
@ -43,11 +25,7 @@ services:
env_file: env_file:
- path: ./backend/.env - path: ./backend/.env
required: false required: false
environment:
DATABASE_URL: postgresql+asyncpg://triplepick:triplepick@db:5432/triplepick
depends_on: depends_on:
db:
condition: service_healthy
api: api:
condition: service_started condition: service_started
@ -57,6 +35,3 @@ services:
- api - api
ports: ports:
- "8080:80" - "8080:80"
volumes:
pgdata: