1
- # Dockerfile
1
+ # Base Image - slim Python
2
+ FROM python:3.13-slim
2
3
3
- # Base Image
4
- FROM python:3. 8
4
+ # Environment settings
5
+ ENV PYTHONUNBUFFERED=1 LANG=C.UTF- 8
5
6
6
- # set default environment variables
7
- ENV PYTHONUNBUFFERED 1
8
- ENV LANG C.UTF-8
9
-
10
- # to take runtime arguments and set env variables
7
+ # Django superuser build args
11
8
ARG DJANGO_SUPERUSER_USERNAME
12
- ENV DJANGO_SUPERUSER_USERNAME=${DJANGO_SUPERUSER_USERNAME}
13
-
14
9
ARG DJANGO_SUPERUSER_PASSWORD
15
- ENV DJANGO_SUPERUSER_PASSWORD=${DJANGO_SUPERUSER_PASSWORD}
16
-
17
10
ARG DJANGO_SUPERUSER_EMAIL
11
+ ENV DJANGO_SUPERUSER_USERNAME=${DJANGO_SUPERUSER_USERNAME}
12
+ ENV DJANGO_SUPERUSER_PASSWORD=${DJANGO_SUPERUSER_PASSWORD}
18
13
ENV DJANGO_SUPERUSER_EMAIL=${DJANGO_SUPERUSER_EMAIL}
19
14
20
- # create and set working directory
21
- RUN mkdir /app
15
+ # Set workdir
22
16
WORKDIR /app
23
17
24
- RUN chown -R www-data:www-data /app
25
-
26
- # Add current directory code to working directory
27
- COPY . /app/
28
-
29
- # install environment dependencies
30
- RUN pip install -r requirements.txt
31
-
32
- # install nginx
33
- RUN apt-get update && apt-get install nginx vim -y --no-install-recommends
18
+ # Install system dependencies and nginx, then install Python deps
19
+ COPY requirements.txt .
20
+ RUN apt-get update && \
21
+ apt-get install -y --no-install-recommends nginx vim && \
22
+ pip install --no-cache-dir -r requirements.txt && \
23
+ rm -rf /var/lib/apt/lists/*
34
24
35
- # Refer https://github.com/devtron-labs/devtron/blob/main/sample-docker-templates/django/nginx.default for sample nginx.default file
36
- COPY nginx.default /etc/nginx/sites-available/default
25
+ # Copy app code, nginx.conf, and start script
26
+ COPY app/ ./
27
+ COPY nginx.conf /etc/nginx/nginx.conf
28
+ RUN chmod +x start-server.sh
37
29
38
- RUN ln -sf /dev/stdout /var/log/nginx/access.log \
39
- && ln -sf /dev/stderr /var/log/nginx/error.log
30
+ # Create non-root user and set permissions
31
+ RUN groupadd -g 2002 nonroot && \
32
+ useradd -u 2002 -g nonroot -s /bin/bash -m nonroot && \
33
+ mkdir -p /tmp/nginx-logs && \
34
+ chown -R nonroot:nonroot /app /tmp/nginx-logs
40
35
36
+ # Expose port 8080
37
+ EXPOSE 8080
41
38
42
- # start server
43
- EXPOSE 8000
39
+ # Switch to non-root
40
+ USER nonroot
44
41
42
+ # Stop signal for graceful shutdown
43
+ # https://docs.docker.com/reference/dockerfile/#stopsignal
45
44
STOPSIGNAL SIGTERM
46
45
47
- # Refer https://github.com/devtron-labs/devtron/blob/main/sample-docker-templates/django/start- server.sh for sample start-server.sh file
46
+ # Start server (migrations, superuser, gunicorn, nginx)
48
47
CMD ["/app/start-server.sh" ]
0 commit comments