DEV Community

Gabriel Villacis
Gabriel Villacis

Posted on • Updated on

Gestión de Entidades en la DPE (parte 5 - despliegue)

Este tutorial tratará el despliegue del proyecto al entorno cloud de Microsoft Azure:

Paso 1: Aprovisionamiento e inicialización de la base de datos PostgreSQL

  • Crear base de datos PostreSQL Flexible Server en Azure y asegurarse de habilitar el check para permitir conexiones desde servicios Azure, así como habilitar la IP Pública en el firewall para las conexiones desde PGADMIN.

  • Conectarse a la base PostgreSQL vía PGADMIN con las credenciales creadas y crear la base de datos gestor_entidades.

  • Conectar a la base de datos desde el proyecto Django (reemplazando las variables de conexión) y aplicar migraciones poetry run python manage.py migrate

  • Aplicar scripts con carga de archivos de data inicial:

poetry run python manage.py runscript tipos_organizaciones_feeder
poetry run python manage.py runscript tipos_entidades_feeder
poetry run python manage.py runscript funciones_feeder
poetry run python manage.py runscript ambitos_accion_feeder
poetry run python manage.py runscript tipos_gad_feeder
poetry run python manage.py runscript zonales_feeder
poetry run python manage.py runscript provincia_feeder
poetry run python manage.py runscript canton_feeder
poetry run python manage.py runscript parroquia_feeder
Enter fullscreen mode Exit fullscreen mode
  • Crear superuser poetry run python manage.py createsuperuser

Paso 2: Configurar proyecto Django para pase a producción

  • Agregar dependencias:
    poetry add azure-storage-blob
    poetry add django-storages[azure]

  • Crear variables de entorno y configurarlas dentro de settings.py::

DEBUG
ALLOWED_HOSTS
CSRF_TRUSTED_ORIGINS
AZURE_ACCOUNT_NAME
AZURE_ACCOUNT_KEY
AZURE_CUSTOM_DOMAIN
Enter fullscreen mode Exit fullscreen mode
DEBUG = env('DEBUG') == 'True'
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
  • Agregar configuración de logging de Django en settings.py
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
        },
    },
    'root': {
        'handlers': ['console'],
        'level': 'ERROR',  # Nivel de registro que se desea ver
    },
}
Enter fullscreen mode Exit fullscreen mode
  • Colectar archivos estáticos con poetry run python manage.py collectstatic

Paso 3: Enviar todos los cambios pendientes al repositorio Github

git add .
git commit -m "Commit inicial"
git push origin main
Enter fullscreen mode Exit fullscreen mode

Paso 4: Crear una Azure Storage Account para los archivos media y static

  • Crear el azure storage account
  • En las configuraciones habilitarle el permiso para acceso anónimo
  • Crear dos blob containers: media y static con el nivel de permiso Anonymous Access Level -> Container

Paso 5: Desplegar una Azure WebApp

  • Crear una Azure Web App en la cual se vincule el código fuente del proyecto a través del repositorio Github

  • Enlazar la cuenta y el repo Github, habilitando la opción de despliegue continuo y autenticación básica

  • Crear y establecer las variables de entorno

  • Editar los jobs del workflow de Github Actions en base a la siguiente plantilla:

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.11'

      - name: Install Poetry
        run: pip install poetry

      - name: Create a virtual environment and install the dependencies
        run: poetry install

      - name: Upload artifact for deployment jobs
        uses: actions/upload-artifact@v3
        with:
          name: python-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: python-app
          path: .

      - name: 'Deploy to Azure Web App'
        uses: azure/webapps-deploy@v2
        id: deploy-to-webapp
        with:
          app-name: 'change-app-name'
          slot-name: 'Production'
          publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_F17335B111134CAAA9F88E8CBAF0E7DB }}
Enter fullscreen mode Exit fullscreen mode

Y listo, de esta manera cada vez que se hagan confirmaciones en el repositorio se desplegarán los cambios de forma automática.

Top comments (0)