Files
TotalConnect/doc/portability_and_packaging.md

3.1 KiB

Guía de Empaquetado y Portabilidad: TotalConnect 2.0

Para hacer que este proyecto sea lo más portable posible y evitar configurar entornos virtuales (venv), instalar pip o gestionar dependencias manualmente en cada servidor, existen dos enfoques recomendados:


🚀 Método 1: Empaquetar como un Ejecutable Único (PyInstaller)

Este método compila tu script de Python y todas sus dependencias (incluyendo el intérprete de Python, las librerías total-connect-client, zeep, etc.) dentro de un único archivo ejecutable binario para Linux.

👍 Ventajas:

  • Genera un solo archivo (ej. totalconnect).
  • Cero dependencias: No necesitas tener instalado Python, pip, ni crear entornos virtuales en el servidor destino. Solo copias el archivo y lo corres.
  • Súper ligero (~15-20 MB).

🛠️ Cómo empaquetarlo (Ejecutar en la VM Linux 192.168.100.50):

  1. Instalar PyInstaller en el entorno virtual actual:

    cd /mnt/data2/Software/Bot-WhatsApp/TotalConnect
    ./venv/bin/pip install pyinstaller
    
  2. Compilar el script en un único archivo:

    ./venv/bin/pyinstaller --onefile --name totalconnect index.py
    

    (Este comando creará una carpeta dist/ que contendrá el ejecutable final llamado totalconnect).

  3. Cómo usar el ejecutable generado: Puedes mover el archivo dist/totalconnect a cualquier parte (por ejemplo, a /usr/local/bin/ para que sea un comando global) y correrlo directamente:

    • Modo Servidor: ./totalconnect --server 8080
    • Modo On-Demand: ./totalconnect

Nota: Recuerda que credentials.json y locations_cache.json deben estar en la misma carpeta desde donde ejecutes el binario, ya que busca esos archivos en su directorio relativo.


🐳 Método 2: Contenedorizar con Docker

Este método empaqueta todo el entorno (sistema operativo base, Python, librerías y código) dentro de una imagen de Docker.

👍 Ventajas:

  • Portabilidad absoluta: Funciona de forma idéntica en cualquier sistema (Windows, macOS, Linux, AWS, Proxmox) que tenga instalado Docker.
  • Aislamiento total: No interfiere en lo absoluto con las librerías del sistema operativo.
  • Gestión de reinicios integrada (Docker se encarga de mantenerlo vivo).

🛠️ Archivos necesarios en la carpeta /TotalConnect:

  1. Crear un archivo Dockerfile:

    FROM python:3.11-slim
    
    WORKDIR /app
    
    # Instalar dependencias
    RUN pip install --no-cache-dir total-connect-client
    
    # Copiar código
    COPY index.py /app/index.py
    
    # Exponer puerto del servidor
    EXPOSE 8080
    
    # Comando para arrancar el servidor por defecto
    CMD ["python", "index.py", "--server", "8080"]
    
  2. Construir la imagen de Docker:

    docker build -t totalconnect-monitor .
    
  3. Ejecutar el contenedor (montando las credenciales para poder cambiarlas desde fuera):

    docker run -d \
      --name tc-monitor \
      --restart unless-stopped \
      -p 8080:8080 \
      -v $(pwd)/credentials.json:/app/credentials.json \
      -v $(pwd)/locations_cache.json:/app/locations_cache.json \
      totalconnect-monitor