Что не так с этой конфигурацией Nginx, которая не может найти каталог мультимедиа? - PullRequest
0 голосов
/ 02 октября 2019

Я работаю с демо-проектом Django в видеоблоге, который я разместил на локальном сервере Ubuntu 18.04 LTS с Gunicorn, Nginx, Redis и Postgresql. Я установил этот сервер на Virtualbox и назначил фиксированный IP-адрес. Статические файлы (html, css, js) работают хорошо, но видео и файл изображения по умолчанию в папке мультимедиа не отображаются. Как статические, так и мультимедийные папки находятся в корневом каталоге проектаЯ думаю, что не настроен должным образом файл конфигурации Nginx. Но все работает нормально, когда я проверяю их на сервере разработки. Я очень новичок, моя дорогая, и мне не хватает предварительных знаний в области программирования. Вот почему я прошу вашей помощи в решении этой проблемы. Пожалуйста, посмотрите код ниже, если есть какая-либо ошибка. Заранее спасибо!

Ошибка с консоли браузера

Failed to load resource: the server responded with a status of 403 (Forbidden) /media/videos/2019/10/02/Algebra_Basics-_What_Is_Algebra_-_Math_Antics.mp4:1

Структура проекта

enter image description here

часть файла settings.py

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'kiji/static')
]    

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

# For sending email
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'


# Redis Configuration
REDIS_HOST = 'localhost'
REDIS_PORT = 6379
REDIS_DB = 0

Nginx congiration

server {
    listen 80;
    server_name 192.168.1.44;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static/ {
        root /home/djangoadmin/pyapps/kiji_project/;
    }

    location /media/ {
        root /home/djangoadmin/pyapps/kiji_project/;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/run/gunicorn.sock;
    }
}

Gunicorn'sConfiration

[Unit]
Description=gunicorn daemon
Requires=gunicorn.socket
After=network.target

[Service]
User=djangoadmin
Group=www-data
WorkingDirectory=/home/djangoadmin/pyapps/kiji_project
ExecStart=/home/djangoadmin/pyapps/venv/bin/gunicorn \
          --access-logfile - \
          --workers 3 \
          --bind unix:/run/gunicorn.sock \
          kiji.wsgi:application

[Install]
WantedBy=multi-user.target

файл models.py для видео

from django.db import models
from django.conf import settings
from django.utils import timezone
from django.contrib.auth.models import User
from teacher.models import Teacher
from django.urls import reverse

class Post(models.Model):
    teacher = models.ForeignKey(Teacher, on_delete = models.DO_NOTHING, 
                                blank=True, null=True,
                                related_name='blog_teachers')
    author = models.ForeignKey(User, on_delete = models.CASCADE,
                                related_name='blog_posts')
    title = models.CharField(max_length = 100)    

    clip = models.FileField(upload_to = 'videos/%Y/%m/%d/')

    description = models.TextField(max_length = 2400, blank = True)
    publish = models.DateTimeField(default = timezone.now)
    created = models.DateTimeField(auto_now_add = True)
    updated = models.DateTimeField(auto_now = True)


    class Meta:
        ordering = ('-publish',)

    def __str__(self):
        return self.title


    def get_absolute_url(self):
        return reverse('post-detail', args = [self.id])

файл models.py для изображения по умолчанию

from django.db import models
from django.conf import settings
from PIL import Image


class Profile(models.Model):    
    name = models.CharField(max_length = 30)    
    present_address = models.CharField(max_length = 200)
    permanent_address = models.CharField(max_length = 200)
    mobile_number = models.CharField(max_length = 14, unique = True, null=True)    
    profile_picture = models.ImageField(default = 'default_profile.jpg', upload_to='users/%Y/%m/%d/')

    def __str__(self):
        return f'{self.user.username} Profile'


    def save(self, *args, **kwargs):
        super().save(*args, **kwargs)

        img = Image.open(self.profile_picture.path)

        if img.height > 300 or img.width > 300:
            output_size = (300, 300)
            img.thumbnail(output_size)
            img.save(self.profile_picture.path)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...