27 lines
1.5 KiB
Docker
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"]
|