Update Dockerfile
Browse files- Dockerfile +33 -91
Dockerfile
CHANGED
|
@@ -1,100 +1,42 @@
|
|
| 1 |
# syntax=docker/dockerfile:1.4
|
| 2 |
FROM agent0ai/agent-zero:latest
|
| 3 |
|
| 4 |
-
ENV PYTHONUNBUFFERED=1
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5 |
|
| 6 |
USER root
|
| 7 |
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
echo ' echo " ➕ Moviendo $SRC -> $DST (copia inicial)"' >> /start.sh && \
|
| 32 |
-
echo ' cp -a "$SRC" "$DST" 2>/dev/null && rm -rf "$SRC"' >> /start.sh && \
|
| 33 |
-
echo ' else' >> /start.sh && \
|
| 34 |
-
echo ' echo " 🔄 $DST ya existe. Preservando contenido y eliminando original."' >> /start.sh && \
|
| 35 |
-
echo ' rm -rf "$SRC"' >> /start.sh && \
|
| 36 |
-
echo ' fi' >> /start.sh && \
|
| 37 |
-
echo ' ln -sfn "$DST" "$SRC"' >> /start.sh && \
|
| 38 |
-
echo ' chown -h agent:agent "$SRC"' >> /start.sh && \
|
| 39 |
-
echo '}' >> /start.sh && \
|
| 40 |
-
echo '' >> /start.sh && \
|
| 41 |
-
echo '# Gestionar repositorio de código' >> /start.sh && \
|
| 42 |
-
echo 'REPO_DIR="/data/agent-zero-repo"' >> /start.sh && \
|
| 43 |
-
echo 'if [ -d "$REPO_DIR/.git" ]; then' >> /start.sh && \
|
| 44 |
-
echo ' echo "🔄 Actualizando repositorio (git pull)..."' >> /start.sh && \
|
| 45 |
-
echo ' git -C "$REPO_DIR" pull origin main || { echo "ERROR: git pull falló, eliminando repo corrupto"; rm -rf "$REPO_DIR"; }' >> /start.sh && \
|
| 46 |
-
echo 'fi' >> /start.sh && \
|
| 47 |
-
echo 'if [ ! -d "$REPO_DIR/.git" ]; then' >> /start.sh && \
|
| 48 |
-
echo ' echo "📦 Clonando repositorio oficial..."' >> /start.sh && \
|
| 49 |
-
echo ' rm -rf "$REPO_DIR"' >> /start.sh && \
|
| 50 |
-
echo ' git clone https://github.com/agent0ai/agent-zero.git "$REPO_DIR"' >> /start.sh && \
|
| 51 |
-
echo ' git config --global --add safe.directory "$REPO_DIR"' >> /start.sh && \
|
| 52 |
-
echo 'fi' >> /start.sh && \
|
| 53 |
-
echo 'chown -R agent:agent "$REPO_DIR"' >> /start.sh && \
|
| 54 |
-
echo '' >> /start.sh && \
|
| 55 |
-
echo '# Entorno virtual persistente' >> /start.sh && \
|
| 56 |
-
echo 'PERSIST_VENV="/data/venv-a0"' >> /start.sh && \
|
| 57 |
-
echo 'if [ ! -d "$PERSIST_VENV" ]; then' >> /start.sh && \
|
| 58 |
-
echo ' echo "📦 Copiando entorno virtual por primera vez..."' >> /start.sh && \
|
| 59 |
-
echo ' cp -a /opt/venv-a0 "$PERSIST_VENV"' >> /start.sh && \
|
| 60 |
-
echo 'fi' >> /start.sh && \
|
| 61 |
-
echo '' >> /start.sh && \
|
| 62 |
-
echo '# Enlaces fijos' >> /start.sh && \
|
| 63 |
-
echo 'ln -sfn "$REPO_DIR" /git/agent-zero' >> /start.sh && \
|
| 64 |
-
echo 'ln -sfn "$PERSIST_VENV" /opt/venv-a0' >> /start.sh && \
|
| 65 |
-
echo 'chown -h agent:agent /git/agent-zero /opt/venv-a0' >> /start.sh && \
|
| 66 |
-
echo '' >> /start.sh && \
|
| 67 |
-
echo '# Mapeo de todos los elementos en la raíz' >> /start.sh && \
|
| 68 |
-
echo 'echo "Procesando elementos en la raíz..."' >> /start.sh && \
|
| 69 |
-
echo 'for item in /*; do' >> /start.sh && \
|
| 70 |
-
echo ' [ "$item" = "/data" ] && continue' >> /start.sh && \
|
| 71 |
-
echo ' is_system_path "$item" && echo " ⏭️ $item (sistema)" && continue' >> /start.sh && \
|
| 72 |
-
echo ' [ -L "$item" ] && continue' >> /start.sh && \
|
| 73 |
-
echo ' move_to_data "$item"' >> /start.sh && \
|
| 74 |
-
echo 'done' >> /start.sh && \
|
| 75 |
-
echo '' >> /start.sh && \
|
| 76 |
-
echo 'chown -R agent:agent /data' >> /start.sh && \
|
| 77 |
-
echo '' >> /start.sh && \
|
| 78 |
-
echo 'echo "=== ESPACIO OCUPADO EN /data ==="' >> /start.sh && \
|
| 79 |
-
echo 'du -sh /data/ 2>/dev/null || echo "no se puede calcular"' >> /start.sh && \
|
| 80 |
-
echo 'echo "================================"' >> /start.sh && \
|
| 81 |
-
echo '' >> /start.sh && \
|
| 82 |
-
echo 'PYTHON_CMD="/opt/venv-a0/bin/python"' >> /start.sh && \
|
| 83 |
-
echo 'if [ ! -x "$PYTHON_CMD" ]; then' >> /start.sh && \
|
| 84 |
-
echo ' echo "ERROR: Python no encontrado"; exit 1' >> /start.sh && \
|
| 85 |
-
echo 'fi' >> /start.sh && \
|
| 86 |
-
echo 'cd /git/agent-zero' >> /start.sh && \
|
| 87 |
-
echo 'export HOME=/home/agent USER=agent LOGNAME=agent' >> /start.sh && \
|
| 88 |
-
echo 'PORT=${PORT:-7860}' >> /start.sh && \
|
| 89 |
-
echo 'exec setpriv --reuid=1000 --regid=1000 --clear-groups \' >> /start.sh && \
|
| 90 |
-
echo ' "$PYTHON_CMD" run_ui.py --host 0.0.0.0 --port "$PORT" --dockerized=True' >> /start.sh
|
| 91 |
-
|
| 92 |
RUN chmod 755 /start.sh
|
| 93 |
|
| 94 |
-
|
| 95 |
-
|
| 96 |
-
A0_SET_RFC_PORT_HTTP=55080 \
|
| 97 |
-
PORT=7860
|
| 98 |
-
|
| 99 |
EXPOSE 7860
|
| 100 |
-
|
|
|
|
|
|
|
|
|
| 1 |
# syntax=docker/dockerfile:1.4
|
| 2 |
FROM agent0ai/agent-zero:latest
|
| 3 |
|
| 4 |
+
ENV PYTHONUNBUFFERED=1 \
|
| 5 |
+
PORT=7860 \
|
| 6 |
+
HOME=/home/agent \
|
| 7 |
+
USER=agent \
|
| 8 |
+
LOGNAME=agent
|
| 9 |
|
| 10 |
USER root
|
| 11 |
|
| 12 |
+
# Instalar dependencias críticas del sistema requeridas para herramientas avanzadas
|
| 13 |
+
RUN apt-get update && apt-get install -y \
|
| 14 |
+
tesseract-ocr \
|
| 15 |
+
poppler-utils \
|
| 16 |
+
libmagic1 \
|
| 17 |
+
pandoc \
|
| 18 |
+
setpriv \
|
| 19 |
+
&& rm -rf /var/lib/apt/lists/*
|
| 20 |
+
|
| 21 |
+
# Configurar el usuario no privilegiado UID 1000 requerido por la plataforma de Hugging Face
|
| 22 |
+
RUN groupadd -g 1000 agent || true && \
|
| 23 |
+
useradd -u 1000 -g 1000 -m -s /bin/bash agent || true && \
|
| 24 |
+
mkdir -p /data /home/agent/.local /a0/usr && \
|
| 25 |
+
chown -R agent:agent /data /home/agent /a0
|
| 26 |
+
|
| 27 |
+
# Modificar el plugin de Telegram para asegurar que use el venv persistente
|
| 28 |
+
RUN if [ -f /git/agent-zero/plugins/_telegram_integration/helpers/dependencies.py ]; then \
|
| 29 |
+
sed -i 's|sys.executable,|"/data/venv-a0/bin/python",|' \
|
| 30 |
+
/git/agent-zero/plugins/_telegram_integration/helpers/dependencies.py; \
|
| 31 |
+
fi
|
| 32 |
+
|
| 33 |
+
# Incorporar el script de arranque robusto de nivel superior
|
| 34 |
+
COPY --chown=agent:agent start.sh /start.sh
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
RUN chmod 755 /start.sh
|
| 36 |
|
| 37 |
+
# Declarar volumen persistente y puerto de escucha
|
| 38 |
+
VOLUME ["/data"]
|
|
|
|
|
|
|
|
|
|
| 39 |
EXPOSE 7860
|
| 40 |
+
|
| 41 |
+
# Arrancar el contenedor bajo control del script quirúrgico
|
| 42 |
+
ENTRYPOINT ["/start.sh"]
|