Nginx не обслуживает статические файлы и файлы, загруженные пользователем, в Django Kubernetes

Здравствуйте, я работаю на kubernetes и не могу получить статические файлы или документы пользователя. Это работает за nginx ingress все запросы и django работает как ожидалось. Но не могу понять, почему изображения и другие документы не могут быть получены по url. Приложение устанавливается с помощью helm charts и функциональность кажется нормальной, кроме обслуживания файлов.

FROM python:3.8.12-alpine3.15

ADD ./requirements.txt /app/requirements.txt


RUN set -ex \
    && apk add --no-cache --virtual .build-deps postgresql-dev build-base linux-headers jpeg-dev zlib-dev\
    && python -m venv /env \
    && /env/bin/pip install --upgrade pip \
    && /env/bin/pip install --no-cache-dir -r /app/requirements.txt \
    && runDeps="$(scanelf --needed --nobanner --recursive /env \
        | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
        | sort -u \
        | xargs -r apk info --installed \
        | sort -u)" \
    && apk add --virtual rundeps $runDeps \
    && apk del .build-deps

ADD ./ /app
WORKDIR /app

ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

RUN apk add nginx
RUN rm /etc/nginx/http.d/default.conf
COPY helm/nginx.conf /etc/nginx/nginx.conf

ENTRYPOINT ["sh", "helm/run.sh"]

run.sh

nginx -g 'daemon on;'
gunicorn  main_app.wsgi:application --bind 0.0.0.0:8080 --workers 3

nginx.conf

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

events {
    worker_connections 1024;
}

http {
    include /etc/nginx/mime.types;
    # default_type application/octet-stream;
    access_log /var/log/nginx/access.log;

    upstream django {
        server 0.0.0.0:8080;
    }

    server {

        include /etc/nginx/mime.types;
        listen 8000;

        location /static {
            autoindex on;
            alias /app/static/;
        }

        location / {
            proxy_pass http://django;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Host $host;
            proxy_redirect off;
        }


        location /uploads{
            autoindex on;
             alias /app/uploads/;
         }

        # location ~* ^/[^/]+\.(?:gif|jpg|jpeg|pdf)$ {
        #     root /app/;
        #     try_files $uri =404;;;;
        # }




    }
}

Файл настроек Django выглядит следующим образом:

STATIC_ROOT = BASE_DIR / 'static'
STATIC_URL = '/static/'

# media folder setting
MEDIA_URL = '/uploads/'
MEDIA_ROOT = BASE_DIR / 'uploads'

Если я перехожу на /admin url файлы обслуживаются, но я получаю эту ошибку в js файле:

Uncaught SyntaxError: Unexpected token '<'

Чтобы разобраться в этом, нужно было проделать чертовски большую работу. Следующие изменения в nginx.conf сработали.

location your_ingresspath_here/static {
    autoindex on;
    alias /app/static/;
}
Вернуться на верх