Проблема с динамическими медиа в проекте django при развертывании на сервере с помощью docker и nginx
У меня проблема с изображением, которое я загружаю в django-admin. Фотографии добавляются в папку media в запущенном контейнере, но кажется, что фотографии пытаются быть взяты из локальных файлов, где их нет. Все работает на моем собственном компьютере, но я столкнулся с этой проблемой при попытке развернуть на сервере
Вот как это выглядит на сайте введите описание изображения здесь
nginx не может найти его введите описание изображения здесь
я пробовал что-то подобное Django static files not served with Docker но это не работает для меня
Вот структура моих файлов:
booking2
assets
media
main-app
booking2
docker
nginx
Dockerfile
nginx.conf
docker-compose.yml
Dockerfile
entrypoint.sh
.env
главный Dockerfile
FROM python:3.8-alpine
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /app
RUN apk --update add
RUN apk add gcc gcc python3-dev libc-dev libffi-dev jpeg-dev zlib-dev libjpeg libxml2-dev libxml2 libxslt-dev gettext
RUN apk add postgresql-dev
RUN pip install --upgrade pip
COPY ./requirements.txt .
RUN pip install -r requirements.txt
COPY . .
RUN chmod +x entrypoint.sh
ENTRYPOINT ["/app/entrypoint.sh"]
docker-compose.yml
version: "3.7"
services:
web:
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000"
entrypoint:
- ./entrypoint.sh
depends_on:
- postgresdb
postgresdb:
build:
context: ./docker/postgres
dockerfile: Dockerfile
environment:
- POSTGRES_PASSWORD=devpass
volumes:
- ./docker/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql
ports:
- "5432:5432"
nginx:
build:
context: ./docker/nginx
dockerfile: Dockerfile
ports:
- "80:80"
- "443:443"
depends_on:
- web
- postgresdb
volumes:
- ./assets/:/assets
- ./media/:/media
entrypoint.sh
#!/usr/bin/env sh
python manage.py makemigrations --no-input
python manage.py migrate --no-input
python manage.py collectstatic --no-input
gunicorn booking2.wsgi:application --bind 0.0.0.0:8000 --reload -w 4
Nginx Dockerfile
FROM nginx:1.19.0-alpine
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d
Nginx conf file
upstream web {
server web:8000;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://web;
proxy_redirect off;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
}
location /assets/ {
alias /assets/;
}
location /media/ {
alias /media/;
}
}
Это мои медиа настройки
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')