docker compose 수정 ,
parent
1a803b7fa0
commit
dc50fc6d8c
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 프록시 사용 시 동일 출처라 보통 불필요.
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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:
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue