LINUX.ORG.RU

Django: media storages на разных ПК

 , , , ,


0

2

Хорошего дня! Разбираюсь с django (1.11.7). Полет проходит нормально, но никак не могу вникнуть с систему хранения media файлов.

Из коробки работает file storage. В settings.py указываю папочку, где лежат файлы и далее обращаюсь к ней. С этим все понятно. Но если мне нужно хранить медиафайлы на другом сервере. Пусть они в одной ЛС, но физически web-сервер и media storage на разных серверах. Есть такой пакет django-storages. Он позволяет использовать сторонние сервера s3 по типу amazon. Не мой вариант.

Теперь краткая суть: какими средствами можно реализовать хранение файлов на других серверах? Но не сторонних сервисах типа amazon, а у себя.

Нюанс в том, что медиаконтент (видео и картинки) просто кладутся на медиасервер. Т.е. django этот процесс сейчас не контролирует. Возможно нужно какой-то учет в бд вести. Я просто не очень понимаю пока как это организовать. Или просто файл должен иметь уникальное имя и по этому имени искать по стореджам пока не найдется. Но это глупо наверно. Проще в бд иметь список серверов и файлов. Искать по таблице нужный файл и обращаться уже на конкретный сервер.

Допускаю, что средствами django это не реализовать. Возможно нужно переложить часть на тот же nginx, например.

Я буду рад любым пояснениям по данному вопросу. За examples отдельная благодарность. Учиться приходится на ходу просто.

P.S. Изучал коды страниц некоторых сайтов, там в src указывается http ссылка, при чем не на домен самого сайта, а видимо обращение идет на media storage непосредственно. Вот это видимо то, что мне нужно. Как это работает?



Последнее исправление: kerby (всего исправлений: 2)

Во-первых, для хранения в БД есть FileField/ImageField, которые замечательно интегрируются со стораджами. Во-вторых, не совсем понятно что значит «на другом сервере». По какому протоколу джанга должна их туда аплоадить?

provaton ★★★★★
()
Ответ на: комментарий от pawnhearts

Я так понял, ему не надо чтобы джанга аплоадила

Если не надо - тогда это уже просто статика. STATIC_URL в сеттингсах и сетапишь нгикс со статикой где тебе нужно.

provaton ★★★★★
()
Ответ на: комментарий от provaton

Угу, но ему как-то надо знать имена файлов и связанные с ним какие-то объекты. т.е. «нужно какой-то учет в бд вести» как он пишет. Или, например, называть файлы как хэш от названия этого объекта.

В вопросе недостаточно данных в любом случае.

pawnhearts ★★★★★
()
Ответ на: комментарий от pawnhearts

Да, сама django не должна делать upload. Но должна уметь работать с файлами на сервере хранения. Например, залили руками на сервер хранения папку с картинками. Я знаю по какому пути лежит картинка и как называется. В src я обращаюсь по https на сервер хранения, указывая каталог (путь к файлу) и имя самого файла.

например:

<img src="https://storage1/images/pict1.jpg"

Вот как такую логику увязать с django?

kerby
() автор топика
Ответ на: комментарий от provaton

Ммм, я кажется начал догонять. Мне нужно на отдельной машине поднять nginx. Настроить его как файловый сервер, чтобы он отдавал файлы по https запросу. А в django setting прописать static url на https:// storage1.mysite.ru. Примерно так?

kerby
() автор топика
Ответ на: комментарий от kerby

Да, потом в шаблонах сможешь писать

{% load static %}
<img src="{% static "my_app/example.jpg" %}" alt="My image"/>

pawnhearts ★★★★★
()
Ответ на: комментарий от kerby

А в django setting прописать static url

Раньше ты говорил про media. Если будешь использовать static, то придется и всю остальную статику (css, js и т.п) туда кидать.

Да и при чем тут Джанго?

gruy ★★★★★
()
Ответ на: комментарий от kerby

Примерно так?

Да. У меня джанга раскладывает медиа файлы rsync'ом по серверам (раньше был glusterfs но он глючил у меня). Сервера (для rsync) и имена файлов лежат в БД, ну а отдается у меня медиа nginx'ом с одного ДНС имени (типа storage.site.ru), который резолвится на кучу IP.

И второй вариант, когда раздаю файлы с разных серверов, тогда еще в бд хранится url серверов на которых есть эти конкретные файлы.

pi11 ★★★★★
()
Ответ на: комментарий от gruy

Да, все верно. Сам уже об этом подумал. Не static url, а media url. Если сделать все средствами nginx, то django вроде бы и не при чем. Просто изначально у меня не было понимания как вообще организуется хранение на сторонних серверах. Сейчас вроде въезжаю.

kerby
() автор топика
Ответ на: комментарий от pi11

Ну вроде картина общая сложилась. Буду ковырять nginx. Cпасибо!

kerby
() автор топика
Ответ на: комментарий от kerby

Я не совсем понимаю в чем смысл media без аплоада. Если это просто картинки, которые являются частью приложения, то их можно положить в статику с css/js, и media не использоваться вообще. media - это именно юзерский аплоад.

provaton ★★★★★
()
Ответ на: комментарий от kerby

просто иди натер. потому-что так надо. усек?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.