diff --git a/insta-lab/Dockerfile b/insta-lab/Dockerfile new file mode 100644 index 0000000..470d10b --- /dev/null +++ b/insta-lab/Dockerfile @@ -0,0 +1,17 @@ +FROM python:3.12-slim +ENV PYTHONUNBUFFERED=1 + +WORKDIR /app + +RUN apt-get update && apt-get install -y --no-install-recommends \ + fonts-noto-cjk fonts-noto-cjk-extra \ + && rm -rf /var/lib/apt/lists/* + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt +RUN playwright install --with-deps chromium + +COPY . . + +EXPOSE 8000 +CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] diff --git a/insta-lab/app/__init__.py b/insta-lab/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/insta-lab/app/config.py b/insta-lab/app/config.py new file mode 100644 index 0000000..347aae2 --- /dev/null +++ b/insta-lab/app/config.py @@ -0,0 +1,25 @@ +import os + +NAVER_CLIENT_ID = os.getenv("NAVER_CLIENT_ID", "") +NAVER_CLIENT_SECRET = os.getenv("NAVER_CLIENT_SECRET", "") +ANTHROPIC_API_KEY = os.getenv("ANTHROPIC_API_KEY", "") +ANTHROPIC_MODEL_HAIKU = os.getenv("ANTHROPIC_MODEL_HAIKU", "claude-haiku-4-5-20251001") +ANTHROPIC_MODEL_SONNET = os.getenv("ANTHROPIC_MODEL_SONNET", "claude-sonnet-4-6") + +INSTA_DATA_PATH = os.getenv("INSTA_DATA_PATH", "/app/data") +DB_PATH = os.path.join(INSTA_DATA_PATH, "insta.db") +CARDS_DIR = os.path.join(INSTA_DATA_PATH, "insta_cards") +CARD_TEMPLATE_DIR = os.getenv("CARD_TEMPLATE_DIR", "/app/app/templates") + +CORS_ALLOW_ORIGINS = os.getenv( + "CORS_ALLOW_ORIGINS", "http://localhost:3007,http://localhost:8080" +) + +NEWS_PER_CATEGORY = int(os.getenv("NEWS_PER_CATEGORY", "30")) +KEYWORDS_PER_CATEGORY = int(os.getenv("KEYWORDS_PER_CATEGORY", "5")) + +DEFAULT_CATEGORY_SEEDS = { + "economy": ["금리", "인플레이션", "환율", "주식", "부동산"], + "psychology": ["심리학", "스트레스", "우울증", "관계", "자존감"], + "celebrity": ["연예인", "드라마", "예능", "K-POP", "영화"], +} diff --git a/insta-lab/app/templates/__init__.py b/insta-lab/app/templates/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/insta-lab/pytest.ini b/insta-lab/pytest.ini new file mode 100644 index 0000000..82bc8d1 --- /dev/null +++ b/insta-lab/pytest.ini @@ -0,0 +1,3 @@ +[pytest] +asyncio_mode = auto +pythonpath = . diff --git a/insta-lab/requirements.txt b/insta-lab/requirements.txt new file mode 100644 index 0000000..3d26add --- /dev/null +++ b/insta-lab/requirements.txt @@ -0,0 +1,9 @@ +fastapi==0.115.6 +uvicorn[standard]==0.34.0 +requests==2.32.3 +httpx>=0.27 +anthropic==0.52.0 +jinja2>=3.1.4 +playwright==1.48.0 +pytest>=8.0 +pytest-asyncio>=0.24 diff --git a/insta-lab/tests/__init__.py b/insta-lab/tests/__init__.py new file mode 100644 index 0000000..e69de29