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/