Как я могу хранить изображения на сервере и обслуживать их с помощью nginx и django?
Я создал приложение Django и использую Gunicorn и Nginx на сервере Ubuntu. Nginx обслуживает мои статические файлы и отлично работает для css файлов и javascript, но у меня проблемы с изображениями. Приложение - это мой личный блог, и я использую Django ckeditor для загрузки изображений и написания текста. Все работало как надо, пока я использовал локальный сервер, но когда я развернул его на облачном сервере, изображения не отображаются.
вот мой проект/app/models.py
from django.db import models
import uuid
from ckeditor_uploader.fields import RichTextUploadingField
# Create your models here.
class Category(models.Model):
title = models.CharField(max_length=150)
created = models.DateTimeField(auto_now_add=True)
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
def __str__(self):
return self.title
class Article(models.Model):
title = models.CharField(max_length=150)
description = models.CharField(max_length=150, blank=True, null=True)
body = RichTextUploadingField(blank=True, null=True)
profile_image = models.ImageField(null=True, blank=True, default='default.png')
category = models.ForeignKey(Category, on_delete=models.CASCADE)
created = models.DateTimeField(auto_now_add=True)
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
def __str__(self):
return self.title
class Meta:
ordering = ['-created']
Код ниже находится в settings.py:
STATIC_URL = '/static/'
MEDIA_URL = '/media/'
STATICFILES_DIRS = [
BASE_DIR / 'static'
]
MEDIA_ROOT = '/var/www/my-website.com/media'
STATIC_ROOT = '/var/www/my-website.com/static'
CKEDITOR_UPLOAD_PATH = 'uploads/'
В проект urls.py я добавляю:
urlpatterns = [
.
.
.
path('ckeditor', include('ckeditor_uploader.urls')),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Я создаю файл конфигурации Nginx в /etc/nginx/sites-available/myWebsite и он выглядит следующим образом:
server_tokens off;
access_log /var/log/nginx/my-website.access.log;
error_log /var/log/nginx/my-website.error.log;
server {
server_name .my-website.com;
listen 80;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /static {
autoindex on;
alias /var/www/my-website.com/static/;
}
location /media {
autoindex on;
alias /var/www/my-website.com/media/;
}
}
Я создал каталоги /var/www/my-website.com/static/ и /var/www/my-website.com/media/
.
и выполнил следующие команды:
sudo chown -cR user:user /var/www/my-website.com/static/
sudo chown -cR user:user /var/www/my-website.com/media/
Изображение не хочет отображаться.