# ============================================================================= # Multi-stage Dockerfile for Webscout API Server with Auto-Updater (4hr) # ============================================================================= # ------------------------------------------------------------------- # Stage 1: Builder - Install dependencies and build the application # ------------------------------------------------------------------- FROM python:3.11-slim as builder ARG WEBSCOUT_VERSION=latest ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ PIP_NO_CACHE_DIR=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 \ PIP_DEFAULT_TIMEOUT=100 RUN apt-get update && apt-get install -y --no-install-recommends \ build-essential gcc git curl && \ rm -rf /var/lib/apt/lists/* RUN python -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" RUN pip install --upgrade pip setuptools wheel RUN if [ "$WEBSCOUT_VERSION" = "latest" ]; then \ pip install "webscout[api] @ git+https://github.com/OEvortex/Webscout.git"; \ else \ pip install "webscout[api] @ git+https://github.com/OEvortex/Webscout.git@${WEBSCOUT_VERSION}"; \ fi RUN pip install \ gunicorn[gthread] \ uvicorn[standard] \ prometheus-client \ structlog \ motor \ pymongo # ------------------------------------------------------------------- # Stage 2: Runtime - Minimal secure image with auto-updater # ------------------------------------------------------------------- FROM python:3.11-slim as runtime ARG BUILD_DATE ARG VCS_REF ARG VERSION LABEL maintainer="OEvortex" \ org.label-schema.name="webscout-api" \ org.label-schema.version=$VERSION \ org.label-schema.vcs-url="https://github.com/OEvortex/Webscout" \ org.label-schema.build-date=$BUILD_DATE RUN groupadd --gid 1000 webscout && \ useradd --uid 1000 --gid webscout --shell /bin/bash --create-home webscout ENV PYTHONUNBUFFERED=1 \ PYTHONDONTWRITEBYTECODE=1 \ PYTHONPATH=/app \ PATH="/opt/venv/bin:$PATH" \ PYTHONHASHSEED=random \ MALLOC_ARENA_MAX=2 \ WEBSCOUT_HOST=0.0.0.0 \ WEBSCOUT_PORT=7860 \ WEBSCOUT_WORKERS=1 \ WEBSCOUT_LOG_LEVEL=info \ WEBSCOUT_NO_AUTH=true \ WEBSCOUT_NO_RATE_LIMIT=true \ WEBSCOUT_DATA_DIR=/app/data \ WEBSCOUT_API_TITLE="Webscout API" \ WEBSCOUT_API_DESCRIPTION="OpenAI-compatible LLM API" \ WEBSCOUT_API_VERSION="0.3.0" \ WEBSCOUT_API_DOCS_URL="/docs" \ WEBSCOUT_API_REDOC_URL="/redoc" \ WEBSCOUT_API_OPENAPI_URL="/openapi.json" RUN apt-get update && apt-get install -y --no-install-recommends \ git libffi8 libssl3 curl procps && \ rm -rf /var/lib/apt/lists/* && apt-get clean COPY --from=builder /opt/venv /opt/venv WORKDIR /app RUN mkdir -p /app/logs /app/data && \ chown -R webscout:webscout /app # Auto-update script (every 4 hours) using background process RUN echo '#!/bin/bash\n\ (pip install -U "webscout[api] @ git+https://github.com/OEvortex/Webscout.git" && echo "[INFO] Webscout updated at start") &\n\ while true; do\n\ sleep 14400\n\ echo "[INFO] Auto-updating Webscout..."\n\ pip install -U "webscout[api] @ git+https://github.com/OEvortex/Webscout.git"\n\ done &\n\ exec "$@"' > /entrypoint.sh && chmod +x /entrypoint.sh USER webscout EXPOSE $WEBSCOUT_PORT HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost:${WEBSCOUT_PORT:-8000}/health || exit 1 ENTRYPOINT ["/entrypoint.sh"] CMD ["python", "-m", "webscout.auth.server"]