mirror of
https://github.com/cheveguerra/TotalConnect.git
synced 2026-08-19 00:46:37 +00:00
82 lines
3.1 KiB
Markdown
Executable File
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
|
|
```
|