Lanzar un servidor Django con Apache

Introducción


Saludos a todos, en este hilo vamos a tratar como lanzar un servidor Django en el VPS y cómo tenerlo en producción.
Los requisitos que vamos a necesitar es tener instalado python, pip y apache, no voy a explicarlo porque ya tengo un hilo para ello, el que no sepa que es y como se instala, le he dejado el link para que pueda conocerlo.
Los demás requisitos los iré explicando poco a poco aquí. Aquí os dejo un resumen de lo que vamos a ver:

Django


Lo primero que haré es explicar que es Django. Es un framework de aplicaciones web gratuito de la parte servidor y de open source escrito en Python.
Algunas de las ventajas de Django es su panel de administrador que nos ofrece, lo que hace más fácil controlar toda la parte del servidor, gracias a su UI.
  • Un mapeador objeto-relacional.
  • Aplicaciones "enchufables" que pueden instalarse en cualquier página gestionada con Django.
  • Una API de base de datos robusta.
  • Un sistema incorporado de "vistas genéricas" que ahorra tener que escribir la lógica de ciertas tareas comunes.
  • Un sistema extensible de plantillas basado en etiquetas, con herencia de plantillas.
  • Un despachador de URLs basado en expresiones regulares.
  • Un sistema "middleware" para desarrollar características adicionales; por ejemplo, la distribución principal de Django incluye componentes middleware que proporcionan cacheo, compresión de la salida, normalización de URLs, protección CSRF y soporte de sesiones.
  • Soporte de internacionalización, incluyendo traducciones incorporadas de la interfaz de administración.
  • Documentación incorporada accesible a través de la aplicación administrativa.
Y ahora después de todo este rollo que os he contado, sacado de la wikipedia, vamos a empezar a instalar todo lo necesario.

Entorno virtual


Lo primero que deberemos hacer es crear el entorno virtual Python.
Un entorno virtual python es un mecanismo que me permite gestionar programas y paquetes python sin tener permisos de administración, es decir, cualquier usuario sin privilegios puede tener uno o más "espacios aislados" donde poder instalar distintas versiones de programas y paquetes python.
Hay varios motivos por lo que se usan entornos virtuales:
  • Podemos tener necesidad de utilizar versiones de paquetes python que no son las que vienen empaquetadas oficialmente en nuestra distribución linux. Una solución puede ser usar pip como administrador: esta solución nos puede dar muchos problemas, ya que podemos romper las dependencias entre las versiones de nuestros paquetes python instalados en el sistema y algún paquete puede dejar de funcionar. En este caso sería necesario la utilización de un entorno virtual.
  • En el caso del desarrollo y despliegue de aplicaciones web, cada vez es más importante acercar los entornos de desarrollo, prueba y producción, es decir, que estos tres entornos sean los más parecidos posible, para no tener "sorpresas" a la hora de desplegar la aplicación en producción.
  • Los ciclos de desarrollo de aplicaciones modernos en lenguajes como python son cada vez más rápidos, esto puede suponer que en una misma máquina podamos tener aplicaciones que utilicen diferentes dependencias y versiones de un mismo paquete.

Instalación


Venga ahora si, empezamos:
Lo primero que deberemos hacer es instalar Python, ojo todo este hilo está pensado para hacerse en un VPS para que después desde un ordenador remoto se pueda visualizar.
sudo apt install python3.6
Esto sería en distribuciones Ubuntu o Debian, en caso de tener otra distribución aquí os dejo los comandos para otros sistemas operativos.
Para comprobar si tenemos Python instalado:
python -V
El mensaje de salida debe ser similar a este:
Python 2.7.15rc1
Ahora deberemos instalar pip
sudo apt-get install python-pip
Es una utilidad de línea de comandos que le permite instalar, reinstalar o desinstalar paquetes PyPI con un comando simple y directo: "pip".
Al igual que Python si queremos comprobar si la instalación ha ido bien o si ya lo teníamos instalado usamos el comando:
pip -V
Y el mensaje de salida debe ser algo así:
pip 19.0.1
Bien ahora deberemos crear nuestro entorno virtual, para ello debemos instalar virtualenv:
pip install virtualenv
Una vez instalado el virtualenv, nos situamos en el directorio donde queramos crear el entorno virtual, en mi caso /var/www
cd /var/www
virtualenv django_conduit
El parámetro que le pasamos es el nombre que recibirá nuestro entorno en mi caso "django_conduit", ahora entramos en el directorio que hemos creado y activamos el entorno:
cd django_conduit
source django_conduit/bin/activate
Ahora que ya tenemos el entorno creado, deberemos instalar Django, para ello usaremos el comando:
pip install django
Ahora nos dirigimos a la carpeta anterior, en mi caso /var/www e iniciamos el proyecto de Django.
django-admin.py startproject project
El parámetro es el nombre que le pondremos al proyecto, podéis modificarlo por lo que queráis.
Entramos al directorio que nos ha creado, en mi caso project y usamos el siguiente comando:
cd project
python manage.py migrate
python manage.py runserver
Ahora si abrís el navegador en el localhost, deberiais tener el servidor lanzado, pero como bien he dicho antes, esto está pesando para tenerlo en un VPS y hacerlo desde remoto, así que aun quedan algunas cosas más.
Para desactivar el entorno virtual usaremos el comando:
deactivate
En el siguiente punto veremos la configuración que deberemos hacer en apache.

Configurar apache


Una vez llegados hasta aquí ya deberiais saber lanzar un proyecto en local para modo developer, ahora vamos a configurar apache para que nuestro proyecto esté en modo producción.
Así que nos dirigimos a los archivos de configuración de apache y modificaremos el archivo 000-default.com, recordad hacer una copia de seguridad antes.
cd /etc/apache2/sites-available
Vamos a crear una nueva configuración, copiaremos el 000-default.conf y lo modificaremos.
sudo cp 000-default.conf django.conf
sudo nano django.conf
En este archivo borramos todo y nos debe quedar el archivo de esta forma:
Ahora deberemos instalar los siguientes paquetes:
sudo apt-get install python-pip apache2 libapache2-mod-wsgi
Ahora deberemos activar el mod que hemos descargado:
a2enmod wsgi
Y activamos de nuevo el 000-default.con
a2ensite 000-default.conf
Reiniciamos el servicio de apache:
sudo systemctl restart apache2
Ahora deberemos entrar en el directorio project, en mi caso esta dentro de /var/www/project
cd /var/www/project/project
Tranquilos no está mal escrito, los directorios se escriben igual, una vez aquí tendremos que modificar el settings.py.
Tenemos que moficiar la linea que pone "ALLOWED_HOSTS", si vemos es un array vacía, ahi debemos poner las direcciones que queremos que ataquen a nuestro servidor. Nos debe quedar algo así.
Llegados a este punto debemos reiniciar apache y si en nuestro ordenador remoto nos conectamos al dominio más ":8000/admin" que le hemos dado en el settings.py, debe salirnos un formulario como este.
Bueno y con esto doy por finalizado este pequeño tutorial, espero que os haya servido, nos vemos en el siguiente.

Comentarios

Entradas populares