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]
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/'
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',
},
}
Paso 2: Aprovisionar la Base de Datos PostgreSQL Flexible en Azure
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.Conecta a la base de datos utilizando herramientas como PGAdmin para validar la conectividad.
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 ensettings.py
.Ejecuta migraciones y carga datos iniciales:
poetry run python manage.py migrate
poetry run python manage.py loaddata initial_data.json
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:
- Crear una Azure Storage Account desde el portal de Azure.
- Configurar el acceso anónimo: En la configuración de la Storage Account, habilita permisos de acceso anónimo para los contenedores.
-
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.
- Recoger archivos estáticos: Ejecuta:
poetry run python manage.py collectstatic
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
- Inicia sesión en GitHub y haz clic en New Repository.
- 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:
- Genera la clave SSH:
Abre tu terminal y ejecuta:
ssh-keygen -t ed25519 -C "tu_correo@example.com"
Presiona Enter para aceptar la ubicación predeterminada y opcionalmente define una contraseña.
- Copia la clave pública:
Ejecuta:
cat ~/.ssh/id_ed25519.pub
Copia el contenido de la clave.
- 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
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
- En el portal de Azure, crea una Web App y selecciona la opción de desplegar desde GitHub.
- Configura la Web App para que se conecte a tu repositorio y habilita el despliegue continuo.
- 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 }}
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)