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