Я разрабатываю django API, который будет работать поверх Apache2 через WSGI на сервере под управлением Ubuntu.
Пользователи смогут загружать изображения, которые они берут на сервер, используя запрос POST. API обрабатывает этот запрос, а затем пытается записать изображение в /var/www/media/animals/user_uploads/<animal_type>/<picture_name>.jpg
. Если нет каталога /var/www/media/animals/user_uploads/<animal_type>/
, он создаст его.
При тестировании во время разработки все было в порядке, как с использованием Windows, так и с Scientific Linux. При тестировании на сервере развертывания я получаю эту ошибку:
Насколько я понимаю, сервер Apache2 работает с использованием пользователя www-data
. В моем случае, запустив cat /etc/passwd
, чтобы получить список пользователей, это то, что я получаю для www-data
:
WWW-данные: х: 33: 33: WWW-данные:/Var/WWW:/бен/ш
Я предполагаю, что это означает, что www-data
имеет доступ ко всему в /var/www/
. Я пробовал:
chmod 777 -R media
Это сработало, но, очевидно, это очень плохой способ решить эту проблему. Есть ли лучший способ решить эту проблему?
Это мой wsgi.py:
import os, sys
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "serengeti.settings")
sys.path.append('/serengeti/django/serengeti')
sys.path.append('/serengeti/django')
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
У меня есть это в моем файле settings.py
:
MEDIA_ROOT = '/var/www/media/'
MEDIA_URL = os.path.join(BASE_DIR,'/media/')
My vhost.conf
содержит следующее:
Alias /media/ /var/www/media/