Настройка Django, Nuxt с помощью Nginx и docker

#django #docker #nginx #nuxt.js

#django #docker #nginx #nuxt.js

Вопрос:

Я пытаюсь создать образ docker для всех вышеперечисленных сервисов. Я смог настроить django с помощью базы данных и Nginx, но у меня возникли большие проблемы с добавлением Nuxt в микс, и я не могу заставить приложение Nuxt работать должным образом, и это дает мне постоянные ошибки, которые не возникают, если я вручную запускаю сервер узлов. Я подозреваю, что большинство проблем связаны с авторизацией и / или неправильной маршрутизацией в Nginx, что, вероятно, связано с неправильной настройкой соответствующих файлов. Любые советы о том, как настроить эти файлы конфигурации, будут с благодарностью приняты!

Моя структура папок выглядит следующим образом. Файл dockerfile внутри каталога приложения соответствует приложению django

 WebsiteProject/
├── app/
│   ├── frontend-nuxt/
|   |   ├──Dockerfile
|   |   └──nuxt.config.js
│   ├── nginx/
|   |   ├──Dockerfile
|   |   └──nginx_local.conf
|   └──Dockerfile
└── docker-compose.yml
 

docker-compose.yml

 version: '3.7'

services:
  web:
    build: ./app
    command: gunicorn webapp.wsgi:application --bind 0.0.0.0:1339 --reload
    entrypoint: ./entrypoint.sh
    volumes:
      - ./app/:/usr/src/app/
      - static_volume:/usr/src/app/static
      - media_volume:/usr/src/app/media
    expose:
      - 1339
    env_file:
      - ./.env.dev
    depends_on:
      - db
      # - redis
  frontend:
    build: ./app/frontend-nuxt
    volumes:
      - ./app/frontend-nuxt/:/user/src/app/
    expose:
      - 3000
    ports:
      - 3000:3000
    depends_on:
      - web
    command: npm run dev
  db:
    image: postgres:12-alpine
    volumes:
      - postgres_data:/var/lib/postgresql/data/
    environment:
      - POSTGRES_USER=webapp
      - POSTGRES_PASSWORD=webapp
      - POSTGRES_DB=webapp_dev
  nginx:
    build: ./app/nginx
    volumes:
      - static_volume:/usr/src/app/static
      - media_volume:/usr/src/app/media
    ports:
      - 8085:80
    depends_on:
      - web
volumes:
  postgres_data:
  static_volume:
  media_volume:
 

nginx_local.conf

 upstream webapp {
    server web:1339;
}

upstream frontend {
  server frontend:3000;
}

server {

    listen 80 default_server;
    listen [::]:80 default_server;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;
    server_name webapp.com localhost:8085;

    location / {
      proxy_pass http://frontend;
      proxy_redirect     off;
      proxy_buffering    off;
      proxy_set_header   Host              $host:8085;
      proxy_set_header   X-Real-IP         $remote_addr;
      proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
      proxy_set_header   X-Forwarded-Host  $server_name;
      proxy_set_header   X-Forwarded-Proto $scheme;
    }

    location ~ /(api|admin|static|account-auth|accounts|api-auth)/ {
        proxy_pass http://webapp;
        proxy_redirect     off;
        proxy_buffering    off;
        proxy_set_header   Host              $host:8085;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Host  $server_name;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }

    location /static/ {
        alias /usr/src/app/static/;
    }

    location /media/ {
        alias /usr/src/app/media/;
    }

}
 

Nuxt Dockerfile

 FROM node:11.13.0-alpine

ENV HOST 0.0.0.0
ADD . /app
WORKDIR /app
EXPOSE 3000
RUN npm rebuild node-sass
 

nuxt.config.js настройки аутентификации и axios

  axios: {
    baseURL: 'http://localhost:8085/',
  },
  auth: {
    strategies: {
      local: {
        endpoints: {
          login: {
            url: 'account-auth/token/login/',
            method: 'post',
            propertyName: 'auth_token',
          },
          logout: { url: 'account-auth/token/logout/', method: 'post' },
          user: {
            url: 'api/data/',
            method: 'get',
            propertyName: false,
          },
        },
        tokenType: 'Token',
        tokenName: 'Authorization',
      },
    },
    redirect: {
      login: '/accounts/login',
      logout: '/',
      callback: '/accounts/login',
      home: '/'
    },
  },