Guía de Despliegue (Producción)
Esta sección documenta los pasos de infraestructura y comandos necesarios para desplegar IntranetV2 en producción utilizando Waitress (servidor WSGI), NSSM (gestión de servicios) y Nginx (proxy inverso).
[!IMPORTANT] Aviso Importante: Los bloques de configuración y comandos mostrados a continuación corresponden a un ejemplo aplicado en el servidor de QA. Las rutas, puertos, nombres de dominio y certificados SSL están configurados específicamente para dicho entorno. Es estrictamente necesario que revise y ajuste estos valores de acuerdo a la infraestructura real de su servidor antes de ejecutarlos.
Paso 1: Prerrequisitos del Servidor
Antes de inicializar el despliegue, el servidor de aplicaciones Windows Server 2022 debe cumplir con la instalación base de la infraestructura descrita en la sección de Stack:
- Nginx: Instalado en
C:\nginx\nginx-1.26.3\(ver Nginx). - NSSM: Instalado en
C:\nssm\nssm2.24\(ver NSSM). - Git: Instalado y configurado en el PATH (ver Git).
- Runtimes: Python
3.11.6instalado globalmente y controladores de Microsoft SQL Server configurados.
Paso 2: Preparación del Código y Entorno
1. Clonar el repositorio en producción
Ubíquese en el directorio del servidor de aplicaciones (ej. C:\PROY_PY\) y clone el repositorio:
cd C:\PROY_PY
git clone https://github.com/luis1grupoiai/intranetv2.git
cd intranetv2
2. Crear entorno virtual e instalar dependencias
python -m venv venv
.\venv\Scripts\activate
pip install -r requirements.txt
pip install waitress
3. Configurar variables de entorno (.env)
Cree un archivo .env en la raíz del proyecto. Defina los siguientes parámetros de producción obligatorios:
DEBUG=False
SECRET_KEY=su_llave_secreta_de_produccion
DATABASE_URL=mssql://usuario_db:password@servidor_sql/nombre_db
ALLOWED_HOSTS=iaidev.grupo-iai.com.mx
CSRF_TRUSTED_ORIGINS=https://iaidev.grupo-iai.com.mx:333
4. Recolectar archivos estáticos Ejecute la compilación de recursos estáticos:
.\venv\Scripts\python.exe manage.py collectstatic --noinput --settings=config.settings.production
Paso 3: Configurar Servicios con NSSM
Para asegurar que los procesos de Waitress (servidor web) y QCluster (colas de tareas) se ejecuten en segundo plano y se reinicien automáticamente en caso de fallo, se registran como servicios nativos de Windows.
1. Instalar servicios Ejecute desde una terminal con privilegios de administrador:
cd C:\nssm\nssm2.24
.\nssm.exe install Intranetv2
.\nssm.exe install Queues
2. Configurar parámetros en NSSM
Configure los servicios utilizando la interfaz gráfica de NSSM (nssm edit <NombreServicio>) bajo las siguientes directivas:
| Parámetro | Servicio: Intranetv2 |
Servicio: Queues |
|---|---|---|
| Path | C:\PROY_PY\intranetv2\venv\Scripts\waitress-serve.exe |
C:\PROY_PY\intranetv2\venv\Scripts\python.exe |
| Startup directory | C:\PROY_PY\intranetv2 |
C:\PROY_PY\intranetv2 |
| Arguments | --port=8081 --threads=12 config.wsgi:application |
manage.py qcluster --settings=config.settings.production |
| Stdout Log | C:\nssm\nssm2.24\logs\intranetv2\intranetv2-out.log |
C:\nssm\nssm2.24\logs\intranetv2\queue_out.log |
| Stderr Log | C:\nssm\nssm2.24\logs\intranetv2\intranetv2-error.log |
C:\nssm\nssm2.24\logs\intranetv2\queue_error.log |
3. Iniciar los servicios
cd C:\nssm\nssm2.24
.\nssm.exe start Intranetv2
.\nssm.exe start Queues
Paso 4: Configurar Nginx
1. Definir Upstream
Añada la conexión a Waitress en el archivo global C:\nginx\nginx-1.26.3\conf\conf.d\globals\00-upstreams.conf:
upstream intranet_v2_srv {
server 127.0.0.1:8081; # Puerto expuesto por Waitress
}
2. Certificados SSL En PowerShell, combine el certificado y la ca-bundle en un archivo de cadena completa (Full Chain):
Get-Content certificate.crt, ca_bundle.crt | Set-Content fullchain.crt
3. Configurar Servidor Virtual
Cree el archivo de configuración intranetv2.conf dentro del directorio C:\nginx\nginx-1.26.3\conf\conf.d\servers\django\:
server {
listen 81;
server_name iaidev.grupo-iai.com.mx;
return 301 https://$host:333$request_uri;
}
server {
listen 333 ssl;
http2 on;
server_name iaidev.grupo-iai.com.mx;
include conf.d/snippets/large_headers.conf;
client_max_body_size 100M;
access_log logs/intranet_v2.access.log vhost_combined;
error_log logs/intranet_v2.error.log warn;
location /static/ {
alias C:/PROY_PY/intranetv2/static/;
include conf.d/snippets/static_cache.conf;
}
location /media/ {
alias C:/PROY_PY/intranetv2/media/;
include conf.d/snippets/static_cache.conf;
}
location /api/ {
proxy_pass http://intranet_v2_srv;
include conf.d/snippets/proxy_common.conf;
}
location / {
proxy_pass http://intranet_v2_srv/;
include conf.d/snippets/proxy_common.conf;
}
}
4. Recargar Nginx Verifique la sintaxis y recargue el servicio para aplicar los cambios:
cd C:\nginx\nginx-1.26.3
.\nginx.exe -t
.\nginx.exe -s reload
Paso 5: Verificación de Despliegue (Sanity Check)
Para certificar que el despliegue es correcto, realice las siguientes comprobaciones:
1. Estado de Servicios: Abra services.msc en Windows Server y confirme que los servicios Intranet V2 y Queues Intranetv2 están en estado Ejecutando (Running) y configurados en tipo de inicio Automático.
2. Conexión HTTP/HTTPS: Acceda a la URL configurada https://iaidev.grupo-iai.com.mx:333/ desde un navegador web externo y confirme que el sitio web carga y los recursos estáticos (estilos CSS, imágenes) se visualizan correctamente.
3. Logs: Revise que no haya errores de inicio en C:\nssm\nssm2.24\logs\intranetv2\intranetv2-error.log.
Paso 6: Mantenimiento y Actualizaciones
Para subir cambios nuevos al servidor de producción en el día a día:
1. Bajar cambios
git pull
2. Migrar base de datos
.\venv\Scripts\python.exe manage.py migrate --settings=config.settings.production
3. Recolectar estáticos
.\venv\Scripts\python.exe manage.py collectstatic --noinput --settings=config.settings.production
4. Reiniciar Servicios
nssm restart Intranetv2
nssm restart Queues
Paso 7: Diagnóstico de Errores (Logs)
Si el sistema presenta fallas o no responde, revise las salidas de logs del servidor en las siguientes rutas homologadas:
- Logs del Servidor Web (Nginx):
- Errores generales de arranque:
C:\nginx\nginx-1.26.3\logs\error.log - Logs de acceso de Intranet V2:
C:\nginx\nginx-1.26.3\logs\intranet_v2.access.log - Logs de error de Intranet V2:
C:\nginx\nginx-1.26.3\logs\intranet_v2.error.log
- Errores generales de arranque:
- Logs de Aplicación (Waitress / NSSM):
- Salida estándar:
C:\nssm\nssm2.24\logs\intranetv2\intranetv2-out.log - Salida de error:
C:\nssm\nssm2.24\logs\intranetv2\intranetv2-error.log
- Salida estándar:
- Logs del Worker de Colas (QCluster / NSSM):
- Salida estándar:
C:\nssm\nssm2.24\logs\intranetv2\queue_out.log - Salida de error:
C:\nssm\nssm2.24\logs\intranetv2\queue_error.log
- Salida estándar:
- Logs Internos de Django:
- Directorio de logs del proyecto:
C:\PROY_PY\intranetv2\logs\(si se encuentra activo un handler de archivos en los settings de producción).
- Directorio de logs del proyecto:
[!TIP] Gestión de Librerías: Si instala algo nuevo, recuerde actualizar el archivo:
pip freeze > requirements.txt(o agrégalo manualmente para mantenerlo limpio).