| #!/bin/bash |
|
|
| |
| MUSIC_DIR=${MUSIC_DIR:-/music} |
| DATASET_MUSIC_NAME=${DATASET_MUSIC_NAME:-"your-username/music-dataset"} |
| MUSIC_TOKEN=${MUSIC_TOKEN:-""} |
| BACKUP_DATASET_ID=${BACKUP_DATASET_ID:-"your-username/navidrome-backup"} |
| BACKUP_INTERVAL=${BACKUP_INTERVAL:-3600} |
|
|
| echo "[INFO] Starting Navidrome setup" |
|
|
| |
| mkdir -p ${MUSIC_DIR} |
| mkdir -p /data/cache |
| mkdir -p /.cache |
| chmod -R 755 ${MUSIC_DIR} |
| chmod -R 755 /data |
| chmod -R 755 /.cache |
|
|
| |
| source /venv/bin/activate |
|
|
| |
| if [ -n "$BACKUP_DATASET_ID" ] && [ -n "$MUSIC_TOKEN" ]; then |
| echo "[INFO] Attempting to restore from backup..." |
| python /backup.py download "$MUSIC_TOKEN" "$BACKUP_DATASET_ID" "/data" |
| fi |
|
|
| |
| if [ -n "$DATASET_MUSIC_NAME" ] && [ -n "$MUSIC_TOKEN" ]; then |
| echo "[INFO] Downloading music files from Hugging Face Dataset..." |
| python -c " |
| from huggingface_hub import snapshot_download |
| import os |
| import shutil |
| # 设置环境变量 |
| os.environ['HF_TOKEN'] = '${MUSIC_TOKEN}' |
| music_dir = '${MUSIC_DIR}' |
| dataset_name = '${DATASET_MUSIC_NAME}' |
| try: |
| # 确保缓存目录存在并有正确权限 |
| os.makedirs('/.cache', exist_ok=True) |
| |
| # 下载数据集 |
| print(f'Downloading dataset {dataset_name} to {music_dir}') |
| snapshot_download( |
| repo_id=dataset_name, |
| repo_type='dataset', |
| local_dir=music_dir, |
| token=os.environ['HF_TOKEN'] |
| ) |
| print('Download completed successfully') |
| except Exception as e: |
| print(f'Error downloading dataset: {str(e)}') |
| # 创建测试文件确保目录不为空 |
| with open(os.path.join(music_dir, 'test.txt'), 'w') as f: |
| f.write('This is a test file') |
| " |
| fi |
|
|
| |
| echo "[INFO] Checking music directory..." |
| ls -la ${MUSIC_DIR} |
|
|
| |
| backup_data() { |
| while true; do |
| echo "[INFO] Starting backup process $(date)" |
| |
| if [ -d "/data" ]; then |
| echo "[INFO] Backing up Navidrome data to HuggingFace..." |
| python /backup.py upload "$MUSIC_TOKEN" "$BACKUP_DATASET_ID" "/data" |
| else |
| echo "[WARNING] Data directory does not exist, skipping backup..." |
| fi |
| |
| echo "[INFO] Next backup in ${BACKUP_INTERVAL} seconds..." |
| sleep $BACKUP_INTERVAL |
| done |
| } |
|
|
| |
| if [ -n "$BACKUP_DATASET_ID" ] && [ -n "$MUSIC_TOKEN" ]; then |
| echo "[INFO] Starting backup process with dataset: ${BACKUP_DATASET_ID}" |
| backup_data & |
| else |
| echo "[WARNING] Backup disabled. Set BACKUP_DATASET_ID and MUSIC_TOKEN to enable." |
| fi |
|
|
| |
| NAVIDROME_PATH=$(which navidrome || find /app -name navidrome -type f 2>/dev/null | head -1) |
|
|
| if [ -z "$NAVIDROME_PATH" ]; then |
| echo "[ERROR] Could not find navidrome executable" |
| exit 1 |
| else |
| echo "[INFO] Found navidrome at: $NAVIDROME_PATH" |
| |
| echo "[INFO] Starting Navidrome..." |
| exec $NAVIDROME_PATH |
| fi |