Configuración de la Interfaz Web de Nunchaku-FLUX.1-dev: Puerto, Dominio y Proxy Inverso HTTPS

Si ya has implementado Nunchaku-FLUX.1-dev localmente y accedes a su interfaz a través de http://IP_DEL_SERVIDOR:7860, has completado el primer paso. Sin embargo, es posible que pronto notes algunas limitaciones: el número de puerto es difícil de recordar, usar una dirección IP no es profesional, y lo más importante, la transmisión a través de HTTP no es segura.

Esta guía resuelve estos inconvenientes. Cubriremos tres configuraciones esenciales: cambiar el puerto predeterminado, asignar un nombre de dominio personalizado y configurar el acceso cifrado mediante HTTPS. El objetivo es transformar tu herramienta de generación de imágenes local en un servicio profesional y seguro.

1. Importancia de la Personalización

Antes de modificar archivos, es crucial entender el propósito de estos ajustes. Un enfoque de "solo que funcione" es limitado para usos reales.

Cambio de Puerto: El puerto 7860 es el predeterminado para aplicaciones Gradio. Modificarlo evita conflictos con otros servicios en el mismo servidor y permite usar un número más familiar, como el 8080 o 443.

Vinculación de Dominio: Facilita enormemente el acceso. Proporcionar un enlace como ai-pintura.tu-empresa.com es más memorable y profesional que compartir una dirección IP y un puerto.

Configuración HTTPS: Es un requisito de seguridad fundamental. Si generas imágenes con diseños comerciales o accedes al servicio desde una red pública, HTTP envía todos los datos (incluidos los prompts y las imágenes generadas) en texto plano. HTTPS cifra la comunicación, protegiéndola de interceptaciones. Además, muchos navegadores modernos y APIs web requieren HTTPS para funcionar correctamente.

2. Primer Paso: Modificar el Puerto del Servicio

Comenzaremos ajustando el puerto de escucha. La aplicación utiliza Supervisor para la gestión de procesos.

2.1 Localizar y Editar la Configuración de Inicio

El archivo principal de la aplicación (app.py) contiene la instrucción para iniciar el servidor web de Gradio. Busca la sección que lanza la interfaz:

import gradio as gr
# ... otras importaciones y definiciones de la interfaz ...
if __name__ == "__main__":
    # Configuración del servidor
    server_configuration = {
        "server_name": "0.0.0.0",
        "server_port": 7860,
        "share": False
    }
    # Iniciar la aplicación
    demo.launch(**server_configuration)

Para cambiar el puerto, puedes emplear uno de estos métodos:

Método A: Modificación Directa (Recomendado para simplicidad)
Altera el valor del diccionario directamente.

    server_configuration = {
        "server_name": "0.0.0.0",
        "server_port": 8080, # Puerto modificado
        "share": False
    }

Método B: Uso de Variables de Entorno (Más flexible)
Este método permite cambiar el puerto sin tocar el código fuente.

Primero, modifica el archivo de configuración de Supervisor para pasar la variable de entorno:

[program:nunchaku-flux-1-dev]
command=/opt/conda/envs/torch/bin/python app.py
directory=/root/proyecto-flux
environment=GRADIO_PORT=8080 # Variable de entorno
autostart=true
autorestart=true

Luego, adapta el código para leer la variable:

import os

# Obtener el puerto desde una variable de entorno, con 7860 como respaldo
custom_port = int(os.environ.get("GRADIO_PORT", 7860))

if __name__ == "__main__":
    demo.launch(
        server_name="0.0.0.0",
        server_port=custom_port,
        share=False
    )

2.2 Reiniciar y Verificar el Servicio

Aplica los cambios reiniciando el servicio supervisado y confirma que el nuevo puerto está activo:

# Reiniciar el proceso
sudo supervisorctl restart nunchaku-flux-1-dev

# Verificar que el puerto 8080 está en escucha
sudo ss -tlnp | grep :8080

El servicio ahora debería ser accesible en http://IP_SERVIDOR:8080.

3. Segundo Paso: Asignar un Dominio con Nginx

El paso siguiente es configurar Nginx como proxy inverso para asociar un nombre de dominio a tu servicio local.

3.1 Configuración Inicial

