Как обслуживать статические файлы из приложения docker django на хостинге nginx

Моя цель - обслуживать статические файлы на nginx на ubuntu из контейнера docker django app без использования docker nginx

Я настроил обратный прокси для django все работает нормально в режиме dev, но когда я ставлю Debug на False nginx не распознает путь к staticfiles введите описание изображения здесь

Вот мой dockerfile для приложения django

FROM python:3.9
RUN mkdir /app
WORKDIR /app
COPY . /app
RUN pip install pipenv
RUN pipenv install --system --deploy --ignore-pipfile
EXPOSE 8000
ENTRYPOINT ["python", "manage.py"]
CMD ["runserver", "0.0.0.0:8000"]

А вот моя конфигурация nginx

upstream django { 
    server 127.0.0.1:8001;
 } 
 server {
    server_name django.com;
    listen 80;
    listen 8000;
    client_max_body_size 100M;
    location / {    
        proxy_pass http://django;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;

        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forward-Proto http;
        proxy_set_header X-Nginx-Proxy true;

        proxy_redirect off;
        proxy_read_timeout 1000;
        proxy_connect_timeout 1000;
        proxy_send_timeout 1000; 
    }
} 

Чтобы NGINX обслуживал ваши статические файлы, необходимо отредактировать ваш конфиг. Как вы ожидаете, что nginx найдет ваши файлы иначе?

К счастью, это простое редактирование. :)

upstream django { 
    server 127.0.0.1:8001;
 } 
 server {
    server_name django.com;
    listen 80;
    listen 8000;
    client_max_body_size 100M;
    
    location /static {
        alias /PATH/TO/STATIC_FILES;
    }

    location / {    
        proxy_pass http://django;
        ...
    }
} 

Не забудьте настроить ваш статический корень, и запустите:

py manage.py collectstatic

Это позволит убедиться, что CSS/JS по умолчанию Django включены в ваши статические файлы.

Когда DEBUG=True, ваши статические файлы будут обслуживаться Django. Это не очень хорошо, и может привести к серьезным проблемам с производительностью и безопасностью.

Редактирование:

В качестве альтернативы посмотрите на Django-Whitenoise. Он отлично подходит для обслуживания статических файлов.

http://whitenoise.evans.io/en/stable/

Вернуться на верх