-
-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathDockerfile.prod
More file actions
58 lines (41 loc) · 1.45 KB
/
Dockerfile.prod
File metadata and controls
58 lines (41 loc) · 1.45 KB
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
# Multi-stage Dockerfile for Balancer Application
# Produces a single image with Django backend serving the React frontend
# Stage 1: Build Frontend
FROM node:18 AS frontend-builder
WORKDIR /frontend
# Copy frontend package files
COPY frontend/package*.json ./
# Install dependencies
RUN npm ci --legacy-peer-deps
# Copy frontend source
COPY frontend/ ./
# Build frontend - outputs to dist/ as configured in vite.config.ts
RUN npm run build
# Stage 2: Build Backend
FROM python:3.11.4-slim-bullseye
# Receive version argument from build command
ARG VERSION
ENV VERSION=${VERSION}
# Set work directory
WORKDIR /usr/src/app
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
# Install system dependencies
RUN apt-get update && apt-get install -y netcat && rm -rf /var/lib/apt/lists/*
# Install Python dependencies
RUN pip install --upgrade pip --no-cache-dir
COPY server/requirements.txt .
# Install CPU-only torch to save space (avoids ~4GB of CUDA libs)
RUN pip install torch --index-url https://download.pytorch.org/whl/cpu --no-cache-dir
RUN pip install -r requirements.txt --no-cache-dir
# Copy backend application code
COPY server/ .
# Copy frontend build from frontend-builder stage to where Django expects it
COPY --from=frontend-builder /frontend/dist ./build
# Expose port
EXPOSE 8000
# Run entrypoint
ENTRYPOINT ["./entrypoint.prod.sh"]
# Start gunicorn
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000", "--noreload"]