Обслуживание докеризованного react и статических файлов django с помощью nginx в качестве веб-сервера и обратного прокси

У меня есть простое докеризованное приложение react и django, которое я хотел бы обслуживать, используя nginx как веб-сервер для обслуживания статических файлов react и django и как обратный прокси для передачи запросов пользователей к бэкенду django, обслуживаемому gunicorn. Но у меня возникли проблемы с nginx для обслуживания статических файлов react и django.

Здесь находится докерфайл nginx:

FROM node:18.16-alpine as build

WORKDIR /app/frontend/

COPY ../frontend/package*.json  ./

COPY ../frontend ./

RUN npm install

RUN npm run build


# production environment
FROM nginx

COPY  ./nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=build /app/frontend/build /usr/share/nginx/html

Здесь находится файл docker-compose:

version: '3.9'

services:
  db:
    image: mysql:8.0
    ports:
      - '3307:3306'
    restart: unless-stopped
    env_file:
      - ./backend/.env
    volumes:
      - mysql-data:/var/lib/mysql
  backend:
    image: vinmartech-backend:latest 
    restart: always
    build: 
      context: ./backend
      dockerfile: ./Dockerfile  
    ports:
      - "8000:8000"
    volumes:
      - static:/app/backend/static/

    env_file:
      - ./backend/.env
    depends_on:
      - db
  
  nginx:
    build:
      context: .
      dockerfile: ./nginx/Dockerfile
    ports:
      - "80:80"
    volumes:
      -  static:/app/backend/static/
    restart: always
    depends_on:
      - backend
      # - frontend

volumes:
  mysql-data: 
  static:

Здесь находится файл конфигурации nginx:


upstream mybackend {
    server backend:8000;
}

server {
    listen 80;

    location /letter/s {
        proxy_pass http://backend;
    }  

    location /contact/ {
        proxy_pass http://backend;
    }  


    location /admin/ {
        alias /static/;
    }      

    location /static/ {
        alias /static/;
    }

    location / {
      root /usr/share/nginx/html;
      try_files $uri $uri/ /index.html;
    }

}

вот настройки django для конфигурации статических файлов:

STATIC_URL = "/static/"
STATIC_ROOT = os.path.join(BASE_DIR, 'static')

Прошло почти 4 месяца попыток найти решение, но я все еще застрял. Может ли кто-нибудь прийти мне на помощь? Пожалуйста, посмотрите на это и помогите.

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