我的项目是使用 React (create-react-app)、React router (无 webpack)、Django (rest) 和后端带有 eventlet 的 Socketio 创建的。
我在使用 apache2 进行部署时遇到了 3 个问题 -开发过程中一切顺利:
创建了 2 个conf 文件,一个用于前端端口 80,一个用于后端端口 8000 - 它们分别工作得相对良好。
我在部署时遇到的问题:
[wsgi:error]
eventlet.wsgi.server(eventlet.listen(("", 8000)), application, log_output=False)
sock.bind(addr)
Address already in use
- 检查了哪些端口使用了 --> 仅 apache2 并且它与任何其他端口给出了相同的结果
- 尝试为端口 5000 的套接字创建一个单独的conf文件(更改 wsgi eventlet 行中的端口),结果相同
socketFile.conf:
Listen 5000
<VirtualHost *:5000>
ServerName www.example.com
ServerAlias example.com
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>
- 下一行默认使用 eventlet 完成(reuse_addr=True,reuse_port=None)
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)