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
- 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
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/'
- 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
},
}
- 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
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 }}
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)