When I run my flask app from run.py File, it runs well, but when running from uWSGI that runs the run.py file, the app runs, but shows a runtime error of failed handshake (despite all API’s are HTTP, not HTTPS) that prevents handling requests:
you need to build uWSGI with SSL support to use the websocket handshake api function !!!
Traceback (most recent call last):
File "/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/flask/app.py", line 1498, in __call__
return self.wsgi_app(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/flask_socketio/__init__.py", line 43, in __call__
return super(_SocketIOMiddleware, self).__call__(environ,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/engineio/middleware.py", line 63, in __call__
return self.engineio_app.handle_request(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/socketio/server.py", line 430, in handle_request
return self.eio.handle_request(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/engineio/server.py", line 274, in handle_request
packets = socket.handle_get_request(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/engineio/socket.py", line 90, in handle_get_request
return getattr(self, '_upgrade_' + transport)(environ,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/engineio/socket.py", line 146, in _upgrade_websocket
return ws(environ, start_response)
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/engineio/async_drivers/gevent_uwsgi.py", line 35, in __call__
uwsgi.websocket_handshake()
OSError: unable to complete websocket handshake
File "/usr/local/lib/python3.12/site-packages/engineio/async_drivers/gevent.py", line 54, in __call__
Code:
app/config/uwsgi.ini:
[uwsgi]
http = :8080
gevent = 1000
enable-threads = true
http-websockets = true
master = true
wsgi-file = run.py
callable = app
run.py:
from app.app import create_app, socketio
app = create_app()
if __name__ == '__main__':
socketio.run(app, host='0.0.0.0' ,port=8080)
app.py:
from flask import Flask
from flask_jwt_extended import JWTManager
from flask_cors import CORS
from flask_migrate import Migrate
from pymongo import MongoClient
from app.config.config import Config
from flask_socketio import SocketIO
import logging
from logging.handlers import RotatingFileHandler
jwt = JWTManager()
migrate = Migrate()
socketio = SocketIO(cors_allowed_origins="*")
def generate_mongo_client(app):
MONGODB_URI = app.config['MONGODB_URI']
if int(app.config['IS_MONGO_LOCAL']):
mongo_client = MongoClient(MONGODB_URI)
else:
mongo_client = MongoClient(
MONGODB_URI,
tls=True,
retryWrites=False,
tlsCAFile="global-bundle.pem", # Adjust path accordingly
socketTimeoutMS=60000,
connectTimeoutMS=60000
)
db = mongo_client['db']
app.db = db
def create_app():
app = Flask(__name__)
app.config.from_object(Config)
generate_mongo_client(app)
jwt.init_app(app)
socketio.init_app(app, cors_allowed_origins="*")
CORS(app, supports_credentials=True, origins="*")
from app.routes.api import bp as main_blueprint
app.register_blueprint(main_blueprint)
return app
Also, when setting processes and threads in the uwsgi.ini file, the app is not able to run at all, and throws this error again and again:
^CSIGINT/SIGTERM received...killing workers...
gateway "uWSGI http 1" has been buried (pid: 103360)
Respawned uWSGI worker 1 (new pid: 103412)
worker 2 buried after 0 seconds
*** running gevent loop engine [addr:0x56e04f36bd30] ***
!!! uWSGI process 103412 got Segmentation Fault !!!
*** backtrace of 103412 ***
uwsgi(uwsgi_backtrace+0x33) [0x56e04f34bbc3]
uwsgi(uwsgi_segfault+0x27) [0x56e04f34bff7]
/usr/lib/x86_64-linux-gnu/libc.so.6(+0x45320) [0x719a10445320]
uwsgi(wsgi_req_setup+0xb) [0x56e04f2fc86b]
uwsgi(py_uwsgi_gevent_main+0x52) [0x56e04f36b842]
/usr/lib/x86_64-linux-gnu/libpython3.12.so.1.0(+0x1dbe68) [0x719a109dbe68]
/usr/lib/x86_64-linux-gnu/libpython3.12.so.1.0(_PyObject_Call+0x5c) [0x719a1098482c]
/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/gevent/libev/corecext.cpython-312-x86_64-linux-gnu.so(gevent_callback_io+0xc0) [0x719a0d0bd740]
/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/gevent/libev/corecext.cpython-312-x86_64-linux-gnu.so(ev_invoke_pending+0x4b) [0x719a0d0bdb5b]
/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/gevent/libev/corecext.cpython-312-x86_64-linux-gnu.so(ev_run+0x552) [0x719a0d0e94b2]
/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/gevent/libev/corecext.cpython-312-x86_64-linux-gnu.so(+0x4dd9e) [0x719a0d0e9d9e]
/usr/lib/x86_64-linux-gnu/libpython3.12.so.1.0(PyObject_Vectorcall+0x5c) [0x719a10982afc]
/usr/lib/x86_64-linux-gnu/libpython3.12.so.1.0(_PyEval_EvalFrameDefault+0x40ee) [0x719a1091d5ee]
/usr/lib/x86_64-linux-gnu/libpython3.12.so.1.0(+0x18616a) [0x719a1098616a]
/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/greenlet/_greenlet.cpython-312-x86_64-linux-gnu.so(_ZN8greenlet12UserGreenlet15inner_bootstrapEP9_greenletP7_object+0x2a8) [0x719a0ecfea98]
/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/greenlet/_greenlet.cpython-312-x86_64-linux-gnu.so(_ZN8greenlet12UserGreenlet13g_initialstubEPv+0x7a7) [0x719a0ed00007]
/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/greenlet/_greenlet.cpython-312-x86_64-linux-gnu.so(_ZN8greenlet12UserGreenlet8g_switchEv+0x11f) [0x719a0ecfe41f]
/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/greenlet/_greenlet.cpython-312-x86_64-linux-gnu.so(+0xf171) [0x719a0ecf9171]
/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/gevent/_gevent_c_greenlet_primitives.cpython-312-x86_64-linux-gnu.so(+0xd0d9) [0x719a0ecb60d9]
/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/gevent/_gevent_c_greenlet_primitives.cpython-312-x86_64-linux-gnu.so(+0xdbae) [0x719a0ecb6bae]
/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/gevent/_gevent_c_greenlet_primitives.cpython-312-x86_64-linux-gnu.so(+0xd916) [0x719a0ecb6916]
/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/gevent/_gevent_cgreenlet.cpython-312-x86_64-linux-gnu.so(+0x2d92b) [0x719a0d05b92b]
/home/ubuntu/projects/MY_APP/.venv/lib/python3.12/site-packages/gevent/_gevent_cgreenlet.cpython-312-x86_64-linux-gnu.so(+0x2027b) [0x719a0d04e27b]
/usr/lib/x86_64-linux-gnu/libpython3.12.so.1.0(+0x18616a) [0x719a1098616a]
/usr/lib/x86_64-linux-gnu/libpython3.12.so.1.0(+0x18341d) [0x719a1098341d]
/usr/lib/x86_64-linux-gnu/libpython3.12.so.1.0(_PyObject_CallMethod_SizeT+0xee) [0x719a1098383e]
uwsgi(+0xa72ec) [0x56e04f36c2ec]
uwsgi(uwsgi_ignition+0x132) [0x56e04f34c1e2]
uwsgi(uwsgi_worker_run+0x290) [0x56e04f350a10]
uwsgi(uwsgi_run+0x45a) [0x56e04f350f5a]
uwsgi(+0x37184) [0x56e04f2fc184]
/usr/lib/x86_64-linux-gnu/libc.so.6(+0x2a1ca) [0x719a1042a1ca]
/usr/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x8b) [0x719a1042a28b]
uwsgi(_start+0x25) [0x56e04f2fc1b5]
*** end of backtrace ***
Thanks