Как обслуживать статические файлы из приложения 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. Он отлично подходит для обслуживания статических файлов.