File size: 3,538 Bytes
eb2f14a 6dabc37 eb2f14a 0690977 6dabc37 eb2f14a 6dabc37 eb2f14a 6dabc37 eb2f14a 6dabc37 eb2f14a 6dabc37 eb2f14a f4bf626 eb2f14a 6dabc37 eb2f14a 6dabc37 eb2f14a f6b8e6a eb2f14a f4bf626 f6b8e6a 324dfd1 f6b8e6a 6dabc37 f6b8e6a af6d5de eb2f14a 6dabc37 eb2f14a 0690977 f6b8e6a 6dabc37 eb2f14a 0690977 eb2f14a 0690977 eb2f14a f4bf626 6dabc37 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
# =============================================================================
# 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"] |