# builder image
ARG BASE_IMAGE
FROM ${BASE_IMAGE} AS builder
ARG VERSION
ARG INDEX_URL
RUN echo "VERSION: ${VERSION}"
RUN echo "INDEX_URL: ${INDEX_URL}"
# Set working directory
WORKDIR /app
COPY backend .
RUN pip install uv -i ${INDEX_URL}
RUN sed -i "s#url = \"[^\"]*\"#url = \"${INDEX_URL}\"#g" pyproject.toml
RUN uv sync --group dev
RUN uv build --out-dir /app/dist
# builder image
ARG BASE_IMAGE
FROM ${BASE_IMAGE} AS runtime
ARG VERSION
ARG INDEX_URL
ARG TRUSTED_HOST
RUN echo "VERSION: ${VERSION}"
RUN echo "INDEX_URL: ${INDEX_URL}"
RUN echo "TRUSTED_HOST: ${TRUSTED_HOST}"
ARG WHL_NAME="openjiuwen_studio-${VERSION}-py3-none-any.whl"
RUN echo "WHL_NAME: ${WHL_NAME}"
RUN useradd --create-home --shell /bin/bash app
RUN mkdir -p /app/dist /app/logs/run /app/logs/performance /app/logs/interface
RUN chown -R app:app /app
USER app
# Copy Python packages from builder stage
COPY --from=builder /app/dist/${WHL_NAME} /app/dist
RUN pip3 install /app/dist/${WHL_NAME} --trusted-host ${TRUSTED_HOST} --index-url ${INDEX_URL} --target=/app/site-packages --retries=5 --timeout=120
USER root
ENV PYTHONPATH=/app/site-packages/openjiuwen_studio:/app/site-packages
COPY docker/entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
WORKDIR /app
EXPOSE 8000
# Health check with configurable port
HEALTHCHECK --interval=30s --timeout=30s --start-period=30s --retries=5 \
CMD curl -f http://localhost:8000/api/health || exit 1
ENTRYPOINT ["/entrypoint.sh"]
# Start the application
CMD ["python", "-m", "openjiuwen_studio.main", "--port", "8000"]