| FROM soulter/astrbot:latest |
|
|
| USER root |
|
|
| |
| 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/ |
|
|
| |
| 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 ' |
| 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\ |
| |
| \n\ |
| |
| \n\ |
| |
| (\n\ |
| while true; do\n\ |
| sleep 21600\n\ |
| BACKUP_DATA\n\ |
| done\n\ |
| ) &\n\ |
| \n\ |
| |
| nginx &\n\ |
| cd /AstrBot && python main.py\n\ |
| ' > /entrypoint.sh && chmod +x /entrypoint.sh |
|
|
| EXPOSE 7860 |
|
|
| ENTRYPOINT ["/entrypoint.sh"] |