Cómo Configurar y Migrar tu Proyecto Django en cPanel Paso a Paso


Si has desarrollado una aplicación en Django de forma local y quieres aprovechar un servicio de hosting con cPanel para publicarla, este artículo es para ti. Te explicaré paso a paso cómo hacerlo, incluyendo los detalles que puedan surgir y cómo resolverlos.

Creando un subdominio

Antes de hacer todo, lo primero que hice fue crear un subdominio que será necesario para acceder a nuestra aplicación Django. Esto no es obligatorio; puedes usar un dominio exclusivo para tu aplicación o bien una carpeta en un dominio ya existente.

Para crear un subdominio desde tu cPanel, tienes que ir a la sección “Domains” y seleccionar “Create A New Domain”.

Después de presionar ese botón, tienes que elegir el nombre del subdominio. Yo dejé seleccionado que se compartiera la misma carpeta raíz.

Después de crear ese dominio, se creará una carpeta en la raíz de tus archivos con el mismo nombre de tu subdominio. Esta carpeta la vamos a utilizar después.

Creando una aplicación Python

Antes de crear tu aplicación, entra a tu administrador de archivos desde tu cPanel, busca la carpeta que se creó en la raíz con el mismo nombre de tu subdominio y borra todo lo que haya dentro.

En tu cPanel, dentro de la sección “Software”, busca la opción “Setup Python App” o, en el buscador, coloca simplemente “Setup Python App” y haz clic en la opción.

Una vez dentro, verás la opción “Create Application”. Da clic en el botón:

Para crear tu aplicación, hay varias opciones. Vamos a ir viéndolas una por una:

  1. Python version: Te recomiendo validar primero qué versión estás utilizando en tu aplicación local para usar la misma y no tener problemas. Esto lo puedes ver desde tu terminal con el comando python --version.
  2. Application root: Esta es la carpeta que se creó al crear tu subdominio, así que agrega el mismo nombre. Por ejemplo: “nombreapp.azulweb.net”.
  3. Application URL: Aquí selecciona el subdominio recién creado.

Lo demás lo puedes dejar por defecto y dar clic en “Create”. ¡Listo! Si entras a tu subdominio en un navegador web, te debe de salir el mensaje “It works!” con la versión de Python con la que estás trabajando. Ya tenemos nuestra aplicación, pero aún no hemos terminado.

Subiendo los archivos de tu aplicación Django

Ahora toca subir los archivos de tu aplicación Django que tienes de forma local. Primero, vas a comprimir en un ZIP todos los archivos que están en el nivel donde se encuentra el archivo “manage.py”.

Después vas a ir a tu administrador de archivos en tu cPanel, y vas a ir a la carpeta de tu aplicación. Ahí subirás el ZIP, para posteriormente extraer todos los archivos.

Instalando dependencias

Ahora toca la parte de instalación de dependencias. Para esto, te recomiendo ir a tu equipo donde estás trabajando de manera local, entrar al entorno virtual donde estás trabajando y ejecutar el siguiente comando:

pip freeze > requirements.txt

Esto generará un archivo requirements.txt que contiene una lista de todas las dependencias instaladas en tu entorno virtual. Sube ese archivo a tu servidor en la carpeta de tu aplicación.

Después de eso, ve a tu cPanel y busca la opción llamada “Setup Python App”, la misma que usamos anteriormente para crear tu aplicación. Ahí vas a ver tus aplicaciones; dale en editar a la que acabamos de crear.

Ya dentro de tu aplicación, vas a ver un texto que dice:

Enter to the virtual environment. To enter to virtual environment, run the command:

Tienes que copiar el texto ya sea seleccionándolo o dándole clic.

Ya que tengas copiado el texto, busca la opción “Terminal” en tu cPanel y entra. En la terminal pega el texto y da Enter; ya estarás dentro de tu proyecto.

Si das un ls, podrás ver todos los archivos, incluido tu archivo requirements.txt que acabas de subir. Para poder instalar todas las dependencias, usa el siguiente comando:

pip install -r requirements.txt

Una vez que hayas ejecutado el comando, verifica que todas las dependencias se han instalado correctamente. Puedes usar el comando pip list para ver todo lo que tienes instalado.

Todo este proceso incluye la instalación de Django y todas las herramientas de código que hayas usado de forma local.

Modificando el Application Startup File

Cuando creaste la aplicación, se creó un archivo que ejecuta tu aplicación, el archivo llamado passenger_wsgi.py. Este archivo es el que hace que salga en pantalla “It works!” cuando entras a tu subdominio. Ahora hay que cambiarlo por el archivo de tu aplicación de Django.

Tienes que entrar a tu carpeta del proyecto, donde se encuentran los archivos: settings.py, urls.py, wsgi.py, asgi.py, y manage.py. El que nos interesa es el que se llama asgi.py, ya que este será el que nos permitirá ejecutar nuestra aplicación Django.

Dentro del cPanel, en donde editas tu aplicación recién creada, vas a cambiar la opción passenger_wsgi.py por lo siguiente:

tu_carpeta_del_proyecto/asgi.py

