File size: 4,785 Bytes
b5b9c2e 725f2d1 b5b9c2e f27b873 b5b9c2e 360a816 b5b9c2e d01af45 f27b873 d255751 b5b9c2e 360a816 b5b9c2e a74a718 b5b9c2e 8338cc6 360a816 8338cc6 360a816 f27b873 360a816 f27b873 360a816 f27b873 360a816 f27b873 a74a718 f27b873 360a816 a74a718 f27b873 a74a718 f27b873 a74a718 360a816 b5b9c2e 8338cc6 4bd0975 b5b9c2e 360a816 b5b9c2e 360a816 b5b9c2e d255751 a74a718 f27b873 a74a718 b5b9c2e 8338cc6 360a816 b5b9c2e f27b873 | 1 2 3 4 5 6 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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | FROM ghcr.io/astral-sh/uv:0.11.6-python3.13-trixie@sha256:b3c543b6c4f23a5f2df22866bd7857e5d304b67a564f4feab6ac22044dde719b AS uv_source
FROM tianon/gosu:1.19-trixie@sha256:3b176695959c71e123eb390d427efc665eeb561b1540e82679c15e992006b8b9 AS gosu_source
FROM node:23-bookworm-slim
ENV PYTHONUNBUFFERED=1 \
TZ=Asia/Bangkok \
PLAYWRIGHT_BROWSERS_PATH=/opt/hermes/.playwright
# ------------------- ระบบพื้นฐาน -------------------
RUN apt-get update && \
apt-get install -y --no-install-recommends \
build-essential ca-certificates python3 ripgrep ffmpeg gcc python3-dev libffi-dev curl wget \
procps git git-lfs zip unzip tzdata python3 python3-venv python3-pip python3-setuptools python3-wheel && \
ln -fs /usr/share/zoneinfo/$TZ /etc/localtime && \
dpkg-reconfigure -f noninteractive tzdata && \
rm -rf /var/lib/apt/lists/*
# ------------------- user -------------------
RUN useradd -u 10000 -m -d /opt/data hermes
COPY --chmod=0755 --from=gosu_source /gosu /usr/local/bin/
COPY --chmod=0755 --from=uv_source /usr/local/bin/uv /usr/local/bin/uvx /usr/local/bin/
COPY . /tmp/hermes-space-overlay
WORKDIR /opt
ARG HERMES_WEB_UI_VERSION=latest
ARG HERMES_AGENT_COMMIT # <-- optional build‑arg
# ------------------- 1️⃣ ดึงคอมมิตล่าสุด / checkout -------------------
RUN set -eux; \
\
# ถ้าไม่ได้ส่งค่า build‑arg ให้ดึงคอมมิตล่าสุดจาก GitHub
HERMES_AGENT_COMMIT="${HERMES_AGENT_COMMIT:-}"; \
if [ -z "${HERMES_AGENT_COMMIT}" ]; then \
echo "🔎 ดึงคอมมิตล่าสุดของสาขา main …"; \
HERMES_AGENT_COMMIT=$(git ls-remote https://github.com/NousResearch/hermes-agent.git refs/heads/main | cut -f1); \
echo "✅ คอมมิตล่าสุด = ${HERMES_AGENT_COMMIT}"; \
else \
echo "⚙️ ใช้คอมมิตที่ส่งมาจาก build‑arg = ${HERMES_AGENT_COMMIT}"; \
fi; \
\
# เขียน SHA‑1 ลงไฟล์ที่ขั้นตอนต่อไปจะอ่าน
echo "${HERMES_AGENT_COMMIT}" > /tmp/hermes-space-overlay/docker/HERMES_UPSTREAM_REF; \
\
# Clone repo แล้ว checkout ตามค่าในไฟล์ HERMES_UPSTREAM_REF
git clone --depth 1 https://github.com/NousResearch/hermes-agent.git /opt/hermes && \
cd /opt/hermes && \
git fetch --depth 1 origin "$(cat /tmp/hermes-space-overlay/docker/HERMES_UPSTREAM_REF)" && \
git checkout FETCH_HEAD && \
\
# คัดลอกไฟล์ overlay ที่จำเป็นลงในโฟลเดอร์ของ hermes‑agent
install -D /tmp/hermes-space-overlay/docker/HERMES_UPSTREAM_REF /opt/hermes/docker/HERMES_UPSTREAM_REF && \
install -D /tmp/hermes-space-overlay/docker/entrypoint.sh /opt/hermes/docker/entrypoint.sh && \
install -D /tmp/hermes-space-overlay/docker/space_runtime.py /opt/hermes/docker/space_runtime.py && \
install -D /tmp/hermes-space-overlay/hermes_cli/hf_space_update.py /opt/hermes/hermes_cli/hf_space_update.py && \
install -D /tmp/hermes-space-overlay/hermes_cli/space_update_wrapper.py /opt/hermes/hermes_cli/space_update_wrapper.py && \
rm -rf /tmp/hermes-space-overlay
WORKDIR /opt/hermes
# ------------------- 2️⃣ Node / Playwright -------------------
RUN npm install --prefer-offline --no-audit && \
npm install -g --no-audit "hermes-web-ui@${HERMES_WEB_UI_VERSION}" && \
mkdir -p /usr/local/lib/node_modules/hermes-web-ui/dist/data && \
chown -R hermes:hermes /usr/local/lib/node_modules/hermes-web-ui && \
npx playwright install --with-deps chromium --only-shell && \
cd /opt/hermes/scripts/whatsapp-bridge && \
npm install --prefer-offline --no-audit && \
npm cache clean --force
# ------------------- 3️⃣ ใช้ non‑root user -------------------
RUN chown -R hermes:hermes /opt/hermes
USER hermes
# ------------------- 4️⃣ Python virtualenv & deps -------------------
RUN uv venv && \
uv pip install --no-cache-dir -e ".[all]" "huggingface_hub[cli]" && \
mv /opt/hermes/.venv/bin/hermes /opt/hermes/.venv/bin/hermes-upstream && \
printf '%s\n' '#!/bin/sh' 'exec /opt/hermes/.venv/bin/python -m hermes_cli.space_update_wrapper "$@"' \
> /opt/hermes/.venv/bin/hermes && \
chmod +x /opt/hermes/.venv/bin/hermes
ENV PATH="/opt/hermes/.venv/bin:${PATH}"
# ------------------- 5️⃣ ทำให้ entrypoint executable -------------------
USER root
RUN chmod +x /opt/hermes/docker/entrypoint.sh
ENV HERMES_HOME=/opt/data
VOLUME ["/opt/data"]
ENTRYPOINT ["/opt/hermes/docker/entrypoint.sh"]
|