o2o-negosium-original/agent/config/server_configs.py

43 lines
1.9 KiB
Python

import os
from config.config_loader import Configs
from config.config_models import WebServerConfig, LogConfig, MainDBConfig, AgentConfig, OpenAIConfig
# 실행 환경 결정 (기본 local). 환경변수 APP_ENV 로 변경. (backend 와 동일)
APP_ENV = os.environ.get("APP_ENV", "local")
_config_dir = os.path.dirname(__file__)
_config_file = os.path.join(_config_dir, f"config.{APP_ENV}.toml")
# 운영 전제: 항상 APP_ENV=local 로 띄운다 → config.local.toml 사용 (test/docker 도 local 로 실행).
if not os.path.exists(_config_file):
raise FileNotFoundError(f"설정 파일이 없습니다: {_config_file} (APP_ENV={APP_ENV}). APP_ENV=local 로 실행하세요.")
configs = Configs(_config_file)
web_server_config: WebServerConfig = configs.get(WebServerConfig)
log_config: LogConfig = configs.get(LogConfig)
main_db_config: MainDBConfig = configs.get(MainDBConfig)
agent_config: AgentConfig = configs.get(AgentConfig)
openai_config: OpenAIConfig = configs.get(OpenAIConfig) or OpenAIConfig()
# DB 접속 env override (config.local.toml 은 그대로 두고, 도커 등에서 host 만 바꾸기 위함).
# 컨테이너 안에서는 127.0.0.1 이 자기 자신이라 호스트 DB 를 못 찾으므로,
# docker-compose 가 DB_HOST=host.docker.internal 을 주입한다. 로컬 실행은 env 미설정 → toml 그대로.
def _apply_db_env_override(cfg: MainDBConfig):
h = os.environ.get("DB_HOST")
if h:
cfg.write_host = cfg.read_host = h
if os.environ.get("DB_PORT"):
cfg.write_port = cfg.read_port = int(os.environ["DB_PORT"])
if os.environ.get("DB_USER"):
cfg.write_id = cfg.read_id = os.environ["DB_USER"]
if os.environ.get("DB_PASSWORD"):
cfg.write_pw = cfg.read_pw = os.environ["DB_PASSWORD"]
if os.environ.get("DB_NAME"):
cfg.name = os.environ["DB_NAME"]
_apply_db_env_override(main_db_config)