Publicidad

Como configurar Django con Apache2 con mod_wsgi en Linux


Por Alex el 26/01/2024, Comentar el artículo

Comparte este artículo:      




Configurar Django para que funcione con Apache2 o Nginx es bastante sencillo y necesario si queremos poner nuestro proyecto en producción. En este artículo veremos paso a paso la puesta en marcha de un proyecto con Apache2


Antes de nada vamos a crear el proyecto e instalar los requisitos necesarios para que todo funcione correctamente. Yo lo pongo todo aunque es posible que algunos paquetes ya los tengáis en el sistema:

sudo apt install apache2 apache2-dev python3-venv python3-dev libapache2-mod-wsgi-py3 python3-pip

Ahora hay que instalar los módulos necesarios para Django, estoy hay que hacerlo dentro del entorno elegido para desarrollar ya sea Python venv, docker o cualquier otro sistema de virtualización.

pip install django ConfigParser dj-database-url mod_wsgi

El modulo mod_wsgi es el que conectará con Apache2

Ahora creamos proyecto y aplicación web, dentro de una carpeta llamada por ejemplo apache, creamos:
Creamos el proyecto django

django-admin startproject mainp .

Creamos la aplicación web

python manage.py startapp web

Ahora que hemos llegado hasta aquí probemos que funciona el web, pero antes tenemos que habilitar en el fichero settings.py del proyecto los hosts que pueden acceder. En el array ALLOWED_HOSTS añadimos un * para permitirlos todos, si no los queremos todos ponemos el nombre de la url que tiene acceso:

ALLOWED_HOSTS = [ '*']

Y ahora ejecutamos el servidor de desarrollo de Django de la siguiente forma

python manage.py runserver

Esto crea un servidor con acceso a la IP http://127.0.0.1:8000/ pero si queremos utilizar otra porque estamos trabajando con entornos virtualizados podemos indicar el host:port que queremos:

python manage.py runserver http://192.168.1.137:8080


Y tendría que salir esto:

Django en el navegador

Ahora vamos a cambiar el servidor local de runserver por apache2 y para esto tenemos que crearnos un virtualhost en apache2 con la siguiente configuración, en un fichero llamado vhosts.django.conf, por ejemplo, escribimos:

<VirtualHost *:80>

  ServerName blog-apache.local

  DocumentRoot /home/vagrant/netveloper/apache2

  WSGIDaemonProcess app_web_apache python-path=/home/vagrant/netveloper/apache2
  WSGIProcessGroup app_web_apache
  WSGIScriptAlias / /home/vagrant/netveloper/apache2/mainp/wsgi.py

 <Directory /home/vagrant/netveloper/apache2>
     <Files wsgi.py>
        WSGIScriptReloading On
        Require all granted
     </Files>
 </Directory>

  Alias /static /home/vagrant/netveloper/apache2/web/static
  <Directory //home/vagrant/netveloper/apache2/web/static>
      Require all granted
  </Directory>

  ErrorLog ${APACHE_LOG_DIR}/error_web.log
  CustomLog ${APACHE_LOG_DIR}/access_web.log combined
</VirtualHost>


Y en nuestro hosts local (/etc/hosts) tendremos que apuntar la IP del servidor de desarrollo (si es el mismo local pues 127.0.0.1) en mi caso es 192.168.1.137 al nombre que hemos puesto en ServerName, en el ejemplo blog-apache.local. Y quedaría así:

Fichero hosts apuntando al nuevo nombre de dominio

Suponiendo que este fichero vhosts.django.conf lo hemos creado en la raíz del proyecto lo tenemos que enlazar con el directorio de Apache2 creando un enlace simbólico:

sudo ln -s /home/vagrant/netveloper/apache2/vhost.django.conf /etc/apache2/sites-enabled/

Reiniciamos apache2

sudo /etc/init.d/apache2 restart


Y probamos si todo funciona correctamente escribiendo en el navegador la url blog-apache.local, y si todo ha ido bien tendría que salir la misma página que anteriormente.

Django en el navegador con host personalizado en apache2

Y esto es todo, feliz programming
Saludos
Alex.



Si te ha gustado el artículo compartelo en:      




Añadir un comentarios:

Nombre:
Email: (no se publica el email)




SIGUENOS EN

ARCHIVO

Publicidad

.