NitinBot001 commited on
Commit
e4b4c0d
·
verified ·
1 Parent(s): 7310181

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +12 -71
Dockerfile CHANGED
@@ -1,80 +1,21 @@
1
  FROM python:3.11.11-slim-bullseye
2
 
3
- # Install system dependencies as root
4
- RUN apt-get update -qq \
5
- && apt-get -qqq install --no-install-recommends -y \
6
- pkg-config gcc g++ git curl \
7
- && apt-get clean \
8
- && rm -rf /var/lib/apt/lists/*
9
 
10
- # Create non-root user with specific UID/GID
11
- # Using UID/GID 1000 which is common for the first user
12
- RUN groupadd -r -g 1000 libretranslate \
13
- && useradd -r -u 1000 -g 1000 -m -d /home/libretranslate -s /bin/bash libretranslate
14
-
15
- # Set working directory
16
- WORKDIR /app
17
-
18
- # Clone repository as root, then change ownership
19
- RUN git clone https://github.com/LibreTranslate/LibreTranslate.git . \
20
- && chown -R libretranslate:libretranslate /app \
21
- && apt-get remove -y git \
22
- && apt-get autoremove -y \
23
- && apt-get clean \
24
- && rm -rf /var/lib/apt/lists/*
25
-
26
- # Create necessary directories with proper permissions
27
- RUN mkdir -p /app/db /app/logs /tmp/prometheus_data \
28
- && chown -R libretranslate:libretranslate /app /tmp/prometheus_data \
29
- && chmod 755 /app /app/db /app/logs /tmp/prometheus_data
30
-
31
- # Switch to non-root user for all subsequent operations
32
  USER libretranslate
 
33
 
34
- # Create virtual environment as non-root user
35
- RUN python -m venv venv \
36
- && ./venv/bin/pip install --upgrade pip wheel
37
 
38
- # Install Python dependencies as non-root user
39
- RUN ./venv/bin/pip install Babel==2.12.1 \
40
- && ./venv/bin/python scripts/compile_locales.py \
41
- && ./venv/bin/pip install torch==2.2.0 --extra-index-url https://download.pytorch.org/whl/cpu \
42
- && ./venv/bin/pip install "numpy<2" \
43
- && ./venv/bin/pip install -e . \
44
- && ./venv/bin/pip install gunicorn \
45
- && ./venv/bin/pip cache purge
46
 
47
- # Create wsgi.py as non-root user
48
- RUN echo 'from app.main import create_app\n\
49
- \n\
50
- def app(*args, **kwargs):\n\
51
- import argparse\n\
52
- parser = argparse.ArgumentParser()\n\
53
- import app.main as main\n\
54
- main.get_args(parser)\n\
55
- args = parser.parse_args([])\n\
56
- for k, v in kwargs.items():\n\
57
- setattr(args, k, v)\n\
58
- return create_app(args)' > /app/wsgi.py
59
-
60
- # Set environment variables
61
- ENV PROMETHEUS_MULTIPROC_DIR=/tmp/prometheus_data
62
- ENV HOME=/home/libretranslate
63
- ENV USER=libretranslate
64
-
65
- # Expose port (as non-root, can only bind to ports > 1024)
66
  EXPOSE 7860
67
 
68
- # Health check running as non-root
69
- HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \
70
- CMD ./venv/bin/python -c "import urllib.request; urllib.request.urlopen('http://localhost:7860/languages').read()"
71
-
72
- # Run gunicorn as non-root user
73
- CMD ["./venv/bin/gunicorn", \
74
- "--workers", "3", \
75
- "--bind", "0.0.0.0:7860", \
76
- "--timeout", "300", \
77
- "--log-level", "info", \
78
- "--access-logfile", "-", \
79
- "--error-logfile", "-", \
80
- "wsgi:app"]
 
1
  FROM python:3.11.11-slim-bullseye
2
 
3
+ # Install dependencies
4
+ RUN apt-get update && apt-get install -y --no-install-recommends \
5
+ build-essential pkg-config \
6
+ && rm -rf /var/lib/apt/lists/*
 
 
7
 
8
+ # Create non-root user
9
+ RUN useradd -m -u 1000 libretranslate
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  USER libretranslate
11
+ WORKDIR /home/libretranslate
12
 
13
+ # Install LibreTranslate
14
+ RUN pip install --user --no-cache-dir libretranslate
 
15
 
16
+ ENV PATH="/home/libretranslate/.local/bin:$PATH"
 
 
 
 
 
 
 
17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
18
  EXPOSE 7860
19
 
20
+ # Run LibreTranslate directly (it has built-in production server)
21
+ CMD ["libretranslate", "--host", "0.0.0.0", "--port", "7860"]