diff --git a/docker/.dockerignore b/docker/.dockerignore new file mode 100644 index 0000000..cc96892 --- /dev/null +++ b/docker/.dockerignore @@ -0,0 +1,16 @@ +# Excluir archivos innecesarios del build +.git +.gitignore +__pycache__ +*.pyc +.venv +*.log +downloads/ +transcriptions/ +.env +.env.* +!.env.example +*.md +!docker/README.md +node_modules/ +.DS_Store diff --git a/docker/.env.example b/docker/.env.example new file mode 100644 index 0000000..9a2aa46 --- /dev/null +++ b/docker/.env.example @@ -0,0 +1,14 @@ +# CBCFacil - Configuración Docker +# Copiar a .env y completar con tus credenciales + +# API Keys +ANTHROPIC_AUTH_TOKEN=tu_token_aqui + +# Nextcloud +NEXTCLOUD_URL=https://nextcloud.tudominio.com/remote.php/webdav +NEXTCLOUD_USER=tu_usuario +NEXTCLOUD_PASSWORD=tu_password + +# Telegram +TELEGRAM_TOKEN=tu_token_bot +TELEGRAM_CHAT_ID=tu_chat_id diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..9b91668 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,35 @@ +# CBC OpenClaw - Imagen Docker minimal +# Solo acceso a /app y las tools necesarias + +FROM python:3.11-slim + +# Instalar dependencias del sistema +RUN apt-get update && apt-get install -y \ + git \ + curl \ + wget \ + build-essential \ + && rm -rf /var/lib/apt/lists/* + +# Crear usuario no-root para seguridad +RUN useradd -m -s /bin/bash cbc && \ + mkdir -p /home/cbc && \ + chown -R cbc:cbc /home/cbc + +# Definir workspace +WORKDIR /app + +# Copiar solo archivos necesarios del proyecto +COPY --chown=cbc:cbc . . + +# Cambiar a usuario no-root +USER cbc + +# Variables de entorno para el agente +ENV ANTHROPIC_API_KEY="" +ENV ANTHROPIC_BASE_URL="https://api.minimax.io/anthropic" +ENV ANTHROPIC_MODEL="MiniMax-M2.5" +ENV HOME=/app + +# El agente solo puede acceder a /app y sus subdirectorios +# No tiene acceso a Internet directo (solo a través de variables de entorno) diff --git a/docker/README.md b/docker/README.md new file mode 100644 index 0000000..3e57590 --- /dev/null +++ b/docker/README.md @@ -0,0 +1,10 @@ +# CBC OpenClaw - Dockerizado con acceso limitado + +## Estructura + +``` +docker/ +├── Dockerfile +├── docker-compose.yml +├── .dockerignore +└── README.md diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000..449ed49 --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,34 @@ +version: '3.8' + +services: + cbc-openclaw: + build: + context: .. + dockerfile: docker/Dockerfile + container_name: cbc-openclaw + volumes: + # Solo montar las carpetas necesarias + - ../:/app + # Montar credenciales desde variables de entorno o archivo seguro + - ~/.env:/app/.env:ro + environment: + # API Keys - pasar desde host + - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} + - ANTHROPIC_AUTH_TOKEN=${ANTHROPIC_AUTH_TOKEN} + - ANTHROPIC_BASE_URL=https://api.minimax.io/anthropic + - ANTHROPIC_MODEL=MiniMax-M2.5 + # Configuración CBC + - NEXTCLOUD_URL=${NEXTCLOUD_URL} + - NEXTCLOUD_USER=${NEXTCLOUD_USER} + - NEXTCLOUD_PASSWORD=${NEXTCLOUD_PASSWORD} + - TELEGRAM_TOKEN=${TELEGRAM_TOKEN} + - TELEGRAM_CHAT_ID=${TELEGRAM_CHAT_ID} + working_dir: /app + command: ["python3", "main.py"] + restart: unless-stopped + networks: + - cbc-network + +networks: + cbc-network: + driver: bridge diff --git a/docker/start.sh b/docker/start.sh new file mode 100755 index 0000000..b18b8d0 --- /dev/null +++ b/docker/start.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# CBC OpenClaw - Script de inicio Docker + +set -e + +# Cargar variables de entorno si existe .env +if [ -f ".env" ]; then + export $(cat .env | grep -v '^#' | xargs) +fi + +echo "🟢 Iniciando CBC OpenClaw..." + +# Construir imagen si no existe +docker compose -f docker/docker-compose.yml build + +# Iniciar contenedor +docker compose -f docker/docker-compose.yml up -d + +echo "✅ CBC OpenClaw corriendo en http://localhost:5000" +echo "📝 Ver logs: docker compose -f docker/docker-compose.yml logs -f"