¿Cómo configurar Apache para ejecutar ASGI en los canales de Django? ¿Se requiere Apache?

Construí un proyecto django y lo implementé en producción utilizando el combo Apache-WSGI. Para eso había añadido el apache2.conf como se muestra a continuación:

WSGIScriptAlias / /home/ubuntu/MyProject/MyProject/wsgi.py WSGIPythonPath /home/ubuntu/MyProject   Require all granted   

Entonces, esto significa que todas las solicitudes a mi sitio web primero van a Apache, que luego permite que WSGI entre en juego. Entonces, si apagara Apache, el sitio web no funcionaría.

Ahora tengo instalado Django-Channels . Según la sección ‘Implementación’ en la documentación ( https://channels.readthedocs.io/en/latest/deploying.html ), tengo:

  1. Redis instalado (en mi servidor Django Project)
  2. Ejecutar servidores de trabajo
  3. Ejecutar Daphne (servidor de interfaz)
  4. He detenido a Apache en este momento y el sitio web se niega a conectarse.

Las siguientes son mis dudas:

  • ¿Daphne toma el apache como el servidor principal? En este caso, ¿ya no necesito Apache y puedo cerrarlo?
  • Si aún se requiere Apache, ¿qué configuración debo hacer en el archivo apache2.conf?

Actualmente Apache no tiene una implementación de servidor ASGI. Eso significa que puedes seguir usando Apache, pero también necesitarás Daphne. En esencia, Apache cambiará de ser su servidor web principal a ser un proxy inverso.

Existe potencialmente algo de valor al hacer eso: los desarrolladores de Python han estado ejecutando nginx en modo de proxy inverso durante años. Sin embargo, Daphne es un servidor web muy capaz, está construido sobre el servidor web de Twisted, por lo que Apache no es necesario.

Para ese momento, entonces, recomiendo correr solo con Daphne: haga que Daphne escuche en sus puertos primarios y desactive Apache por completo. Si encuentra que hay características de Apache que aún desea, deberá configurar Apache como un proxy inverso: un artículo sugerido para la configuración es este de Digital Ocean .

Como lo mencionó Lukasa, detuve el servidor Apache, que al principio detuvo mi aplicación django para que fuera entregada al mundo. Luego ejecuté los siguientes comandos como root:

  • sudo daphne MyProject.asgi: channel_layer –port 80 –bind 0.0.0.0 -v2
  • sudo python manage.py runworker -v2

Los dos comandos comenzaron a entregar la aplicación a las solicitudes http desde fuera del servidor. No se requirieron otras configuraciones más que las mencionadas en la publicación de la pregunta.