Skip to content

Backends: dependencias y configuración ​

Dependencias ​

Versiones de requirements.prod.txt (las que se instalan en la imagen Docker).

Comunes a ambos backends ​

PaqueteVersiónUso
django5.2.14 (IDP) · 5.2.16 (SPS)Framework web
graphene-django3.2.2APIs GraphQL sobre los modelos de Django
graphene-file-upload1.2.2Subida de archivos en GraphQL (multipart)
django-graphbox1.5.14Construcción de schemas GraphQL y middleware de autenticación
djangorestframework3.17.1API REST /api/v1/
drf-spectacular0.29.0Generación de OpenAPI, Swagger UI y ReDoc
django-extensions3.1.3runscript, graph_models y utilidades de desarrollo
django-environ0.7.0Lectura de variables desde .env
wsgicors0.7.0Cabeceras CORS a nivel WSGI
psycopg[binary]3.3.4Driver de PostgreSQL
gunicorn26.0.0Servidor WSGI en producción
cryptography48.0.0Primitivas criptográficas
PyJWT2.10.1Emisión y validación de JWT
pyotp2.9.0Códigos TOTP (segundo factor)
requests2.34.2Cliente HTTP para servicios externos
Pillow9.5.0Procesamiento de imágenes
qrcode8.2Generación de códigos QR
pypdf6.14.2Lectura y manipulación de PDF
Faker37.11.0 (IDP) · ≥18.0.0 (SPS)Datos ficticios para comandos de prueba

Solo IDP (auth-backend) ​

PaqueteVersiónUso
captcha0.7.1Captcha de imagen en el flujo de login
pyHanko0.35.2Firmas digitales en PDF. Declarado en requirements; no se encontró uso directo en el código

Solo SPS (backend-seleccion-postulantes) ​

PaqueteVersiónUso
weasyprint69.0Generación de PDF desde HTML
Jinja23.1.6Plantillas de documentos
tiptapy0.21.0Conversión de contenido del editor Tiptap a HTML
beautifulsoup44.9.3Procesamiento de HTML
openpyxl3.1.5Lectura y escritura de Excel
pdf2image1.16.0Conversión de PDF a imagen
opencv-contrib-python4.8.1.78Lectura OMR de hojas de respuestas y marcadores ArUco en documentos
numpy1.24.3Cálculo numérico (requerido por OpenCV)
PyNaCl1.6.2Cifrado de bancos de preguntas (compatible con Custodio)
zipstream-ng1.9.3Descarga de archivos ZIP en streaming
pycountry26.2.16Catálogo de países
num2words0.5.14Números en letras para documentos

Dependencias de sistema ​

La imagen Docker instala además:

  • Ambos: nginx, curl.
  • SPS: ghostscript y librerías nativas de WeasyPrint y OpenCV (Pango, Cairo, GDK-PixBuf, libffi, libGL, fuentes Liberation y DejaVu). Ver Imágenes Docker.

requirements.txt frente a requirements.prod.txt ​

requirements.txt es para desarrollo local: no incluye gunicorn y agrega mysqlclient (driver MySQL, requiere las librerías de desarrollo de MySQL en el sistema). En el SPS también fija Pillow>=13.0.0. La imagen Docker usa solo requirements.prod.txt.

Variables de entorno ​

Los backends leen su configuración de un archivo .env en la raíz del proyecto (django-environ). La plantilla es .env.example. En los servidores, este archivo es el back.env que genera el pipeline (ver Variables y secretos de CI/CD).

Comunes ​

VariableDescripción
SECRET_KEYClave secreta de Django
DEBUGModo depuración. Debe ser False en servidores
SYSTEM_STATUSTrue para operar; False activa el modo standby (503) y bloquea comandos de manage.py
ALLOWED_HOSTSDominios aceptados (lista separada por comas)
ALLOWED_CORSOrígenes de los frontends permitidos (CORS y CSRF)
MAIN_DOMAINDominio base para las cookies (sin subdominio)
DATABASE_ENGINEMotor de Django (django.db.backends.postgresql)
DATABASE_NAME · DATABASE_USER · DATABASE_PASS · DATABASE_HOST · DATABASE_PORTConexión a la base de datos
SIGNING_KEY_MASTER_SECRETClave maestra de cifrado de datos sensibles
STATIC_ROOTDestino de collectstatic (por defecto assets/)
PUBLIC_MEDIA_ROOTRaíz de archivos públicos (por defecto files/; en Docker /app/public_files)
PRIVATE_MEDIA_ROOTRaíz de archivos privados (por defecto private_files/; en Docker /app/private_files)
PRIVATE_MEDIA_SERVE_BACKENDCómo se entregan los archivos privados: django, apache o nginx (por defecto django)
PRIVATE_MEDIA_NGINX_HEADER · PRIVATE_MEDIA_NGINX_INTERNAL_PREFIXCabecera (X-Accel-Redirect) y prefijo interno (/private_files/) para nginx
PRIVATE_MEDIA_APACHE_HEADERCabecera para Apache (X-Sendfile)
PRIVATE_MEDIA_URLURL de archivos privados cuando los sirve Django

