Проблема развертывания: socket.io -- Apache2 Server на linux ubuntu 20.04

Мой проект создан с помощью React (create-react-app), React router (без webpack), -- Django (rest) и Socketio с eventlet на backend.
У меня есть 3 проблемы с развертыванием с apache2 - Все прекрасно работало на разработке:

Создал 2 conf файла, один для frontend порта 80 и один для backend порта 8000 - по отдельности они работают относительно нормально.

Проблема, с которой я столкнулся при развертывании:

  • Socket.io
    дает
[wsgi:error] 
eventlet.wsgi.server(eventlet.listen(("", 8000)), application, log_output=False)
sock.bind(addr)
Address already in use
  • проверил, что использует порт --> только apache2 и это дает тот же результат с любым другим портом
  • .
  • попробовал создать отдельный conf файл для сокета с портом 5000 (изменив порт в строке wsgi eventlet), тот же результат
    . в socketFile.conf:
Listen 5000
<VirtualHost *:5000>
    ServerName www.yawp.live
    ServerAlias yawp.live
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

<Directory /home/path/to/main/folder>
    <Files wsgi.py>
        Require all granted
    </Files>
</Directory>
WSGIDaemonProcess exampleSocket python-home=/home/path/to/venv python-path=/home/path/to/main/folder
WSGIProcessGroup exampleSocket
WSGIScriptAlias / /path/to/wsgi.py
</VirtualHost>
  • Не уверен, как создать эквивалент для sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

socketio_app/views.py

async_mode = None

import os
import socketio

basedir = os.path.dirname(os.path.realpath(__file__))
sio = socketio.Server(
    async_mode=async_mode, 
    logger=False, 
    cors_allowed_origins='http://localhost:3000'
)
thread = None
...

wsgi.py

import os
from django.core.wsgi import get_wsgi_application
from socketio_app.views import sio
import socketio
import eventlet
import eventlet.wsgi

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "server.settings")

application = get_wsgi_application()

application = socketio.WSGIApp(sio, application)

eventlet.wsgi.server(eventlet.listen(("", 8000)), application, log_output=False)

У меня есть еще 2 проблемы с фронтендом: прокси и react router

Я ценю вашу помощь! :)

Фундаментальная ошибка заключается в том, что вы пытаетесь связать два процесса на одном порту tcp на одном ip-адресе, это невозможно. 'Address already in use' - это сообщение об ошибке, которое вы получите при запуске другой программы, которая собирается использовать сокет, который уже прослушивается.

Используйте эту команду, чтобы узнать, используется ли уже порт 5000:

ss -tln|grep 5000

Я бы ожидал, что Apache слушает на порту 80 (http), а REST API на порту 5000.

Вернуться на верх