bot / Dockerfile
345894s's picture
Upload 2 files
e6d9d25 verified
Raw
History Blame Contribute Delete
3.06 kB
FROM soulter/astrbot:latest
USER root
# 安装 nginx + huggingface_hub(新增)
RUN apt-get update && apt-get install -y nginx && rm -rf /var/lib/apt/lists/* && \
pip install --no-cache-dir huggingface_hub -i https://mirrors.aliyun.com/pypi/simple/
# 配置 nginx(你的原配置)
RUN echo 'server { \
listen 7860; \
client_max_body_size 50M; \
\
location /health { \
return 200 "OK\n"; \
add_header Content-Type text/plain; \
} \
\
location /ws { \
proxy_pass http://127.0.0.1:6199; \
proxy_http_version 1.1; \
proxy_set_header Upgrade $http_upgrade; \
proxy_set_header Connection "upgrade"; \
proxy_set_header Host $host; \
proxy_read_timeout 86400; \
} \
\
location / { \
proxy_pass http://127.0.0.1:6185; \
proxy_set_header Host $host; \
proxy_set_header X-Real-IP $remote_addr; \
} \
}' > /etc/nginx/sites-enabled/default
# 持久化入口脚本(新增:恢复+备份逻辑)
RUN echo '#!/bin/bash\n\
set -e\n\
\n\
RESTORE_DATA() {\n\
if [ -z "$HF_TOKEN" ] || [ -z "$DATASET_REPO" ]; then\n\
echo "[Restore] 未配置 HF_TOKEN/DATASET_REPO,跳过恢复"\n\
return 0\n\
fi\n\
echo "[Restore] 尝试从 HF Dataset 恢复数据..."\n\
python3 -c "\n\
import os\n\
from huggingface_hub import hf_hub_download\n\
import zipfile\n\
\ntry:\n\
path = hf_hub_download(\n\
repo_id=os.environ['DATASET_REPO'],\n\
filename='astrbot_data.zip',\n\
repo_type='dataset',\n\
token=os.environ['HF_TOKEN'],\n\
local_dir='/tmp'\n\
)\n\
with zipfile.ZipFile(path, 'r') as z:\n\
z.extractall('/app')\n\
print('[Restore] 数据恢复成功')\n\
except Exception as e:\n\
print(f'[Restore] 恢复失败(可能首次运行): {e}')\n\
"\n\
}\n\
\n\
BACKUP_DATA() {\n\
if [ -z "$HF_TOKEN" ] || [ -z "$DATASET_REPO" ]; then\n\
echo "[Backup] 未配置 HF_TOKEN/DATASET_REPO,跳过备份"\n\
return 0\n\
fi\n\
echo "[Backup] 正在备份 AstrBot 数据..."\n\
cd /app\n\
zip -r /tmp/astrbot_data.zip data/ 2>/dev/null || true\n\
python3 -c "\n\
import os\n\
from huggingface_hub import HfApi\n\
api = HfApi(token=os.environ['HF_TOKEN'])\n\
api.upload_file(\n\
path_or_fileobj='/tmp/astrbot_data.zip',\n\
path_in_repo='astrbot_data.zip',\n\
repo_id=os.environ['DATASET_REPO'],\n\
repo_type='dataset'\n\
)\n\
print('[Backup] 上传成功')\n\
"\n\
rm -f /tmp/astrbot_data.zip\n\
echo "[Backup] 完成"\n\
}\n\
\n\
# 启动前:恢复数据\nRESTORE_DATA\n\
\n\
# 退出时:备份数据\ntrap "BACKUP_DATA; exit 0" SIGTERM SIGINT\n\
\n\
# 定时备份(后台,每6小时)\n\
(\n\
while true; do\n\
sleep 21600\n\
BACKUP_DATA\n\
done\n\
) &\n\
\n\
# 启动 nginx + AstrBot(你的原命令)\n\
nginx &\n\
cd /AstrBot && python main.py\n\
' > /entrypoint.sh && chmod +x /entrypoint.sh
EXPOSE 7860
ENTRYPOINT ["/entrypoint.sh"]