Я работаю с демо-проектом 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
Структура проекта

часть файла 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)