TIP

En los contenedores, nginx está configurado para X-Accel-Redirect sobre /private_files/, por lo que corresponde PRIVATE_MEDIA_SERVE_BACKEND=nginx.

Solo IDP ​

VariableDescripción
AUTHSERVER_ISSUERIssuer del servidor de autorización (tokens y discovery OIDC)
PUBLIC_LOGIN_URLURL pública del portal de login
IDP_CALLBACK_URLCallback del login con proveedores de identidad externos
IDP_LINKING_CALLBACK_URLCallback de vinculación de proveedores externos con una cuenta existente
IDP_LOGIN_CD_FOR_APPROVAL_CALLBACK_URLCallback del login con Ciudadanía Digital para aprobar documentos
CD_AGETIC_ISSUERIssuer de Ciudadanía Digital (AGETIC)
BASE_SERVE_PRIVATE_FILESURL base para construir enlaces a archivos privados
SSO_COOKIE_SESSION_KEYNombre de la cookie de sesión SSO

Solo SPS ​

VariableDescripción
DATABASE_CONN_MAX_AGEPersistencia de conexiones en segundos (por defecto 900)
IDP_OIDC_DISCOVERY_URLDiscovery OIDC del IDP
IDP_OIDC_CLIENT_ID · IDP_OIDC_CLIENT_SECRETCliente OIDC del SPS para el login de los portales
IDP_OIDC_SCOPESScopes solicitados en el login
IDP_OIDC_ADMIN_REDIRECT_URI · IDP_OIDC_ADMIN_LOGOUT_REDIRECT_URIRedirecciones de login/logout del portal administrativo
IDP_OIDC_COMISIONES_REDIRECT_URI · IDP_OIDC_COMISIONES_LOGOUT_REDIRECT_URIÍdem, portal de comisiones
IDP_OIDC_POSTULANTE_REDIRECT_URI · IDP_OIDC_POSTULANTE_LOGOUT_REDIRECT_URIÍdem, portal de postulantes
IDP_API_CLIENT_ID · IDP_API_CLIENT_SECRETCliente client_credentials para consumir las APIs REST del IDP
IDP_API_SCOPESScopes de ese cliente
IDP_API_BASE_URLURL base de las APIs del IDP
COOKIE_SESSION_KEYNombre de la cookie de sesión de los portales
COOKIE_ESTACION_SESSION_KEYNombre de la cookie de sesión de las estaciones de examen
CREDENTIALS_KEY_EXAMEN_VIRTUALClave de las credenciales JWT de estaciones de examen
APPROVALDOCS_APPROVAL_URLURL del IDP donde el usuario aprueba documentos
POST_APPROVALDOCS_POSTULACION_REDIRECT_URIRedirección tras aprobar documentos de una postulación
PUBLIC_DOCS_VERIFICATION_BASE_URLURL pública de verificación de documentos emitidos (códigos QR)
WEBSITE_API_BASE_URL · WEBSITE_API_KEYAPI del sitio web institucional (publicación de avisos)
MIGRATION_MSSQL_CONNConexión a los backups SQL Server de datos históricos (opcional)

Ejecución local ​

sh
# 1. Entorno virtual con Python 3.11
python3.11 -m venv env
source env/bin/activate

# 2. Dependencias
pip install -r requirements.txt

# 3. Configuración
cp .env.example .env   # completar valores; SYSTEM_STATUS=True

# 4. Base de datos
python manage.py migrate

# 5. Servidor de desarrollo
python manage.py runserver

En el IDP, después de migrar ejecute los comandos de inicialización que en Docker corren en el arranque (rotate_signing_keys, create_default_scopes, create_claim_definitions) y cree un administrador con create_super_admin. Ver Scripts útiles de los backends.

En el SPS, WeasyPrint requiere las librerías nativas en el sistema (en Debian/Ubuntu: libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 libffi-dev libcairo2 shared-mime-info fonts-liberation fonts-dejavu-core).