Download Dockerfile from 345894s/bot: direct link, hf CLI and curl.
- Browser
- Download file 3.06 kB
-
https://huggingface.co/spaces/345894s/bot/resolve/main/Dockerfile
- Command line
-
hf download hf://spaces/345894s/bot/Dockerfile
-
curl -L -o Dockerfile https://huggingface.co/spaces/345894s/bot/resolve/main/Dockerfile
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"] |