feat(insta-lab): project scaffold (Dockerfile, requirements, config)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
17
insta-lab/Dockerfile
Normal file
17
insta-lab/Dockerfile
Normal file
@@ -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"]
|
||||||
0
insta-lab/app/__init__.py
Normal file
0
insta-lab/app/__init__.py
Normal file
25
insta-lab/app/config.py
Normal file
25
insta-lab/app/config.py
Normal file
@@ -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", "영화"],
|
||||||
|
}
|
||||||
0
insta-lab/app/templates/__init__.py
Normal file
0
insta-lab/app/templates/__init__.py
Normal file
3
insta-lab/pytest.ini
Normal file
3
insta-lab/pytest.ini
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
[pytest]
|
||||||
|
asyncio_mode = auto
|
||||||
|
pythonpath = .
|
||||||
9
insta-lab/requirements.txt
Normal file
9
insta-lab/requirements.txt
Normal file
@@ -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
|
||||||
0
insta-lab/tests/__init__.py
Normal file
0
insta-lab/tests/__init__.py
Normal file
Reference in New Issue
Block a user