DEV Community

Gabriel Villacis
Gabriel Villacis

Posted on • Edited on

1

Despliegue de proyecto Django Ecommerce en Azure Web App

A continuación se presenta un tutorial integral para desplegar tu proyecto Django Ecommerce en Microsoft Azure. Después de haber desarrollado y probado localmente tu aplicación, llega el momento de ponerla en producción en la nube. En este tutorial aprenderás a:

  • Configurar tu proyecto para producción, incluyendo variables de entorno, manejo de archivos estáticos y media mediante Azure Storage y logging.
  • Aprovisionar una base de datos PostgreSQL Flexible en Azure y conectar tu aplicación.
  • Subir el código fuente a GitHub utilizando claves SSH, detallando el proceso de generación y registro de dichas claves.
  • Desplegar tu aplicación en una Azure Web App utilizando GitHub Actions para automatizar el proceso de CI/CD.

Con estos pasos, tu proyecto quedará listo para funcionar en un entorno de producción en la nube, con despliegues automáticos y una infraestructura escalable.


Paso 1: Configurar el Proyecto Django para Producción

1.1. Agregar Dependencias para Azure Storage

Utiliza Poetry para agregar las dependencias necesarias:

poetry add azure-storage-blob
poetry add django-storages[azure]
Enter fullscreen mode Exit fullscreen mode

Estas dependencias permiten que Django se integre con Azure Storage para gestionar archivos estáticos y media en la nube.

1.2. Configurar Variables de Entorno en settings.py

En tu archivo settings.py utiliza django-environ para cargar las variables de entorno. Estas variables incluyen:

  • ALLOWED_HOSTS y CSRF_TRUSTED_ORIGINS: para definir los dominios autorizados en producción.
  • AZURE_ACCOUNT_NAME y AZURE_ACCOUNT_KEY: para acceder a la Storage Account de Azure.
  • Variables de base de datos, entre otras.

Ejemplo de configuración:

import environ
from pathlib import Path

BASE_DIR = Path(__file__).resolve().parent.parent
env = environ.Env()
environ.Env.read_env(BASE_DIR / '.env')

ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')
CSRF_TRUSTED_ORIGINS = env.list('CSRF_TRUSTED_ORIGINS')

MEDIA_ROOT = BASE_DIR / 'media'
STATICFILES_DIRS = (BASE_DIR / 'static',)

AZURE_ACCOUNT_NAME = env('AZURE_ACCOUNT_NAME')
AZURE_ACCOUNT_KEY = env('AZURE_ACCOUNT_KEY')
AZURE_CUSTOM_DOMAIN = f'{AZURE_ACCOUNT_NAME}.blob.core.windows.net'

if DEBUG:
    STATIC_URL = '/static/'
    MEDIA_URL = '/media/'
else:
    STORAGES = {
        'default': {
            'BACKEND': 'storages.backends.azure_storage.AzureStorage',
            'OPTIONS': {
                'azure_container': 'media'
            },
        },
        'staticfiles': {
            'BACKEND': 'storages.backends.azure_storage.AzureStorage',
            'OPTIONS': {
                'azure_container': 'static'
            },
        },
    }

    STATIC_URL = f'https://{AZURE_CUSTOM_DOMAIN}/static/'
    MEDIA_URL = f'https://{AZURE_CUSTOM_DOMAIN}/media/'
Enter fullscreen mode Exit fullscreen mode

1.3. Configurar Logging

Agrega la configuración de logging para que Django imprima los errores en la consola:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'root': {
        'handlers': ['console'],
        'level': 'ERROR',
    },
}
Enter fullscreen mode Exit fullscreen mode

Paso 2: Aprovisionar la Base de Datos PostgreSQL Flexible en Azure

  1. Crea una instancia de PostgreSQL Flexible Server en Azure.

    Durante la configuración, habilita la opción que permite conexiones desde servicios de Azure para asegurar que tu Web App pueda conectarse.

  2. Conecta a la base de datos utilizando herramientas como PGAdmin para validar la conectividad.

  3. Configura la conexión en Django:

    En tu archivo .env define las variables necesarias (DATABASE_NAME, DATABASE_USER, DATABASE_PASS, DATABASE_HOST, DATABASE_PORT) y actualiza la configuración en settings.py.

  4. Ejecuta migraciones y carga datos iniciales:

   poetry run python manage.py migrate
   poetry run python manage.py loaddata initial_data.json
Enter fullscreen mode Exit fullscreen mode

Paso 3: Configurar Azure Storage para Archivos Media y Static

¿Qué es Azure Storage y por qué se utiliza?

Azure Storage es un servicio en la nube que ofrece almacenamiento escalable para diversos tipos de datos, como archivos, blobs (archivos binarios), colas, tablas y más. Para una aplicación web, es especialmente útil para almacenar archivos estáticos (CSS, JavaScript, imágenes) y archivos media (imágenes de productos, vídeos, etc.). Utilizar Azure Storage permite:

  • Escalabilidad y disponibilidad: Los archivos se sirven desde servidores distribuidos, reduciendo la carga en tu aplicación.
  • Acceso anónimo: Puedes configurar los contenedores para permitir el acceso público a archivos, ideal para imágenes y recursos estáticos.
  • Integración con Django: Mediante la librería django-storages, se puede configurar Django para usar Azure Storage sin cambiar la lógica de la aplicación.

Pasos para configurar Azure Storage:

  1. Crear una Azure Storage Account desde el portal de Azure.
  2. Configurar el acceso anónimo: En la configuración de la Storage Account, habilita permisos de acceso anónimo para los contenedores.
  3. Crear dos Blob Containers:
    • Uno para media (archivos subidos por el usuario, como imágenes del catálogo).
    • Otro para static (archivos estáticos de la aplicación). Configura el nivel de acceso en cada uno como "Container" para que los archivos sean accesibles públicamente.
  4. Recoger archivos estáticos: Ejecuta:
   poetry run python manage.py collectstatic
