HongShi AI正在绞尽脑汁想思路ING···
项目地址:https://github.com/vastsa/FileCodeBox
项目名称:FileCodeBox
前言
简介
顾名思义,这个项目能够快速、高效地跨设备、跨网络链接实现文件、字符共享,可以自行设置过期时间/次数。文件大小限制为20MB以内。
由于抱脸容器的特殊性(定时清空数据重启),我们需要设置database同步以达到不丢失数据。
前置条件
1.外网访问环境
2.一个huggingface账户
3.一点耐心
必要环境变量
1.huggingface自带的database服务仓库名
2.huggingface授权key
部署步骤
创建空间
先前往space页面,单击New Space

在space设置页面有几个需要填的东西
Space name:空间名称,决定域名部分(分配域名:用户名-空间名.hf.space)
Selet the Space SDK:选择Docker
Space harware:空间硬件配置,如果你不想多花冤枉钱就选择默认的free配置

其他东西不用填,直接点击下方的Create Space
存储库设置
点击个人头像,选择New Dataset
输入数据库名称,然后点击Create Dataset

这里的Datasets: xxxxx/xxxxx将会作为DATASET_ID这个变量

获取授权Key
点击个人头像,前往Access Tokens 并输入密码进入

单击Creat new token
权限全部勾选(如果你懒得单独调)
创建后会返还以hf-xxxx开头的秘钥,这将作为HF_TOKEN这个变量使用。
空间设置
来到文件页面,选择README.md并在下方添加(如下图所示)

然后转到Files选项卡,点击Add file并选择Create a new file
文件名为sync_data.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
| #!/bin/bash
# 检查环境变量 if [ -z "$HF_TOKEN" ] || [ -z "$DATASET_ID" ]; then echo "Starting without backup functionality - missing HF_TOKEN or DATASET_ID" exec python main.py fi
# 登录HuggingFace (使用环境变量方式避免交互问题) export HUGGING_FACE_HUB_TOKEN=$HF_TOKEN
# 同步函数 sync_data() { while true; do echo "Starting sync process at $(date)" # 创建临时压缩文件 cd /app timestamp=$(date +%Y%m%d_%H%M%S) backup_file="backup_${timestamp}.tar.gz" tar -czf "/tmp/${backup_file}" data/ python3 -c " from huggingface_hub import HfApi import os def manage_backups(api, repo_id, max_files=2): files = api.list_repo_files(repo_id=repo_id, repo_type='dataset') backup_files = [f for f in files if f.startswith('backup_') and f.endswith('.tar.gz')] backup_files.sort() if len(backup_files) >= max_files: files_to_delete = backup_files[:(len(backup_files) - max_files + 1)] for file_to_delete in files_to_delete: try: api.delete_file(path_in_repo=file_to_delete, repo_id=repo_id, repo_type='dataset') print(f'Deleted old backup: {file_to_delete}') except Exception as e: print(f'Error deleting {file_to_delete}: {str(e)}') try: api = HfApi() api.upload_file( path_or_fileobj='/tmp/${backup_file}', path_in_repo='${backup_file}', repo_id='${DATASET_ID}', repo_type='dataset' ) print('Backup uploaded successfully') manage_backups(api, '${DATASET_ID}') except Exception as e: print(f'Backup failed: {str(e)}') " # 清理临时文件 rm -f "/tmp/${backup_file}" # 设置同步间隔 SYNC_INTERVAL=${SYNC_INTERVAL:-72000} echo "Next sync in ${SYNC_INTERVAL} seconds..." sleep $SYNC_INTERVAL done }
# 恢复函数 restore_latest() { echo "Attempting to restore latest backup..." python3 -c " try: from huggingface_hub import HfApi import os api = HfApi() files = api.list_repo_files('${DATASET_ID}', repo_type='dataset') backup_files = [f for f in files if f.startswith('backup_') and f.endswith('.tar.gz')] if backup_files: latest = sorted(backup_files)[-1] api.hf_hub_download( repo_id='${DATASET_ID}', filename=latest, repo_type='dataset', local_dir='/tmp' ) os.system(f'tar -xzf /tmp/{latest} -C /app') os.remove(f'/tmp/{latest}') print(f'Restored from {latest}') else: print('No backup found') except Exception as e: print(f'Restore failed: {str(e)}') " }
# 主程序 ( # 尝试恢复 restore_latest # 启动同步进程 sync_data & # 启动主应用 exec python main.py ) 2>&1 | tee -a /app/data/backup.log
|
再次重复操作,文件名为Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| FROM lanol/filecodebox:beta
RUN apt-get update && apt-get install -y \ python3-pip \ git \ && rm -rf /var/lib/apt/lists/*
RUN pip3 install --no-cache-dir huggingface_hub datasets
RUN useradd -m -u 1000 user
WORKDIR /app
ENV HOME=/home/user \ PATH=/home/user/.local/bin:$PATH \ HF_HOME=/app/data/hf_cache \ PYTHONUNBUFFERED=1
RUN mkdir -p /app/data && \ chown -R user:user /app/data
COPY sync_data.sh /app/ RUN chmod +x /app/sync_data.sh && \ chown user:user /app/sync_data.sh
USER user
EXPOSE 12345
ENTRYPOINT ["/app/sync_data.sh"]
|
然后我们转到Setting选项卡,找到Variables and secrets
单击New Secret,并将下面的值键入
- DATASET_ID 存储库设置 步骤中的值,为用户名/存储库ID
- HF_TOKEN 获取授权Key 步骤中的值,为hf-xxxxxxxx格式
- SYNC_INTERVAL 备份间隔时间,以秒为单位,推荐3600
然后我们的项目就可以顺利的跑起来了