# 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:** ```bash cd /mnt/data2/Software/Bot-WhatsApp/TotalConnect ./venv/bin/pip install pyinstaller ``` 2. **Compilar el script en un único archivo:** ```bash ./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`:** ```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:** ```bash docker build -t totalconnect-monitor . ``` 3. **Ejecutar el contenedor (montando las credenciales para poder cambiarlas desde fuera):** ```bash 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 ```