Bagaimana cara mengakses server web Django lokal dari dunia luar

176

Saya mengikuti instruksi di sini untuk menjalankan Django menggunakan server web bawaan dan berhasil menjalankannya menggunakan python manage.py runserver. Jika saya mengakses 127.0.0.1:port secara lokal dari server web, saya mendapatkan halaman Django yang menunjukkan itu berfungsi.

Saya menyadari bahwa server web Django bukan server produksi, tetapi penting bagi saya untuk tujuan pengujian agar dapat mengaksesnya dari dunia luar - yaitu bukan dari browser web di server, tetapi dari komputer yang berbeda.

Saya mencoba:

http://mywebserver:port_django_runs_on

tapi itu tidak berhasil. Saya juga mencoba menggunakan IP sebagai gantinya (berdasarkan ifconfig) untuk mengakses:

http://myipaddress:port_django_runs_on 

yang tidak berhasil juga.

Server web berjalan sehingga harus dapat diakses dari luar, saya hanya tidak yakin bagaimana caranya. Saya menjalankan Linux dengan Apache, meskipun saya belum mengkonfigurasi Django dengan Apache.

Ada ide tentang bagaimana melakukan ini?

Manusia Timah
sumber
3
Mengapa tidak mengkonfigurasi Django dengan Apache dan mod_wsgi? Mengapa tidak melakukan ini dengan benar?
S.Lott
@ S.Lott Bagaimana jika Anda memiliki banyak proyek berbeda di server yang ingin Anda jalankan pada waktu yang berbeda dan Anda dan Anda tidak ingin mengkonfigurasi ulang Apache setiap kali Anda menambahkan proyek baru?
robenkleene

Jawaban:

303

Anda harus menjalankan server pengembangan sehingga ia mendengarkan antarmuka untuk jaringan Anda.

Misalnya

python manage.py runserver 0.0.0.0:8000

mendengarkan pada setiap antarmuka pada port 8000.

Tidak masalah apakah Anda mengakses server web dengan IP atau nama host. Saya kira Anda masih di LAN Anda sendiri.
Jika Anda benar-benar ingin mengakses server dari luar, Anda juga harus mengkonfigurasi router Anda untuk meneruskan port misalnya 8000ke server Anda.


Periksa firewall Anda di server Anda apakah koneksi masuk ke port yang digunakan diizinkan!

Dengan asumsi Anda dapat mengakses server Apache Anda dari luar dengan sukses, Anda juga dapat mencoba ini:

  • Hentikan server Apache, agar porta 80itu gratis.
  • Mulai server pengembangan dengan sudo python manage.py runserver 0.0.0.0:80
Felix Kling
sumber
1
Menggunakan "python manage.py runserver 0.0.0.0:8000" masih memberikan hasil yang sama. Bisakah Anda mengatakan lebih banyak tentang bagaimana saya dapat mengkonfigurasi Apache untuk menangani port ini?
1
@ user248237: Anda menjalankan server pengembangan, ini sama sekali tidak terkait dengan server web Apache. Server pengembangan adalah server web mandiri.
Felix Kling
Diperlukan hak khusus untuk menggunakan port 80. Anda dapat mencoba a sudo python manage.py runserver 80.
S.Lott
@ S.Lott: Oh, terima kasih. Saya tahu, itu ada dalam pikiran saya ketika menulisnya tetapi entah bagaimana tidak membuatnya ke keyboard;)
Felix Kling
1
Mengizinkan semua orang ALLOWED_HOSTS = ['*']bekerja untuk saya mengakses aplikasi Django di Mac dari ponsel Android saya
Anupam
28

Saya harus menambahkan baris ini ke settings.py untuk membuatnya berfungsi (jika tidak menunjukkan kesalahan saat diakses dari komputer lain)

ALLOWED_HOSTS = ['*']

lalu jalankan server dengan:

python manage.py runserver 0.0.0.0:9595

Pastikan juga firewall memungkinkan koneksi ke port itu

Bonfix Ngetich
sumber
14

