У меня есть сервер Flask, работающий через порт 5000, и это нормально. Я могу получить к нему доступ на http://example.com:5000
Но возможно ли просто получить к нему доступ по адресу http://example.com ? Я предполагаю, что это означает, что я должен изменить порт с 5000 на 80. Но когда я пытаюсь это сделать на Flask, я получаю это сообщение об ошибке при запуске.
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
Бег lsof -i :80
возвращается
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)
Нужно ли сначала убивать эти процессы? Это безопасно? Или есть другой способ сохранить работу Flask на порте 5000, но как-то перенаправить основной домен сайта?
python
networking
flask
port
quantumtremor
источник
источник
Ответы:
Так что выдает это сообщение об ошибке, потому что вы
apache2
работаете на порту 80.Если бы это было для развития, я бы просто оставил его как есть на порту 5000.
Если это для производства либо:
Не рекомендуется
apache2
первым;Не рекомендуется, как указано в документации:
рекомендуемые
HTTP
трафик черезapache2
Flask.Таким образом, вы
apache2
можете обрабатывать все ваши статические файлы (что очень хорошо - намного лучше, чем сервер отладки, встроенный в Flask) и выступать в качестве обратного прокси-сервера для вашего динамического контента, передавая эти запросы Flask.Вот ссылка на официальную документацию по настройке Flask с Apache + mod_wsgi.
Редактировать 1 - Разъяснение для @Djack
Когда запрос поступает на сервер через порт 80 (
HTTP
) или порт 443 (HTTPS
), веб-сервер, такой как Apache или Nginx, обрабатывает соединение запроса и определяет, что с ним делать. В нашем случае полученный запрос должен быть настроен на передачу во Flask по протоколу WSGI и обработан кодом Python. Это «динамическая» часть.Есть несколько преимуществ для настройки вашего веб-сервера, как указано выше;
источник
Proxy HTTP traffic to Flask through apache2
" и "reverse proxy for dynamic content
"?1- Остановите другие приложения, использующие порт 80. 2 - Запустите приложение с портом 80:
источник
Для внешне видимого сервера, где вы не используете apache или другой веб-сервер, вы просто набираете
источник
CMD flask run --host=0.0.0.0 --port=$PORT
в своем Dockerfile (по причинам heroku), и я получаю ошибки о необходимости целого числа для моего портаЕсли вы используете следующее для изменения порта или хоста:
используйте следующий код для запуска сервера (мой главный вход для flask - app.py):
Вместо того, чтобы использовать:
источник
Если вы хотите, чтобы ваше приложение было на том же порту, то есть port = 5000, то просто в своем терминале выполните эту команду
и затем запустите:
Если вы хотите работать с указанным портом, например, если вы хотите работать с портом = 80, в основном файле просто укажите это:
источник
Удобным способом является использование пакета
python-dotenv
: он считывает.flaskenv
файл, в котором вы можете хранить переменные среды для фляги.pip install python-dotenv
.flaskenv
в корневом каталоге вашего приложенияВнутри файла вы указываете:
После этого вам просто нужно запустить приложение
flask run
и получить доступ к нему через этот порт.Обратите внимание, что по
FLASK_RUN_HOST
умолчанию127.0.0.1
и поFLASK_RUN_PORT
умолчанию5000
.источник
Это единственное решение, которое работало для меня на Ubuntu-18.
Внутри файла
app.py
используйте:Приведенный выше код выдаст ту же ошибку разрешения, если только
sudo
она не используется для его запуска:источник
Ваша проблема в том, что у вас уже работает веб-сервер apache, который уже использует порт 80. Итак, вы можете:
Убить Apache: Вы, вероятно, должны сделать это через
/etc/init.d/apache2 stop
, а не просто убить их.Разверните ваше приложение фляги в вашем процессе Apache, как описывает фляга в Apache .
источник
Я должен был установить
FLASK_RUN_PORT
в моей среде указанный номер порта. В следующий раз, когда вы запустите ваше приложение, Flask загрузит эту переменную среды с выбранным вами номером порта.источник
Вам не нужно менять номер порта для вашего приложения, просто настройте свой сервер www (nginx или apache) для запросов прокси к порту фляги. Обратите внимание на
uWSGI
.источник
установите порт, с которым
app.run(port=80,debug=True)
вы должны установить debug в значение true, когда на devисточник
Самое простое и лучшее решение
Сохраните ваш .py файл в папке. В этом случае моя папка называется test. В командной строке запустите следующее
----------------- Следующее будет возвращено ----------------
Теперь в вашем браузере введите: http://127.0.0.1:8000 . Спасибо
источник
В моем сценарии следующие шаги работали как шарм:
Установка пакета:
Создание скрытого файла в моей директории приложения "flaskr / .flaskenv"
Добавление следующего контента:
Наконец, запустите команду flask еще раз:
Версия, над которой я работаю:
источник