Guía 27: Django - Despliegue en Railway#
Actividades previas#
Ambiente de producción#
Acceda a su proyecto django_data_monitor en Codespaces o en su máquina local.
Cree y utilice la rama de produccion.
Cree y habilite el ambiente virtual, con:
python -m venv env env\Scripts\activate # Windows source env/bin/activate # Linux/MacOS
Instale las librerías de requirements.txt, con:
pip install -r requirements.txt
Actividades en clases#
Paquete: gunicorn y whitenoise#
Instale PyMySQL, gunicorn y whitenoise en su ambiente, con:
pip install gunicorn whitenoise PyMySQL
Utilice su cliente de IAG generativa para explicar la utilidad de los paquetes gunicorn y whitenoise.
Configuración de Django para producción#
Conexión a la base de datos (Obligatorio)#
Edite el archivo
backend_analytics_server/settings.pyde su proyecto Django, con:Importe el paquete PyMySQL:
... from pathlib import Path import os import pymysql pymysql.install_as_MySQLdb() ...
Reemplace la configuración por defecto por la conexión a la base de datos MySQL utilizando PyMySQL:
... DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': os.environ.get('MYSQLDATABASE'), 'USER': os.environ.get('MYSQLUSER'), 'PASSWORD': os.environ.get('MYSQLPASSWORD'), 'HOST': os.environ.get('MYSQLHOST'), 'PORT': os.environ.get('MYSQLPORT'), } } ...
Conexión a la base de datos#
En el archivo backend_analytics_server/settings.py, configure los siguientes parámetros:
DEBUG: Cambie a False.
CSRF_TRUSTED_ORIGINS: Agregue el dominio de Railway.
ALLOWED_HOSTS: Utilice el dominio de Railway.
MIDDLEWARE: Agregue el middleware WhiteNoiseMiddleware para servir archivos estáticos.
STATIC_ROOT: Configure la ruta para los archivos estáticos
STATICFILES_STORAGE: Configure el almacenamiento de archivos estáticos
DEBUG = False CSRF_TRUSTED_ORIGINS = [ "https://*.up.railway.app", ..., ] ALLOWED_HOSTS = ['.up.railway.app'] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', # Agregar WhiteNoise al middleware (debe ir después de SecurityMiddleware) 'django.contrib.sessions.middleware.SessionMiddleware', # ... resto de middlewares ] ... STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')] STATIC_ROOT = BASE_DIR / 'assets' STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' ...
Gestión de dependencias y versionamiento#
Genere el archivo requirements.txt con la lista de paquetes utilizados, con:
pip freeze > requirements.txt
Desactive el ambiente virtual de desarrollo, con:
deactivate
Versione local y remotamente la rama produccion.
Railway#
Obtenga una cuenta gratuita en Railway mediante su cuenta de GitHub.
Cree un proyecto nuevo vacío.
Utilice su cliente de IAG generativa para explicar la utilidad de Railway.
Configuración en Railway#
Servicio: MySQL Database#
En Railway, acceda al proyecto vacío.
Seleccione la opción Add Service, escoja Database y luego Add MySQL.
Servicio: Web App#
En Railway, dentro del proyecto.
Seleccione Create > GitHub Repo y conecte su cuenta de GitHub.
Seleccione el repositorio django_data_monitor.
Atención
No despliegue la aplicación hasta configurar correctamente las variables de entorno.
En la pestaña Environment Variables, configure:
Agregue las 5 referencias a las variables MYSQLDATABASE, MYSQLUSER, MYSQLPASSWORD, MYSQLHOST y MYSQLPORT con sus valores correspondientes al servicio de MySQL, por ejemplo:
MYSQLDATABASE ${{MySQL.MYSQLDATABASE}}
Agregue las 3 variables DJANGO_SUPERUSER_USERNAME, DJANGO_SUPERUSER_PASSWORD y DJANGO_SUPERUSER_EMAIL con sus valores para crear el superusuario.
DJANGO_SUPERUSER_EMAIL admin@data.com.ecEn la pestaña Settings, configure el entorno de producción:
Seleccione la rama produccion
En Build > Custom Build Command, utilice:
pip install -r requirements.txt
En Deploy > Custom Start Command, utilice:
gunicorn backend_analytics_server.wsgiEn Deploy > Pre-deploy Step, utilice:
python manage.py makemigrations && python manage.py migrate && python manage.py collectstatic --noinput && python manage.py createsuperuser --noinput
Haga clic en el botón Deploy para desplegar los servicios con los cambios realizados.
Luego del despliegue exitoso, Setting > Networking, genere un dominio en el puerto 8080.
Revise los registros de despliegue para asegurarse de que no haya errores.
Conclusiones#
Actividades autónomas#
Recursos extras#
En redes:
Drop the .app, it's cleaner that way
— Railway (@Railway) November 14, 2024
Introducing an all-new Railway (dot com)https://t.co/C5PSPyo5IO