Django [Errno 13] Berechtigung verweigert: '/ var / www / media / animals / user_uploads'

Ich entwickle eine Django-API, die über WSGI auf einem Ubuntu-Server auf Apache2 läuft.

Benutzer können Bilder, die sie aufnehmen, mithilfe einer POST-Anforderung auf den Server hochladen. Die API verarbeitet diese Anforderung und versucht dann, das Image zu schreiben/var/www/media/animals/user_uploads/<animal_type>/<picture_name>.jpg. Falls es kein Verzeichnis gibt/var/www/media/animals/user_uploads/<animal_type>/ es wird es schaffen.

Beim Testen während der Entwicklung war alles in Ordnung, sowohl unter Windows als auch unter Scientific Linux. Beim Testen auf dem Bereitstellungsserver erhalte ich folgende Fehlermeldung:

Soweit ich weiß, wird der Apache2-Server mit dem Benutzer ausgeführtwww-data. In meinem Fall läuftcat /etc/passwd Um die Liste der Benutzer zu erhalten, ist dies das, wofür ich bekommewww-data:

www-data: x: 33: 33: www-data: / var / www: / bin / sh

Ich gehe davon aus, dass dies bedeutet, dasswww-data hat Zugriff auf alles in/var/www/. Ich habe versucht:

chmod 777 -R media

Dies hat funktioniert, aber es ist offensichtlich ein sehr schlechter Weg, dies zu lösen. Gibt es einen besseren Weg, dies zu lösen?

Das ist meine 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()

Ich habe das in meinemsettings.py Datei:

MEDIA_ROOT = '/var/www/media/'
MEDIA_URL = os.path.join(BASE_DIR,'/media/')

Meinevhost.conf enthält folgendes:

Alias /media/ /var/www/media/

Antworten auf die Frage(4)

Ihre Antwort auf die Frage