diff --git a/backend/api/Dockerfile b/backend/api/Dockerfile index 84c9c56..9db7ac5 100644 --- a/backend/api/Dockerfile +++ b/backend/api/Dockerfile @@ -8,4 +8,4 @@ COPY ./envs/backend.env /opt/.env COPY ./backend/api /app/api COPY ./backend/shared_mcp /app/shared_mcp ENV PYTHONPATH /app:$PYTHONPATH -ENTRYPOINT ["uv", "run", "fastapi", "run", "api/main.py"] +ENTRYPOINT ["uv", "run", "fastapi", "run", "api/main.py", "--root-path=/api"] diff --git a/backend/mcp/Dockerfile b/backend/mcp/Dockerfile index 339b20f..af1aaab 100644 --- a/backend/mcp/Dockerfile +++ b/backend/mcp/Dockerfile @@ -4,10 +4,9 @@ WORKDIR /app COPY ./backend/mcp/uv.lock ./backend/mcp/pyproject.toml . RUN uv sync --frozen && rm ./uv.lock ./pyproject.toml RUN apt-get update && apt-get install -y --no-install-recommends \ - curl && \ - curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \ - apt-get install -y --no-install-recommends nodejs + curl COPY ./backend/mcp ./mcp COPY ./backend/shared_mcp ./shared_mcp ENV PYTHONPATH /app:$PYTHONPATH +ENV PATH /app:$PATH ENTRYPOINT ["uv", "run", "mcp/main.py"] diff --git a/compose-dev.yaml b/compose-dev.yaml index 4ae3554..9bd9907 100644 --- a/compose-dev.yaml +++ b/compose-dev.yaml @@ -4,7 +4,7 @@ services: build: context: . dockerfile: ./backend/api/Dockerfile - entrypoint: bash -c "uv run fastapi run api/main.py --reload" + entrypoint: uv run fastapi run api/main.py --root-path=/api --reload env_file: - ./envs/shared_mcp.env ports: @@ -21,6 +21,15 @@ services: dockerfile: ./backend/mcp/Dockerfile env_file: - ./envs/shared_mcp.env + ports: + - 8050:8050 volumes: - ./backend/mcp:/app/mcp - ./backend/shared_mcp:/app/shared_mcp + + nginx: + image: nginx:1.26.3-alpine + ports: + - 80:80 + volumes: + - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf diff --git a/compose.yaml b/compose.yaml index 8429bbb..977348e 100644 --- a/compose.yaml +++ b/compose.yaml @@ -15,3 +15,19 @@ services: env_file: - ./envs/shared_mcp.env restart: unless-stopped + + nginx: + image: nginx:1.26.3-alpine + ports: + - 80:80 + volumes: + - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf + restart: unless-stopped + depends_on: + api: + condition: service_healthy + healthcheck: + test: curl -f http://localhost/docs + interval: 30s + timeout: 10s + retries: 3 diff --git a/nginx/nginx.conf b/nginx/nginx.conf new file mode 100644 index 0000000..a75d671 --- /dev/null +++ b/nginx/nginx.conf @@ -0,0 +1,35 @@ +upstream api { + server api:8000; +} + +server { + listen 80; + + location / { + return 301 /api/docs; + } + + location /api/ { + add_header Access-Control-Allow-Origin "*"; + add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS, HEAD"; + add_header Access-Control-Allow-Headers "content-type"; + + proxy_set_header Cache-Control 'no-cache'; + proxy_set_header Content-Type $http_content_type; + proxy_set_header X-Accel-Buffering 'no'; + + proxy_http_version 1.1; + proxy_set_header Connection ""; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Host $host; + + proxy_buffering off; + proxy_redirect off; + proxy_pass http://api/; + } + + location /api/docs { + proxy_redirect off; + proxy_pass http://api/docs; + } +}