Asegúrate de tener Nginx instalado y en ejecución. Además, necesitas un dominio (por ejemplo, ia.tudominio.com) con un registro DNS tipo A que apunte a la IP pública de tu servidor.

3.2 Archivo de Configuración del Proxy Inverso

Crea un archivo de configuración específico para este sitio, por ejemplo en /etc/nginx/conf.d/nunchaku.conf:

server {
    listen 80;
    server_name ia.tudominio.com; # Reemplaza con tu dominio

    # Permitir carga de archivos grandes (para generación de imágenes)
    client_max_body_size 150M;

    location / {
        # Redirigir el tráfico al servidor local de Nunchaku
        proxy_pass http://127.0.0.1:8080; # Puerto que configuramos anteriormente

        # Cabeceras necesarias para el funcionamiento correcto
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Soporte para WebSocket (esencial para Gradio)
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Tiempos de espera extendidos (la generación de IA puede ser lenta)
        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
        proxy_read_timeout 300s;
    }
}

3.3 Activación y Diagnóstico

Habilita la configuración y reinicia Nginx:

# Probar la sintaxis de la configuración
sudo nginx -t

# Recargar Nginx para aplicar los cambios
sudo systemctl reload nginx

Ahora, al visitar http://ia.tudominio.com se debería mostrar la interfaz de Nunchaku-FLUX.1-dev. Si obtienes un error 502, verifica que el servicio local (en el puerto 8080) está activo y revisa los logs de Nginx (/var/log/nginx/error.log).

4. Tercer Paso: Habilitar HTTPS con Let's Encrypt

Para asegurar la comunicación, implementaremos un certificado SSL gratuito utilizando Certbot.

4.1 Obtención Automática del Certificado

Instala Certbot con el plugin de Nginx y ejecuta el comando de obtención. El proceso es interactivo y modificará automáticamente tu archivo de configuración de Nginx.

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d ia.tudominio.com

Sigue las indicaciones en pantalla. Al finalizar, tu sitio estará disponible en https://ia.tudominio.com y todas las solicitudes HTTP serán redirigidas a HTTPS.

4.2 Configuración Manual Avanzada (Opcional)

Si prefieres control total, puedes editar manualmente el archivo de configuración de Nginx después de obtener los certificados con sudo certbot certonly --nginx -d ia.tudominio.com. La configuración completa con HTTPS y mejoras de seguridad podría verse así:

# Redirección HTTP a HTTPS
server {
    listen 80;
    server_name ia.tudominio.com;
    return 301 https://$server_name$request_uri;
}

# Bloque HTTPS Principal
server {
    listen 443 ssl http2;
    server_name ia.tudominio.com;

    # Rutas a los certificados de Let's Encrypt
    ssl_certificate /etc/letsencrypt/live/ia.tudominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/ia.tudominio.com/privkey.pem;

    # Parámetros SSL optimizados
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers off;
    ssl_session_cache shared:SSL:10m;

    # Cabecera HSTS (fuerza el uso de HTTPS)
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;

    client_max_body_size 150M;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # Soporte para WebSocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_connect_timeout 600s;
        proxy_send_timeout 600s;
        proxy_read_timeout 600s;
    }
}

4.3 Renovación Automática y Seguridad Adicional

Certbot configura por defecto un cron o un temporizador de systemd para la renovación automática. Puedes verificarlo con sudo systemctl list-timers | grep certbot.

Refuerzo de Seguridad:

  • Restricción por IP: Si el servicio es interno, añade directivas allow y deny en el bloque location /.
  • Autenticación Básica: Puedes proteger el acceso con usuario y contraseña usando htpasswd y las directivas auth_basic en Nginx.

5. Conclusión

Tras seguir estos pasos, has configurado con éxito tu instancia de Nunchaku-FLUX.1-dev como un servicio accesible mediante un dominio seguro (https://ia.tudominio.com). Esto no solo mejora la experiencia de uso y la profesionalidad, sino que también garantiza la protección de los datos que manejas. Para cualquier problema, consulta siempre los logs de Nginx y del servicio supervisado.

Etiquetas: Nunchaku-FLUX.1-dev Gradio Nginx Let's Encrypt Proxy Inverso

Publicado el 6-16 17:50