Enter fullscreen mode Exit fullscreen mode

Esto subirá los archivos de la carpeta static a su contenedor correspondiente.


Paso 4: Subir el Proyecto a GitHub con Claves SSH

4.1. Crear el Repositorio en GitHub

  1. Inicia sesión en GitHub y haz clic en New Repository.
  2. Define el nombre del repositorio, selecciona la visibilidad y haz clic en Create Repository.

4.2. Generar y Configurar Claves SSH

Si es la primera vez que usas claves SSH:

  1. Genera la clave SSH:

Abre tu terminal y ejecuta:

   ssh-keygen -t ed25519 -C "tu_correo@example.com"
Enter fullscreen mode Exit fullscreen mode

Presiona Enter para aceptar la ubicación predeterminada y opcionalmente define una contraseña.

  1. Copia la clave pública:

Ejecuta:

   cat ~/.ssh/id_ed25519.pub
Enter fullscreen mode Exit fullscreen mode

Copia el contenido de la clave.

  1. Agrega la clave a GitHub:
  • Ve a GitHub, haz clic en tu foto de perfil y selecciona Settings.
  • En el menú lateral, elige SSH and GPG keys y haz clic en New SSH key.
  • Pega la clave pública, asigna un título descriptivo y guarda.

4.3. Subir el Código a GitHub

En la raíz de tu proyecto, inicializa Git y sube el código:

git init
git add .
git commit -m "Primer commit: Proyecto Django Ecommerce"
git remote add origin git@github.com:tu_usuario/tu_repositorio.git
git push -u origin master
Enter fullscreen mode Exit fullscreen mode

Asegúrate de incluir el archivo .env en tu .gitignore para no subir información sensible.


Paso 5: Desplegar la Azure Web App con CI/CD usando GitHub Actions

5.1. Crear la Azure Web App

  1. En el portal de Azure, crea una Web App y selecciona la opción de desplegar desde GitHub.
  2. Configura la Web App para que se conecte a tu repositorio y habilita el despliegue continuo.
  3. Establece las variables de entorno necesarias en la Web App (ALLOWED_HOSTS, CSRF_TRUSTED_ORIGINS, AZURE_ACCOUNT_NAME, AZURE_ACCOUNT_KEY, DATABASE_*, etc.).

5.2. Configurar el Workflow de GitHub Actions

Crea un archivo en tu repositorio, por ejemplo, .github/workflows/deploy.yml, con el siguiente contenido:

name: Deploy Django Ecommerce to Azure

on:
  push:
    branches:
      - master  # O la rama que desees

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Set up Python version
        uses: actions/setup-python@v1
        with:
          python-version: '3.12'

      - name: Install Poetry
        run: pip install poetry

      - name: Install dependencies
        run: poetry install

      - name: Collect static files
        run: poetry run python manage.py collectstatic --noinput

      - name: Run migrations
        run: poetry run python manage.py migrate

      - name: Upload artifact for deployment
        uses: actions/upload-artifact@v3
        with:
          name: django-app
          path: .

  deploy:
    runs-on: ubuntu-latest
    needs: build
    environment:
      name: 'Production'
      url: ${{ steps.deploy-to-webapp.outputs.webapp-url }}
    steps:
      - name: Download artifact from build job
        uses: actions/download-artifact@v3
        with:
          name: django-app
          path: .

      - name: Deploy to Azure Web App
        uses: azure/webapps-deploy@v2
        id: deploy-to-webapp
        with:
          app-name: 'nombre-de-tu-app'  # Reemplaza con el nombre real de tu Web App
          slot-name: 'Production'
          publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE }}
Enter fullscreen mode Exit fullscreen mode

Este workflow se divide en dos trabajos:

  • Build: Instala dependencias, recoge archivos estáticos y ejecuta migraciones, luego sube el artefacto.
  • Deploy: Descarga el artefacto y despliega la aplicación en Azure Web App utilizando el publish profile almacenado en los secretos de GitHub.

Paso 6: Conclusión

En este tutorial se ha descrito de forma integral el proceso para desplegar tu proyecto Django Ecommerce en Azure. Se han abarcado los siguientes aspectos:

  • Configuración para Producción: Se agregaron dependencias específicas, se configuraron variables de entorno, se definieron logging y se ajustaron las URLs de archivos estáticos y media para trabajar con Azure Storage.
  • Base de Datos en Azure: Se creó una instancia PostgreSQL Flexible, se conectó el proyecto y se aplicaron las migraciones.
  • Azure Storage: Se explicó qué es y por qué se utiliza para almacenar archivos estáticos y media, y se detalló el proceso para crear la Storage Account y sus contenedores.
  • Subida a GitHub con Claves SSH: Se describió el proceso de generación y registro de claves SSH, y cómo subir el proyecto a GitHub.
  • Despliegue Automático con GitHub Actions: Se configuró un workflow que construye y despliega la aplicación en una Azure Web App.
  • Checkout y Administración de Pedidos: (Integrado en otros tutoriales) Se ha preparado el proceso de checkout y la administración en el panel de Django.

Con estos pasos, tu proyecto estará listo para operar en producción en la nube de Azure, con un flujo de despliegue automatizado que facilita las actualizaciones continuas y mejora la escalabilidad y seguridad de tu aplicación. ¡Éxito en el despliegue y continúa personalizando tu proyecto según las necesidades de tu negocio!

Top comments (0)

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay