From 3e4097945498c120ccce13175a6f9e957672dc86 Mon Sep 17 00:00:00 2001 From: Eyo Chen Date: Sat, 28 Jun 2025 17:40:11 +0800 Subject: [PATCH] feat: add docker --- .env.example | 2 +- Dockerfile | 28 ++++++++++++++++++++++++++++ src/index.py | 12 ++++++++++-- 3 files changed, 39 insertions(+), 3 deletions(-) create mode 100644 Dockerfile diff --git a/.env.example b/.env.example index 1c2b543..932dcbc 100644 --- a/.env.example +++ b/.env.example @@ -1 +1 @@ -POLYGON_API_KEY=your_polygon_api_key \ No newline at end of file +MONGO_URL=mongodb://mongodb:27017 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..aab9579 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +FROM python:3.12-slim + +WORKDIR /app + +# Install dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + curl \ + build-essential \ + && rm -rf /var/lib/apt/lists/* + +# Install uv +RUN curl -LsSf https://astral.sh/uv/install.sh | sh && \ + mv /root/.local/bin/uv /usr/local/bin/uv + +# Ensure PATH includes /usr/local/bin +ENV PATH="/usr/local/bin:$PATH" + +# Copy project files +COPY . . + +# Run uv sync +RUN uv sync --frozen --no-cache + +# Expose port +EXPOSE 50051 + +# Run the application +CMD ["uv", "run", "src/index.py"] \ No newline at end of file diff --git a/src/index.py b/src/index.py index 01dac7d..5ec1358 100644 --- a/src/index.py +++ b/src/index.py @@ -1,3 +1,5 @@ +import logging +import os import grpc import proto.stock_pb2_grpc as stock_pb2_grpc from concurrent import futures @@ -11,16 +13,22 @@ load_dotenv() +logger = logging.getLogger(__name__) +logger.setLevel(logging.INFO) + + def serve(): - client = MongoClient("mongodb://localhost:27017") + client = MongoClient(os.getenv("MONGO_URI")) + logger.info("connected to mongodb") + stock_repo = StockRepository(client, "stock_db") portfolio_repo = PortfolioRepository(client, "stock_db") stock_usecase = StockUsecase(stock_repo, portfolio_repo) server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) stock_pb2_grpc.add_StockServiceServicer_to_server(StockService(stock_usecase), server) server.add_insecure_port("[::]:50051") - print("server is running...") + logger.info("server is running...") server.start() server.wait_for_termination()