Die Lösung für dieses Problem beim Umgang mit dem Produktionsserver wäre, wie bereits erwähnt, Collectstatic zu verwenden, das es verwendet und gelöst hat, oder den Ordnern Berechtigungen zu erteilen. Wenn sich Ihre Lösung jedoch in einer lokalen Umgebung befindet, kann die Lösung erworben werden, indem Sie den lokalen MEDIA
konfigurieren Verzeichnis im settings.py
Datei, die auf dem lokalen Server agiert.
Also würden diese beiden Zeilen in der lokalen Konfigurationsdatei hinzugefügt, wie @Nic Scozzaro erwähnt:
MEDIA_ROOT = os.path.join (BASE_DIR, 'media')
STATIC_ROOT = os.path.join (BASE_DIR, 'static')
Starten Sie nach der Konfiguration die Dienste neu, um die Korrekturen anzuwenden.
Erstellen Sie ein ‚MEDIA‘-Verzeichnis im Stammverzeichnis Ihres Projekts. Legen Sie dann Folgendes fest:
MEDIA_ROOT = os.path.join(BASE_DIR,'MEDIA')
Um zu wissen, bei welchem Benutzer Sie angemeldet sind:
$ whoami
ubuntu
Wenn Sie eine AWS-Instanz verwenden, sollten Sie Ihrer Lösung hinzufügen, dass Sie Ihren Benutzer der Gruppe hinzufügen, um auf diesen Ordner zugreifen zu können:
Erstellen einer Gruppe für Benutzer von Webservices (varwwwusers)
$ sudo groupadd varwwwusers
Ändern Sie den www-Ordner und machen Sie ihn zu varwwwusers gehören
$ sudo chgrp -R varwwwusers /var/www/
www-data ist der Server, der Django-Anfragen stellt, fügen Sie das der Gruppe hinzu
$ sudo adduser www-data varwwwusers
Ordnerrichtlinie ändern
$ sudo chmod -R 770 /var/www/
Ubuntu zur Gruppe der varwwwusers hinzufügen
$ usermod -a -G varwwwusers ubuntu
Hoffe, das hilft!
Ich habe das am Ende selbst gelöst.
Wenn ich auf den Entwicklungsmaschinen laufe, laufe ich tatsächlich mit den Privilegien meines aktuellen Benutzers. Wenn ich jedoch auf dem Bereitstellungsserver laufe, laufe ich tatsächlich durch wsgi
, was bedeutet, dass es mit www-data
ausgeführt wird Privilegien von .
www-data
ist weder der Eigentümer noch gehört er zu der Gruppe von Benutzern, die /var/www
besitzen . Das bedeutet, dass www-data
wird als other
behandelt und hat die Berechtigungen auf andere gesetzt.
Das SCHLECHTE Lösung dafür wäre zu tun:
sudo chmod -R 777 /var/www/
Dies würde jedem vollen Zugriff auf alles in /var/www/
geben , was eine sehr schlechte Idee ist.
Noch ein BAD Lösung wäre zu tun:
sudo chown -R www-data /var/www/
Dies würde den Eigentümer auf www-data
ändern , wodurch Sicherheitslücken geöffnet werden.
Das GUTE Lösung wäre:
sudo groupadd varwwwusers
sudo adduser www-data varwwwusers
sudo chgrp -R varwwwusers /var/www/
sudo chmod -R 760 /var/www/
Dadurch wird www-data
hinzugefügt zum varwwwusers
Gruppe, die dann als Gruppe für /var/www/
festgelegt wird und alle seine Unterordner. chmod
wird dem Eigentümer Lese-, Schreib- und Ausführungsberechtigungen erteilen, aber die Gruppe kann möglicherweise dort hochgeladene Skripte nicht ausführen, wenn beispielsweise der Webserver gehackt wurde.
Sie könnten ihn auf 740
setzen um es sicherer zu machen, aber dann können Sie Django's
nicht verwenden collectstatic
Funktionalität, halten Sie sich also an 760
es sei denn, Sie sind sehr zuversichtlich, was Sie tun.