Řešením tohoto problému při jednání s produkčním serverem by bylo použití collectstatic, jak již bylo zmíněno, že použil a vyřešil nebo udělil oprávnění složkám. Pokud je však vaše řešení v místním prostředí, lze jej získat konfigurací místního MEDIA
adresář v settings.py
soubor, který funguje na místním serveru.
Takže by se přidaly tyto dva řádky do místního konfiguračního souboru, jak zmínil @Nic Scozzaro:
MEDIA_ROOT = os.path.join (BASE_DIR, 'media')
STATIC_ROOT = os.path.join (BASE_DIR, 'static')
Po konfiguraci restartujte služby pro použití oprav.
Vytvořte adresář 'MEDIA' v kořenovém adresáři svého projektu. Poté nastavte:
MEDIA_ROOT = os.path.join(BASE_DIR,'MEDIA')
Chcete-li zjistit, ke kterému uživateli jste přihlášeni:
$ whoami
ubuntu
A přidáním vašeho řešení, pokud používáte instanci AWS, měli byste přidat svého uživatele do skupiny, abyste měli přístup k této složce:
Vytvoření skupiny pro uživatele webových služeb (varwwwusers)
$ sudo groupadd varwwwusers
Změňte složku www a přiřaďte ji varwwwusers
$ sudo chgrp -R varwwwusers /var/www/
www-data je server, který odesílá požadavky django, přidejte ho do skupiny
$ sudo adduser www-data varwwwusers
Změnit zásady složky
$ sudo chmod -R 770 /var/www/
Přidat ubuntu do skupiny varwwwusers
$ usermod -a -G varwwwusers ubuntu
Doufám, že to pomůže!
Sám jsem to nakonec vyřešil.
Když běžím na vývojových strojích, ve skutečnosti běžím s oprávněními mého aktuálního uživatele. Když však běžím na implementačním serveru, ve skutečnosti běžím přes wsgi
, což znamená, že běží pomocí www-data
privilegia uživatele.
www-data
není vlastníkem ani ve skupině uživatelů, kteří vlastní /var/www
. To znamená, že www-data
je považováno za other
a má oprávnění nastavena pro ostatní.
ŠPATNÉ řešením by bylo udělat:
sudo chmod -R 777 /var/www/
To by každému poskytlo úplný přístup ke všemu v /var/www/
, což je velmi špatný nápad.
Další ŠPATNÉ řešením by bylo udělat:
sudo chown -R www-data /var/www/
Tím by se vlastník změnil na www-data
, který otevírá chyby zabezpečení.
DOBRÉ řešení by bylo:
sudo groupadd varwwwusers
sudo adduser www-data varwwwusers
sudo chgrp -R varwwwusers /var/www/
sudo chmod -R 760 /var/www/
Tím se přidá www-data
na varwwwusers
group, která je pak nastavena jako skupina pro /var/www/
a všechny jeho podsložky. chmod
dá vlastníkovi oprávnění ke čtení, zápisu a spouštění, ale skupina nebude moci spustit žádný skript, který by tam byl potenciálně nahrán, pokud by byl například webový server napaden.
Můžete jej nastavit na 740
aby to bylo bezpečnější, ale pak nebudete moci používat Django's
collectstatic
funkčnost, takže se držte 760
pokud si nejste velmi jisti tím, co děláte.