Files
ai-contract-platform/yuqei-infra/docker/contract-api.Dockerfile
T

27 lines
1.5 KiB
Docker

ARG PYTHON_BASE_IMAGE=python:3.12-slim@sha256:44ff437bba879d4941b710a369a8f19266aea34b29002807f0c487fabc9eec9b
FROM ${PYTHON_BASE_IMAGE}
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PYTHONPATH=/app/yuqei-contract-platform/services/contract-api/src:/app/yuqei-ai-sdk-python/src \
YUQEI_MIN_GLIBC=2.28
WORKDIR /app
ARG PIP_INDEX_URL=https://pypi.org/simple
COPY yuqei-contract-platform/services/contract-api/pyproject.toml /tmp/contract-api-pyproject.toml
COPY yuqei-ai-sdk-python/pyproject.toml /tmp/yuqei-ai-sdk-python-pyproject.toml
COPY yuqei-infra/requirements/contract-api-linux-x86_64-py312.txt /tmp/contract-api-requirements.lock
RUN python -c "import os, platform; name, version = platform.libc_ver(); minimum = tuple(map(int, os.environ['YUQEI_MIN_GLIBC'].split('.'))); actual = tuple(map(int, version.split('.')[:2])); assert name == 'glibc' and actual >= minimum, f'Contract API requires glibc >= {minimum[0]}.{minimum[1]}, found {name} {version}'"
RUN python -m pip install --no-cache-dir --only-binary=:all: --require-hashes \
--index-url "$PIP_INDEX_URL" \
--requirement /tmp/contract-api-requirements.lock
COPY yuqei-contract-platform/services/contract-api yuqei-contract-platform/services/contract-api
COPY yuqei-ai-sdk-python yuqei-ai-sdk-python
COPY yuqei-infra/scripts/prepare-policy-legal-approval.py yuqei-infra/scripts/prepare-policy-legal-approval.py
EXPOSE 8100
CMD ["sh", "-c", "python -m uvicorn yuqei_contract_api.main:app --host 0.0.0.0 --port 8100 --workers ${CONTRACT_API_UVICORN_WORKERS:-2} --no-access-log"]