|
1 | | -FROM debian:stretch-slim |
| 1 | +FROM debian:bookworm-slim |
2 | 2 |
|
3 | | -MAINTAINER Phillip Bailey <[email protected]> |
| 3 | +LABEL maintainer="Phillip Bailey" |
4 | 4 |
|
5 | | -ENV DEBIAN_FRONTEND noninteractive |
| 5 | +ENV DEBIAN_FRONTEND=noninteractive |
6 | 6 |
|
7 | | -RUN apt-get update && apt-get dist-upgrade && apt-get install -y \ |
8 | | - python-pip python-dev uwsgi-plugin-python \ |
9 | | - nginx supervisor |
| 7 | +RUN apt-get update && apt-get dist-upgrade -y && apt-get install -y --no-install-recommends \ |
| 8 | + python3-dev build-essential gcc \ |
| 9 | + nginx supervisor curl ca-certificates \ |
| 10 | + && apt-get clean \ |
| 11 | + && rm -rf /var/lib/apt/lists/* |
| 12 | + |
| 13 | +# Install uv |
| 14 | +COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv |
| 15 | + |
| 16 | +# Create non-root user and add to www-data group |
| 17 | +RUN groupadd -r appuser && useradd -r -g appuser appuser \ |
| 18 | + && usermod -a -G www-data appuser |
10 | 19 |
|
11 | 20 | COPY nginx/flask.conf /etc/nginx/sites-available/ |
12 | 21 | COPY supervisor/supervisord.conf /etc/supervisor/conf.d/supervisord.conf |
13 | 22 |
|
14 | 23 | COPY app /var/www/app |
15 | 24 |
|
16 | | -RUN mkdir -p /var/log/nginx/app /var/log/uwsgi/app /var/log/supervisor \ |
| 25 | +RUN mkdir -p /var/log/nginx/app /var/log/supervisor \ |
17 | 26 | && rm /etc/nginx/sites-enabled/default \ |
18 | 27 | && ln -s /etc/nginx/sites-available/flask.conf /etc/nginx/sites-enabled/flask.conf \ |
19 | 28 | && echo "daemon off;" >> /etc/nginx/nginx.conf \ |
20 | | - && pip install -r /var/www/app/requirements.txt \ |
21 | | - && chown -R www-data:www-data /var/www/app \ |
22 | | - && chown -R www-data:www-data /var/log |
| 29 | + && sed -i 's|pid /run/nginx.pid;|pid /var/run/nginx.pid;|' /etc/nginx/nginx.conf \ |
| 30 | + && uv pip install --system --no-cache --break-system-packages -r /var/www/app/requirements.txt \ |
| 31 | + && chown -R appuser:appuser /var/www/app \ |
| 32 | + && chown -R appuser:appuser /var/log \ |
| 33 | + && chown -R appuser:appuser /var/run |
| 34 | + |
| 35 | +EXPOSE 8080 |
23 | 36 |
|
| 37 | +HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ |
| 38 | + CMD curl -f http://localhost:8080/ || exit 1 |
24 | 39 |
|
25 | | -CMD ["/usr/bin/supervisord"] |
| 40 | +# Run as non-root user for security (nginx can now bind to non-privileged port 8080) |
| 41 | +USER appuser |
| 42 | +CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"] |
0 commit comments