feat: Docker para CBC con acceso limitado

- Dockerfile minimal con Python 3.11
- docker-compose.yml con volumenes controlados
- .dockerignore para build eficiente
- Script de inicio start.sh
- .env.example para configuración

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
renato97
2026-02-25 17:44:09 +00:00
parent d50772d962
commit a7726365d7
6 changed files with 129 additions and 0 deletions

16
docker/.dockerignore Normal file
View File

@@ -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

14
docker/.env.example Normal file
View File

@@ -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

35
docker/Dockerfile Normal file
View File

@@ -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)

10
docker/README.md Normal file
View File

@@ -0,0 +1,10 @@
# CBC OpenClaw - Dockerizado con acceso limitado
## Estructura
```
docker/
├── Dockerfile
├── docker-compose.yml
├── .dockerignore
└── README.md

34
docker/docker-compose.yml Normal file
View File

@@ -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

20
docker/start.sh Executable file
View File

@@ -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"