File size: 2,965 Bytes
fe991e6
02a085a
 
77ecacf
 
2add0ae
 
 
 
 
63b4e7a
2add0ae
63b4e7a
2add0ae
 
 
4efdfd7
2add0ae
 
63b4e7a
2add0ae
 
63b4e7a
2add0ae
 
63b4e7a
2add0ae
63b4e7a
2add0ae
 
 
63b4e7a
2add0ae
 
 
 
 
 
 
63b4e7a
2add0ae
63b4e7a
2add0ae
63b4e7a
2add0ae
63b4e7a
 
2add0ae
63b4e7a
2add0ae
 
 
 
63b4e7a
 
 
 
 
 
2add0ae
 
63b4e7a
c8145a5
63b4e7a
 
 
 
 
 
 
2add0ae
 
 
63b4e7a
 
2add0ae
63b4e7a
2add0ae
 
 
 
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
FROM openlistteam/openlist:latest
WORKDIR /opt/openlist
USER root
EXPOSE 5244

CMD sh -c "\
    # 1. 启动服务
    ./openlist server & \
    PID=\$!; \
    \
    # 2. 等待服务就绪
    echo '⏳ 正在等待 OpenList 服务启动...'; \
    sleep 8; \
    \
    MAX_RETRIES=10; \
    while ! wget -q --spider http://127.0.0.1:5244/api/public/settings; do \
        sleep 2; \
        MAX_RETRIES=\$((MAX_RETRIES - 1)); \
        if [ \$MAX_RETRIES -le 0 ]; then \
            echo '❌ 错误: 服务启动超时。'; exit 1; \
        fi; \
    done; \
    \
    echo '✅ 服务已就绪!'; \
    \
    # 3. 校验管理员密码
    if [ -z \"\$OPENLIST_ADMIN_PASSWORD\" ]; then \
        echo '❌ 错误: 未配置 OPENLIST_ADMIN_PASSWORD。'; \
        wait \$PID; exit 1; \
    fi; \
    \
    # 4. 获取 Token
    echo '🔑 正在获取 Token...'; \
    RAW_TOKEN=\$(wget -qO- --timeout=5 --post-data=\"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"\$OPENLIST_ADMIN_PASSWORD\\\"}\" \
          --header='Content-Type: application/json' \
          http://127.0.0.1:5244/api/auth/login); \
    \
    TOKEN=\$(echo \$RAW_TOKEN | grep -o '\"token\":\"[^\"]*\"' | cut -d'\"' -f4); \
    \
    # 5. 注入逻辑 (支持原始换行格式)
    if [ -n \"\$TOKEN\" ] && [ \"\${#TOKEN}\" -gt 20 ]; then \
        echo '🚀 登录成功,正在处理存储配置...'; \
        FOUND_VALID=0; \
        \
        for i in 1 2 3 4 5 6 7 8 9 10; do \
            # --- 关键:使用 printenv 获取原始 JSON ---
            JSON_BODY=\$(printenv STORAGE_JSON_\$i); \
            \
            if [ -z \"\$JSON_BODY\" ]; then \
                continue; \
            fi; \
            \
            FOUND_VALID=1; \
            # 将原始 JSON 写入临时文件,确保换行和转义原样保留
            echo \"\$JSON_BODY\" > /tmp/payload.json; \
            \
            if ! grep -q '\"mount_path\"' /tmp/payload.json; then \
                echo \"⚠️ STORAGE_JSON_\$i 格式不完整,已跳过。\"; \
                rm /tmp/payload.json; continue; \
            fi; \
            \
            echo \"📦 正在推送第 \$i 个配置到 API...\"; \
            # 使用 --post-file 直接发送文件内容,避开 Shell 转义
            RES=\$(wget -qO- --timeout=10 --post-file=/tmp/payload.json \
                  --header=\"Content-Type: application/json\" \
                  --header=\"Authorization: \$TOKEN\" \
                  http://127.0.0.1:5244/api/admin/storage/create); \
            \
            echo \"响应内容: \$RES\"; \
            rm /tmp/payload.json; \
            echo ''; \
        done; \
        \
        [ \"\$FOUND_VALID\" -eq 0 ] && echo 'ℹ️ 提示: 未发现有效的存储配置。'; \
        echo '✅ 注入流程处理完毕!'; \
    else \
        echo '❌ 登录失败!内容: ' \${RAW_TOKEN:-'无响应'}; \
    fi; \
    \
    # 维持主进程
    wait \$PID"