Можно ли запустить флягу без порта?

Я попытался запустить Flask на хостинге, используя:

if __name__ == "__main__":
    app.run('0.0.0.0', 8000)

Но хостер имеет порт 8080 как закрытый, можно ли запустить Flask с портом 80 по умолчанию?

Я пробовал, выдает эту ошибку:

Use a production WSGI server instead.                                                                                                                                                                     
 * Debug mode: off                                                                                                                                                                                           
Traceback (most recent call last):                                                                                                                                                                           
  File "__init__.py", line 461, in <module>                                                                                                                                                                  
    app.run('0.0.0.0', 80)                                                                                                                                                                                   
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/flask/app.py", line 943, in run                                                                                          
    run_simple(host, port, self, **options)                                                                                                                                                                  
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/werkzeug/serving.py", line 814, in run_simple                                                                            
    inner()                                                                                                                                                                                                  
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/werkzeug/serving.py", line 774, in inner                                                                                 
    fd=fd)                                                                                                                                                                                                   
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/werkzeug/serving.py", line 660, in make_server                                                                           
    passthrough_errors, ssl_context, fd=fd)                                                                                                                                                                  
  File "/home/o/oliwin4/project/public_html/myenv/local/lib/python2.7/site-packages/werkzeug/serving.py", line 577, in __init__                                                                              
    self.address_family), handler)                                                                                                                                                                           
  File "/usr/lib/python2.7/SocketServer.py", line 419, in __init__                                                                                                                                           
    self.server_bind()                                                                                                                                                                                       
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 108, in server_bind                                                                                                                                      
    SocketServer.TCPServer.server_bind(self)                                                                                                                                                                 
  File "/usr/lib/python2.7/SocketServer.py", line 430, in server_bind                                                                                                                                        
    self.socket.bind(self.server_address)                                                                                                                                                                    
  File "/usr/lib/python2.7/socket.py", line 224, in meth                                                                                                                                                     
    return getattr(self._sock,name)(*args)                                                                                                                                                                   
socket.error: [Errno 1] Operation not permitted   

Итак, хостер сказал, что порт 80 открыт.


person OPV    schedule 08.02.2019    source источник
comment
Кажется, порт уже открыт системой, но как тогда запустить приложение?   -  person OPV    schedule 08.02.2019
comment
@DariusMorawiec Это не связано.   -  person Selcuk    schedule 08.02.2019
comment
@OPV Вы работаете как root? Вы не можете привязаться к порту ниже 1024 как обычный пользователь.   -  person Selcuk    schedule 08.02.2019


Ответы (1)


В документации Flask указано, что:

Несмотря на легкость и простоту использования, встроенный сервер Flask не подходит для производства, поскольку плохо масштабируется. Некоторые параметры, доступные для правильной работы Flask в производственной среде, описаны здесь.

В документации также указано несколько методов использования серверов WSGI для развертывания вашего веб-приложения. WSGI (Интерфейс шлюза веб-сервера) — это стандарт, который перенаправляет запросы с веб-серверов в веб-приложения, написанные на Python. Вы захотите использовать сервер WSGI для запуска своего веб-сайта на своем хосте, поскольку это звучит так, как будто вы пытаетесь развернуть приложение Flask в рабочей среде.

Чтобы ответить на ваш первоначальный вопрос, библиотека Flask намеренно выдает ошибку, когда вы пытаетесь запустить ее на порту 80, потому что они специально говорят, что вы не должны использовать встроенный сервер Flask для производственного использования. Это часть вашей трассировки стека:

Use a production WSGI server instead.                                                                                                                                                                     
* Debug mode: off    

а также

socket.error: [Errno 1] Operation not permitted   

Для ленивых или если приведенная выше ссылка не работает, вот пример использования Gunicorn (скопировано непосредственно из приведенной выше ссылки на документацию)

Гуникорн

Gunicorn «Зеленый единорог» — это HTTP-сервер WSGI для UNIX. Это предварительная рабочая модель, портированная из проекта Ruby Unicorn. Он поддерживает как eventlet, так и greenlet. Запустить приложение Flask на этом сервере довольно просто:

мой проект: приложение

Gunicorn предоставляет множество параметров командной строки — см. gunicorn -h. Например, чтобы запустить приложение Flask с 4 рабочими процессами (-w 4), привязанными к локальному порту 4000 (-b 127.0.0.1:4000):

gunicorn -w 4 -b 127.0.0.1:4000 мой проект:приложение

person brunston    schedule 08.02.2019
comment
Не могли бы вы дать инструкцию, пожалуйста, как его запустить - person OPV; 08.02.2019
comment
Щелкните ссылку на документацию Flask. Вариантов много, и ко всем есть инструкции. - person brunston; 08.02.2019
comment
Проблема в том, что у меня простой хостинг, а не VDS, и открытый порт 80 - person OPV; 08.02.2019
comment
Лучше запустить под апачем, что посоветуете? Я могу редактировать только htaccess - person OPV; 08.02.2019
comment
@OPV, пожалуйста, попробуйте использовать ресурсы, на которые я ссылаюсь. Если вы посмотрите, вы найдете инструкции для apache: flask.pocoo.org /docs/1.0/развертывание/mod_wsgi - person brunston; 08.02.2019
comment
У меня нет доступа к конфигурации файлов Apache, только htaccess - person OPV; 08.02.2019