Le das guardar y luego reiniciar. Ahora vas a entrar a tu subdominio y ya podrás ver tu aplicación, aunque aún faltará configurar los archivos estáticos, que son las imágenes, JS, CSS, etc.

Si te marca un error, no te preocupes, aún faltan cosas por configurar, como tu nuevo dominio, así que continúa con el proceso y espera hasta el final.

Configurando archivos estáticos

Cuando estamos trabajando en local, Django es quien gestiona los archivos estáticos. Cuando pasamos a producción, hay que elegir un servidor para esta actividad. En la información que consulté antes de crear esta aplicación, usaban el mismo servidor Apache, pero yo opté por usar WhiteNoise.

WhiteNoise se utiliza para servir archivos estáticos en producción sin necesidad de un servidor adicional como Nginx o Apache. Te voy a explicar paso a paso cómo realicé toda esta configuración. Abre tu terminal de cPanel, entra a tu aplicación y sigue todo lo que muestro a continuación:

Ejecuta el siguiente comando para instalar WhiteNoise:

pip install whitenoise

Edita tu archivo settings.py y asegúrate de agregar el middleware de WhiteNoise en la posición correcta dentro de la lista MIDDLEWARE.

Colócalo justo después de SecurityMiddleware:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',  # Agregar WhiteNoise aquí
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

Asegúrate de que las configuraciones relacionadas con archivos estáticos estén definidas correctamente en settings.py.

# Ruta para los archivos estáticos en el proyecto
STATIC_URL = '/static/'

# Ruta en el sistema de archivos donde se recopilarán los archivos estáticos
STATIC_ROOT = BASE_DIR / 'staticfiles'

# Habilitar WhiteNoise para comprimir y cachear archivos estáticos
STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

Ejecuta el comando collectstatic para recopilar todos los archivos estáticos del proyecto y de las aplicaciones instaladas en el directorio especificado en STATIC_ROOT.

python manage.py collectstatic

Esto moverá todos los archivos estáticos (CSS, JS, imágenes, etc.) al directorio staticfiles. Listo, ya falta los últimos dos pasos.

Configurar para producción

En producción, asegúrate de desactivar el modo de depuración y configurar los encabezados de seguridad adecuados.

En settings.py:

DEBUG = False

# Hosts permitidos
ALLOWED_HOSTS = ['tu-dominio.com']

# Configuración de cabeceras seguras
SECURE_BROWSER_XSS_FILTER = True
SECURE_CONTENT_TYPE_NOSNIFF = True

Listo, ya hemos terminado. Esta última configuración podría ser la que faltaba anteriormente para que tu aplicación fuera visible correctamente. Por último, te recomiendo reiniciar tu aplicación, borrar caché y probar.

Crear un superusuario para el administrador de Django

Si necesitas acceder al panel de administración de Django, deberás crear un superusuario ejecutando:

python manage.py createsuperuser

Sigue las instrucciones para asignar un nombre de usuario, correo y contraseña.

Listo, hemos terminado, si tienes algún problema, háblame por Facebook, y si tengo algo de tiempo libre, te ayudo. O si eres estudiante de Azul School con membresía de pago, te puedo ayudar mucho más rápido. 😉


Extra – Configuración de la Base de Datos en el Servidor

Aunque yo no utilicé una base de datos propia para mi implementación porque me conecto a una base de datos remota, en caso de que tú necesites usar una base de datos en el servidor, estos son los pasos que debes seguir para configurarla y realizar las migraciones:

  • Crear la base de datos en cPanel:
    • Ve a la sección “Bases de datos” en el cPanel del servidor.
    • Selecciona “MySQL Databases” y crea una nueva base de datos.
    • Crea un usuario de base de datos y asígnale permisos completos sobre esta base de datos.
  • Configurar Django para conectarse a la base de datos: Abre tu archivo settings.py y actualiza la configuración de DATABASES para usar la base de datos que acabas de crear. Por ejemplo:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  # Motor de base de datos MySQL
        'NAME': 'nombre_de_tu_base_de_datos',
        'USER': 'nombre_de_tu_usuario',
        'PASSWORD': 'tu_contraseña',
        'HOST': 'localhost',  # Cambia esto si la base de datos está en otro servidor
        'PORT': '3306',       # Puerto predeterminado de MySQL
    }
}
  • Instalar las dependencias necesarias: Asegúrate de que el entorno tenga instalado el conector necesario para conectarse a MySQL. Si usas MySQL, instala este paquete:
pip install mysqlclient

(Si utilizas otro motor de base de datos, asegúrate de instalar la librería correspondiente, por ejemplo, psycopg2 para PostgreSQL.)

  • Realizar las migraciones de la base de datos: Una vez que la base de datos esté configurada, ejecuta las migraciones necesarias. Para ello, sube tu código al servidor, accede a la terminal de Django desde cPanely ejecuta los siguientes comandos: (Esto generará las tablas necesarias para que la aplicación funcione correctamente.)
python manage.py makemigrations
python manage.py migrate

Con estos pasos, ya tendrás configurada la base de datos en tu servidor y lista para integrarla con tu proyecto Django.


¡Éxito con tus proyectos!

,

¿Tienes un cometario sobre esto? Dímelo en Twitter o Facebook.