Files
TotalConnect/doc/portability_and_packaging.md
T

82 lines
3.1 KiB
Markdown
Executable File

# 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
```