Saya memiliki server Flask yang berjalan melalui port 5000, dan tidak apa-apa. Saya dapat mengaksesnya di http://contoh.co.id/000
Tetapi apakah mungkin untuk mengaksesnya di http://example.com ? Saya berasumsi itu berarti saya harus mengubah port dari 5000 menjadi 80. Tetapi ketika saya mencobanya di Flask, saya mendapatkan pesan kesalahan ini ketika saya menjalankannya.
Traceback (most recent call last):
File "xxxxxx.py", line 31, in <module>
app.run(host="0.0.0.0", port=int("80"), debug=True)
File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
File "/usr/local/lib/python2.6/dist-packages/werkzeug/serving.py", line 706, in run_simple
test_socket.bind((hostname, port))
File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
Menjalankan lsof -i :80
pengembalian
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 467 root 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 4413 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14346 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14570 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14571 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14573 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
Apakah saya harus membunuh proses ini terlebih dahulu? Apakah itu aman? Atau adakah cara lain untuk menjaga Flask berjalan pada port 5000 tetapi entah bagaimana domain situs web redirect entah bagaimana?
python
networking
flask
port
quantumtremor
sumber
sumber
Jawaban:
Jadi itu memunculkan pesan kesalahan karena Anda punya
apache2
berjalan pada port 80.Jika ini untuk pengembangan, saya hanya akan membiarkannya seperti pada port 5000.
Jika itu untuk produksi:
Tidak direkomendasikan
apache2
dulu;Tidak direkomendasikan karena dinyatakan dalam dokumentasi:
Direkomendasikan
HTTP
Lalu lintas proxy melaluiapache2
ke Flask.Dengan cara ini,
apache2
dapat menangani semua file statis Anda (yang sangat bagus - jauh lebih baik daripada server debug yang ada di Flask) dan bertindak sebagai proksi terbalik untuk konten dinamis Anda, meneruskan permintaan tersebut ke Flask.Berikut tautan ke dokumentasi resmi tentang menyiapkan Flask dengan Apache + mod_wsgi.
Sunting 1 - Klarifikasi untuk @Djack
Ketika permintaan datang ke server pada port 80 (
HTTP
) atau port 443 (HTTPS
) server web seperti Apache atau Nginx menangani koneksi permintaan dan mencari tahu apa yang harus dilakukan dengannya. Dalam kasus kami, permintaan yang diterima harus dikonfigurasi untuk diteruskan ke Flask pada protokol WSGI dan ditangani oleh kode Python. Ini adalah bagian "dinamis".Ada beberapa keuntungan untuk mengkonfigurasi server web Anda seperti di atas;
sumber
Proxy HTTP traffic to Flask through apache2
" dan "reverse proxy for dynamic content
"?1- Hentikan aplikasi lain yang menggunakan port 80. 2- menjalankan aplikasi dengan port 80:
sumber
Untuk server yang terlihat secara eksternal, di mana Anda tidak menggunakan apache atau server web lain yang Anda ketikkan
sumber
CMD flask run --host=0.0.0.0 --port=$PORT
dalam Dockerfile saya (untuk alasan heroku) dan saya terus mendapatkan kesalahan tentang membutuhkan integer untuk port sayaJika Anda menggunakan yang berikut untuk mengubah port atau host:
gunakan kode berikut untuk memulai server (pintu masuk utama saya untuk labu adalah app.py):
alih-alih menggunakan:
sumber
Jika Anda ingin aplikasi Anda pada port yang sama yaitu port = 5000 maka hanya di terminal Anda jalankan perintah ini:
lalu jalankan:
Jika Anda ingin menjalankan pada port yang ditentukan, misalnya jika Anda ingin menjalankan pada port = 80, dalam file utama Anda cukup sebutkan ini:
sumber
Cara yang mudah digunakan adalah menggunakan paket
python-dotenv
: Ia membaca.flaskenv
file tempat Anda dapat menyimpan variabel lingkungan untuk labu.pip install python-dotenv
.flaskenv
di direktori root aplikasi AndaDi dalam file yang Anda tentukan:
Setelah itu Anda hanya perlu menjalankan aplikasi Anda
flask run
dan dapat mengakses aplikasi Anda di port itu.Harap perhatikan bahwa
FLASK_RUN_HOST
default ke127.0.0.1
danFLASK_RUN_PORT
default ke5000
.sumber
Ini adalah satu-satunya solusi yang bekerja untuk saya di Ubuntu-18.
Di dalam file
app.py
, gunakan:Kode di atas akan memberikan kesalahan izin yang sama kecuali
sudo
digunakan untuk menjalankannya:sumber
Masalah Anda adalah, bahwa Anda memiliki server web apache yang sudah berjalan yang sudah menggunakan port 80. Jadi, Anda bisa:
Bunuh apache: Anda mungkin harus melakukan ini melalui
/etc/init.d/apache2 stop
, daripada hanya membunuh mereka.Menyebarkan aplikasi labu Anda dalam proses apache Anda, seperti yang dijelaskan oleh labu di apache .
sumber
Saya harus mengatur
FLASK_RUN_PORT
di lingkungan saya ke nomor port yang ditentukan. Lain kali Anda memulai aplikasi, Flask akan memuat variabel lingkungan itu dengan nomor port yang Anda pilih.sumber
Anda tidak perlu mengubah nomor port untuk aplikasi Anda, cukup konfigurasikan server www Anda (nginx atau apache) ke kueri proxy ke flask port. Perhatikan
uWSGI
.sumber
atur port dengan
app.run(port=80,debug=True)
Anda harus mengatur debug ke true ketika di devsumber
Solusi termudah dan terbaik
Simpan file .py Anda di folder. Kasus ini nama folder saya sedang diuji. Di command prompt jalankan yang berikut ini
----------------- Mengikuti akan dikembalikan ----------------
Sekarang pada jenis browser Anda: http://127.0.0.1:8000 . Terima kasih
sumber
Dalam skenario saya, langkah-langkah berikut ini berfungsi seperti pesona:
Menginstal paket:
Membuat file tersembunyi di direktori aplikasi saya "flaskr / .flaskenv"
Menambahkan konten berikut:
Terakhir, jalankan perintah labu sekali lagi:
Versi yang saya kerjakan adalah:
sumber