Penyelesaian untuk masalah ini ketika berhadapan dengan server produksi akan menggunakan collectstatic seperti yang telah disebutkan bahwa itu digunakan dan diselesaikan atau memberikan izin ke folder. Namun jika solusi Anda berada di lingkungan lokal, solusi tersebut dapat diperoleh dengan mengonfigurasi MEDIA
lokal direktori di settings.py
file yang bekerja di server lokal.
Jadi, akan menambahkan dua baris ini di file konfigurasi lokal seperti yang disebutkan @Nic Scozzaro:
MEDIA_ROOT = os.path.join (BASE_DIR, 'media')
STATIC_ROOT = os.path.join (BASE_DIR, 'static')
Setelah konfigurasi, restart layanan untuk menerapkan perbaikan.
Buat direktori 'MEDIA' di root proyek Anda. Kemudian atur:
MEDIA_ROOT = os.path.join(BASE_DIR,'MEDIA')
Untuk mengetahui pengguna mana yang Anda masuki:
$ whoami
ubuntu
Dan menambahkan ke solusi Anda, jika Anda menggunakan Instans AWS, Anda harus menambahkan pengguna Anda ke grup untuk dapat mengakses folder itu:
Membuat grup untuk pengguna layanan web (varwwwusers)
$ sudo groupadd varwwwusers
Ubah folder www dan jadikan milik varwwwusers
$ sudo chgrp -R varwwwusers /var/www/
www-data adalah server yang membuat permintaan Django, tambahkan itu ke grup
$ sudo adduser www-data varwwwusers
Ubah kebijakan folder
$ sudo chmod -R 770 /var/www/
Tambahkan ubuntu ke grup pengguna varwww
$ usermod -a -G varwwwusers ubuntu
Semoga ini bisa membantu!
Saya telah memecahkan ini sendiri pada akhirnya.
Saat menjalankan mesin pengembangan, saya sebenarnya menjalankan menggunakan hak pengguna saya saat ini. Namun, saat menjalankan di server penerapan, saya sebenarnya menjalankan wsgi
, yang artinya dijalankan menggunakan www-data
hak istimewa.
www-data
bukan pemilik atau grup pengguna yang memiliki /var/www
. Artinya www-data
diperlakukan sebagai other
dan memiliki izin yang disetel untuk orang lain.
Yang BURUK solusi untuk ini adalah dengan melakukan:
sudo chmod -R 777 /var/www/
Ini akan memberi semua orang akses penuh ke semua yang ada di /var/www/
, yang merupakan ide yang sangat buruk.
BURUK lainnya solusinya adalah dengan melakukan:
sudo chown -R www-data /var/www/
Ini akan mengubah pemilik menjadi www-data
, yang membuka kerentanan keamanan.
Yang BAIK solusinya adalah:
sudo groupadd varwwwusers
sudo adduser www-data varwwwusers
sudo chgrp -R varwwwusers /var/www/
sudo chmod -R 760 /var/www/
Ini menambahkan www-data
ke varwwwusers
grup, yang kemudian ditetapkan sebagai grup untuk /var/www/
dan semua subfoldernya. chmod
akan memberikan izin membaca, menulis, mengeksekusi kepada pemilik tetapi grup tidak akan dapat mengeksekusi skrip apa pun yang berpotensi diunggah di sana jika misalnya server web diretas.
Anda dapat mengaturnya ke 740
untuk membuatnya lebih aman tetapi Anda tidak akan dapat menggunakan Django's
collectstatic
fungsionalitas jadi tetap gunakan 760
kecuali jika Anda sangat yakin dengan apa yang Anda lakukan.