Django - Как настроить отдельный медиа / статический сервер на виртуальном хостинге? - PullRequest
3 голосов
/ 17 августа 2011

Я хотел бы получить виртуальный хостинг для своего приложения django, однако место для хранения на виртуальном хостинге довольно дорогое, поэтому я хотел бы использовать поставщика виртуального хостинга для хранения мультимедийного / статического содержимого веб-сайта, поскольку он это намного дешевле. Как я могу это сделать?

Спасибо.

примечание

Для моего приложения мне нужно запускать специализированные библиотеки (например, matplotlib), которые нельзя установить на shared-хостинге, поэтому я не смогу запустить Django на shared-хостинге с помощью FastCGI.

1012 * редактировать *

Чтобы прояснить вопрос, мне нужно будет иметь возможность загружать в django и хранить контент на общем хостинге. Вот цитата из книги Джанго из раздела Running a Separate Media Server ( ссылка ):

Однако этот шаг может быть немного сложнее. Если ваше приложение включает в себя загрузку файлов, Django должен быть в состоянии записать загруженный носитель на медиа-сервер. Если мультимедиа живет на другом сервере, вам необходимо организовать способ записи в сети.

Но нет подробностей о том, как этого можно достичь.

1 Ответ

6 голосов
/ 17 августа 2011

Ничто не мешает вам указывать ваши URL-адреса на другом хосте в выводе (X) HTML.

Если ваша учетная запись общего хостинга находится, например, на http://awesome-hosting-provider.com/~myname/, вы можете установить MEDIA_URLв вашем settings.py к этому значению обязательно используйте RequestContext при рендеринге и включите django.core.context_processors.media в TEMPLATE_CONTEXT_PROCESSORS (обратите внимание, что он там по умолчанию), а затем вы можете просто использовать {{ MEDIA_URL }} для префикса вашегоURL-адреса в шаблонах.

Даже администратор будет работать с этим, если вы скопируете все необходимые статические файлы в общую среду, чтобы сделать их доступными.

Поскольку вам также необходимо принятьЗаботясь о загрузке файлов, как говорится в книге, вы должны будете сделать возможным запись в хранилище (на общем сервере) из вашего развертывания Django.Есть несколько способов достижения этого.

Вероятно, проще всего было бы смонтировать каталог верхнего уровня вашей среды хранения на виртуальном сервере, используя SSHFS с правильными параметрами (такими как reconnect, разумные тайм-ауты и т. Д.).).Конечно, это требует SSH-доступа к общей среде.Чтобы упростить задачу, может пригодиться установка пары ключей аутентификации SSH.

В качестве альтернативы, вы можете попробовать NFS, если ваш провайдер общего хостинга позволяет вам это сделать, хотя я считаю, что это маловероятно.

Если все остальное терпит неудачу, вам придется настроить какой-либо веб-сервис в вашей общей среде, который будет прослушивать загрузки из вашего развертывания Django и заставлять приложение Django пересылать их.В этом случае, однако, вам нужно убедиться, что он достаточно безопасен, и никакой злонамеренный пользователь не сможет скомпрометировать ваш сервер хранения, напрямую связавшись с ним.

...