Sam3838 commited on
Commit
96548ed
·
verified ·
1 Parent(s): 44584bc

Create Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +105 -0
Dockerfile ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # =============================================================================
2
+ # Multi-stage Dockerfile for Webscout API Server with Auto-Updater (4hr)
3
+ # =============================================================================
4
+
5
+ # -------------------------------------------------------------------
6
+ # Stage 1: Builder - Install dependencies and build the application
7
+ # -------------------------------------------------------------------
8
+ FROM python:3.11-slim as builder
9
+
10
+ ARG WEBSCOUT_VERSION=latest
11
+ ENV PYTHONUNBUFFERED=1 \
12
+ PYTHONDONTWRITEBYTECODE=1 \
13
+ PIP_NO_CACHE_DIR=1 \
14
+ PIP_DISABLE_PIP_VERSION_CHECK=1 \
15
+ PIP_DEFAULT_TIMEOUT=100
16
+
17
+ RUN apt-get update && apt-get install -y --no-install-recommends \
18
+ build-essential gcc git curl && \
19
+ rm -rf /var/lib/apt/lists/*
20
+
21
+ RUN python -m venv /opt/venv
22
+ ENV PATH="/opt/venv/bin:$PATH"
23
+
24
+ RUN pip install --upgrade pip setuptools wheel
25
+
26
+ RUN if [ "$WEBSCOUT_VERSION" = "latest" ]; then \
27
+ pip install "webscout[api] @ git+https://github.com/OEvortex/Webscout.git"; \
28
+ else \
29
+ pip install "webscout[api] @ git+https://github.com/OEvortex/Webscout.git@${WEBSCOUT_VERSION}"; \
30
+ fi
31
+
32
+ RUN pip install \
33
+ gunicorn[gthread] \
34
+ uvicorn[standard] \
35
+ prometheus-client \
36
+ structlog \
37
+ motor \
38
+ pymongo
39
+
40
+ # -------------------------------------------------------------------
41
+ # Stage 2: Runtime - Minimal secure image with auto-updater
42
+ # -------------------------------------------------------------------
43
+ FROM python:3.11-slim as runtime
44
+
45
+ ARG BUILD_DATE
46
+ ARG VCS_REF
47
+ ARG VERSION
48
+
49
+ LABEL maintainer="OEvortex" \
50
+ org.label-schema.name="webscout-api" \
51
+ org.label-schema.version=$VERSION \
52
+ org.label-schema.vcs-url="https://github.com/OEvortex/Webscout" \
53
+ org.label-schema.build-date=$BUILD_DATE
54
+
55
+ RUN groupadd --gid 1000 webscout && \
56
+ useradd --uid 1000 --gid webscout --shell /bin/bash --create-home webscout
57
+
58
+ ENV PYTHONUNBUFFERED=1 \
59
+ PYTHONDONTWRITEBYTECODE=1 \
60
+ PYTHONPATH=/app \
61
+ PATH="/opt/venv/bin:$PATH" \
62
+ PYTHONHASHSEED=random \
63
+ MALLOC_ARENA_MAX=2 \
64
+ WEBSCOUT_HOST=0.0.0.0 \
65
+ WEBSCOUT_PORT=7860 \
66
+ WEBSCOUT_WORKERS=1 \
67
+ WEBSCOUT_LOG_LEVEL=info \
68
+ WEBSCOUT_NO_AUTH=true \
69
+ WEBSCOUT_NO_RATE_LIMIT=true \
70
+ WEBSCOUT_DATA_DIR=/app/data \
71
+ WEBSCOUT_API_TITLE="Webscout API" \
72
+ WEBSCOUT_API_DESCRIPTION="OpenAI-compatible LLM API" \
73
+ WEBSCOUT_API_VERSION="0.3.0" \
74
+ WEBSCOUT_API_DOCS_URL="/docs" \
75
+ WEBSCOUT_API_REDOC_URL="/redoc" \
76
+ WEBSCOUT_API_OPENAPI_URL="/openapi.json"
77
+
78
+ RUN apt-get update && apt-get install -y --no-install-recommends \
79
+ git libffi8 libssl3 curl procps && \
80
+ rm -rf /var/lib/apt/lists/* && apt-get clean
81
+
82
+ COPY --from=builder /opt/venv /opt/venv
83
+
84
+ WORKDIR /app
85
+ RUN mkdir -p /app/logs /app/data && \
86
+ chown -R webscout:webscout /app
87
+
88
+ # Auto-update script (every 4 hours) using background process
89
+ RUN echo '#!/bin/bash\n\
90
+ (pip install -U "webscout[api] @ git+https://github.com/OEvortex/Webscout.git" && echo "[INFO] Webscout updated at start") &\n\
91
+ while true; do\n\
92
+ sleep 14400\n\
93
+ echo "[INFO] Auto-updating Webscout..."\n\
94
+ pip install -U "webscout[api] @ git+https://github.com/OEvortex/Webscout.git"\n\
95
+ done &\n\
96
+ exec "$@"' > /entrypoint.sh && chmod +x /entrypoint.sh
97
+
98
+ USER webscout
99
+
100
+ EXPOSE $WEBSCOUT_PORT
101
+
102
+ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
103
+ CMD curl -f http://localhost:${WEBSCOUT_PORT:-8000}/health || exit 1
104
+ ENTRYPOINT ["/entrypoint.sh"]
105
+ CMD ["python", "-m", "webscout.auth.server"]