hermes-agent / docker /entrypoint.sh
atvor's picture
Update docker/entrypoint.sh
81b8fb9 verified
Raw
History Blame Contribute Delete
2.71 kB
#!/bin/bash
# Docker entrypoint: 适配 Hugging Face Spaces 的启动脚本
# 功能:初始化数据目录、同步配置并启动 Hermes
set -e
# --- 1. 路径配置 (优先使用环境变量,否则使用默认值) ---
# 在 Hugging Face 中,HOME 默认为 /home/user
: "${HERMES_HOME:=$HOME/data}"
: "${INSTALL_DIR:=$HOME/app}"
: "${VIRTUAL_ENV:=$HOME/venv}"
# 确保 PATH 包含虚拟环境(双重保险)
export PATH="$VIRTUAL_ENV/bin:$PATH"
echo "--- Hermes Bootstrapping ---"
echo "Data Directory: $HERMES_HOME"
echo "Install Directory: $INSTALL_DIR"
# --- 2. 创建必要的子目录 ---
# 在 /home/user/data 下创建结构,这里拥有完整写权限
mkdir -p "$HERMES_HOME"/{cron,sessions,logs,hooks,memories,skills,skins,plans,workspace,home}
# --- 3. 初始配置文件检查与拷贝 ---
# 如果挂载的持久化目录中没有配置文件,则从安装目录拷贝模板
# .env 文件
if [ ! -f "$HERMES_HOME/.env" ]; then
echo "Info: Creating default .env from template..."
if [ -f "$INSTALL_DIR/.env.example" ]; then
cp "$INSTALL_DIR/.env.example" "$HERMES_HOME/.env"
else
echo "Warning: .env.example not found in $INSTALL_DIR"
fi
fi
# config.yaml 文件
if [ ! -f "$HERMES_HOME/config.yaml" ]; then
echo "Info: Creating default config.yaml..."
if [ -f "$INSTALL_DIR/cli-config.yaml.example" ]; then
cp "$INSTALL_DIR/cli-config.yaml.example" "$HERMES_HOME/config.yaml"
else
echo "Warning: cli-config.yaml.example not found"
fi
fi
# SOUL.md 文件
if [ ! -f "$HERMES_HOME/SOUL.md" ]; then
echo "Info: Creating default SOUL.md..."
if [ -f "$INSTALL_DIR/docker/SOUL.md" ]; then
cp "$INSTALL_DIR/docker/SOUL.md" "$HERMES_HOME/SOUL.md"
else
echo "Warning: SOUL.md not found in docker folder"
fi
fi
# --- 4. 同步内置技能 (Skills Sync) ---
if [ -d "$INSTALL_DIR/skills" ]; then
echo "Info: Syncing bundled skills..."
# 显式使用虚拟环境中的 python 运行同步脚本
"$VIRTUAL_ENV/bin/python3" "$INSTALL_DIR/tools/skills_sync.py" || echo "Skill sync failed, skipping..."
fi
# --- 5. 启动应用 ---
# 使用 exec 确保 hermes 进程成为容器的 PID 1,以便正确接收停止信号
echo "--- Starting Hermes Agent on Port $PORT ---"
# 如果你发现程序没有正确读取 $PORT 环境变量,可以显式在这里指定
# 例如:exec hermes --port "$PORT" "$@"
# exec hermes "$@"
echo "Starting Web Terminal via ttyd on port $PORT..."
# 使用 ttyd 包装 hermes 启动
# -p $PORT: 监听 Hugging Face 分配的端口
# -W: 允许网页端写入(即允许你打字输入)
# hermes: 要运行的目标程序
exec ttyd -p "$PORT" -W hermes