Pilih satu atau lebih dari:

  • Aplikasi Anda tidak berhasil mendengarkan pada IP yang dimaksud: PORT
    • Karena Anda belum berhasil mengonfigurasinya
    • Karena pengguna tidak memiliki izin untuk
  • Aplikasi Anda berhasil mendengarkan pada IP yang dimaksud: PORT, tetapi klien tidak dapat mencapainya karena
    • Server iptables lokal mencegahnya.
    • Firewall mencegahnya.

Jadi, Anda dapat memeriksa apakah aplikasi Anda berhasil mendengarkan dengan menjalankannya lsof -isebagai root pada mesin dan mencari pythonentri dengan port yang sesuai yang telah Anda tentukan.

Pengguna non-root umumnya tidak dapat mengikat ke port <1024.

Anda harus melihat iptables -nvLuntuk melihat apakah ada aturan yang akan mencegah akses ke ip: port yang Anda coba ikat aplikasi Anda.

Jika ada firewall hulu dan Anda tidak tahu banyak tentangnya, Anda harus berbicara dengan administrator jaringan Anda.

MattH
sumber
Anda dapat menjelaskan you haven't configured it successfully?
ChillarAnand
@ChillarAnand: cukup Anda mengecek django runserverapakah sebenarnya mendengarkan di mana Anda ingin, misalnya menggunakan lsof.
MattH
@ChillarAnand Saya telah melalui langkah-langkah yang Anda perintahkan. Menggunakan lsofSaya melihat entri python untuk port saya. Tapi tautan saya yaitu myip: 8000 tidak merespons. Saya tahu ini sudah terlambat tetapi saran apa pun akan membantu.
WaterRocket8236
8

lakukan saja ini:

python manage.py runserver 0:8000

dengan perintah di atas Anda sebenarnya mengikatnya ke alamat IP eksternal. jadi sekarang ketika Anda mengakses alamat IP Anda dengan nomor port, Anda akan dapat mengaksesnya di browser tanpa masalah.

cukup ketikkan yang berikut di bilah alamat browser:

<your ip address>:8000

misalnya:

192.168.1.130:8000

Anda mungkin harus mengedit settings.py tambahkan yang berikut ini di settings.py di baris terakhir:

ALLOWED_HOSTS = ['*']

semoga ini membantu ...

Joish
sumber
5

Untuk pengguna AWS.

Saya harus menggunakan langkah-langkah berikut untuk sampai ke sana.

1) Pastikan pip dan Django dipasang di tingkat sudo

  • sudo apt-get install python-pip
  • sudo pip instal Django

2) Pastikan bahwa aturan keamanan grup terikat menyertakan http pada port 80 untuk 0.0.0.0/0

  • dikonfigurasi melalui konsol AWS

3) Tambahkan IP Publik dan DNS ke ALLOWED_HOSTS

  • ALLOWED_HOSTS adalah objek daftar yang dapat Anda temukan di settings.py
  • ALLOWED_HOSTS = ["75.254.65.19", "ec2-54-528-27-21.compute-1.amazonaws.com"]

4) Luncurkan server pengembangan dengan sudo pada port 80

  • sudo python manage.py runserver 0:80

Situs sekarang tersedia di salah satu dari berikut ini (tidak perlu: 80 karena itu adalah default untuk http):

  • [DNS Publik] yaitu ec2-54-528-27-21.compute-1.amazonaws.com
  • [Public IP] yaitu 75.254.65.19
datavoredan
sumber
2

Saya akan menambahkan ini di sini:

  1. sudo python manage.py runserver 80

  2. Buka ponsel atau komputer Anda dan masukkan IP internal komputer Anda (mis. 192.168.0.12) Ke dalam browser.

Pada titik ini Anda harus terhubung ke server Django.

Ini juga harus bekerja tanpa sudo:

python manage.py runserver 0.0.0.0:8000
James111
sumber
0

Jika Anda menggunakan Docker, Anda perlu memastikan port juga terbuka

Amjad Al Taleb
sumber
0

DIPERBARUI 2020 COBA CARA INI

python manage.py runserver yourIp:8000

ALLOWED_HOSTS = ["*"]
Kashif
sumber