File size: 3,522 Bytes
efe92b5
e4956d2
919170c
bbf8af3
4d8577b
459e040
 
 
 
4d8577b
e085d41
 
 
4d8577b
 
919170c
e085d41
 
 
 
 
0c799ac
e085d41
 
e4956d2
6f98dda
e085d41
 
 
 
4d8577b
e085d41
 
 
4d8577b
e085d41
 
4d8577b
e085d41
 
 
 
 
 
 
 
 
4d8577b
 
e085d41
 
 
 
 
459e040
e085d41
e7e4e66
4d8577b
0c799ac
ae0ce11
459e040
e085d41
459e040
e085d41
 
 
50ec61c
e085d41
459e040
 
e085d41
4d8577b
b39ad01
0c799ac
459e040
ae0ce11
e085d41
4d8577b
e085d41
 
50ec61c
e085d41
50ec61c
e085d41
50ec61c
ae0ce11
e085d41
 
 
b9de94c
e085d41
 
 
 
 
 
 
 
 
 
 
4d8577b
e085d41
b9de94c
 
e085d41
 
 
 
 
fc0cce5
 
0f0189d
e085d41
 
459e040
19c209b
e4cf850
4d8577b
 
 
 
 
e4cf850
 
e085d41
 
9420c67
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
FROM ymlisoft/kkfileview

USER root

# 1. 安装必要依赖
RUN apt-get update && apt-get install -y \
    nginx \
    apache2-utils \
    xvfb \
    curl \
    libfreetype6 \
    fontconfig \
    fonts-wqy-zenhei \
    && rm -rf /var/lib/apt/lists/* \
    && fc-cache -fv

# 2. 环境变量配置
ENV SERVER_PORT=8012
ENV KKFILEVIEW_SECURITY_TRUST_HOST=default
ENV AUTH_USERNAME=admin
ENV AUTH_PASSWORD=yourpassword

# 3. JVM 配置
ENV JAVA_OPTS="-Dsun.java2d.fontpath=/usr/share/fonts -Djava.awt.headless=true"

# 4. Nginx 配置
RUN rm -rf /etc/nginx/sites-enabled/* /etc/nginx/conf.d/* && \
    printf 'server {\n\
    listen 7860 default_server;\n\
    server_name _;\n\
    \n\
    # Basic Auth\n\
    auth_basic "Restricted Access";\n\
    auth_basic_user_file /etc/nginx/.htpasswd;\n\
    \n\
    # 文件上传限制\n\
    client_max_body_size 500M;\n\
    \n\
    # 反向代理到 KKFileView\n\
    location / {\n\
        proxy_pass http://127.0.0.1:8012;\n\
        proxy_set_header Host $http_host;\n\
        proxy_set_header X-Real-IP $remote_addr;\n\
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n\
        proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;\n\
        proxy_buffering off;\n\
        proxy_read_timeout 300s;\n\
    }\n\
    \n\
    # 健康检查端点)\n\
    location /health {\n\
        auth_basic off;\n\
        return 200 "OK";\n\
        add_header Content-Type text/plain;\n\
    }\n\
}\n' > /etc/nginx/conf.d/kkfileview.conf

# 5. 启动脚本
RUN printf '#!/bin/bash\n\
set -e\n\
\n\
echo "=== Starting KKFileView for HuggingFace Spaces ==="\n\
\n\
# 查找 KKFileView 启动脚本\n\
STARTUP_SCRIPT=$(find /opt -name "startup.sh" -o -name "kkFileView" | grep "bin/" | head -n 1)\n\
KK_ROOT_DIR=$(dirname $(dirname "$STARTUP_SCRIPT"))\n\
\n\
# 生成 htpasswd 文件\n\
htpasswd -cb /etc/nginx/.htpasswd "$AUTH_USERNAME" "$AUTH_PASSWORD"\n\
\n\
# 启动 Xvfb(虚拟显示)\n\
echo "Starting Xvfb..."\n\
Xvfb :99 -screen 0 1024x768x24 >/dev/null 2>&1 &\n\
export DISPLAY=:99\n\
sleep 2\n\
\n\
# 启动 KKFileView\n\
echo "Starting KKFileView on port 8012..."\n\
export JAVA_OPTS="$JAVA_OPTS"\n\
\n\
if [[ "$STARTUP_SCRIPT" == *".sh" ]]; then\n\
    bash "$STARTUP_SCRIPT" 2>&1 | tee /var/log/kkfileview.log &\n\
else\n\
    "$STARTUP_SCRIPT" --server.port=8012 2>&1 | tee /var/log/kkfileview.log &\n\
fi\n\
\n\
# 等待日志文件生成\n\
echo "Waiting for log file..."\n\
LOG_FILE="$KK_ROOT_DIR/log/kkFileView.log"\n\
for i in {1..30}; do\n\
    if [ -f "$LOG_FILE" ]; then\n\
        echo "✓ Found log file: $LOG_FILE"\n\
        tail -f "$LOG_FILE" &\n\
        break\n\
    fi\n\
    sleep 1\n\
done\n\
\n\
# 等待 KKFileView 启动(使用 curl 替代 netstat)\n\
echo "Waiting for KKFileView to start..."\n\
for i in {1..60}; do\n\
    if curl -s http://127.0.0.1:8012 >/dev/null 2>&1; then\n\
        echo "✓ KKFileView is ready on port 8012!"\n\
        break\n\
    fi\n\
    if [ $i -eq 60 ]; then\n\
        echo "ERROR: KKFileView failed to start within 120 seconds"\n\
        exit 1\n\
    fi\n\
    echo "Waiting... ($i/60)"\n\
    sleep 2\n\
done\n\
\n\
# 启动 Nginx\n\
echo "Starting Nginx on port 7860..."\n\
nginx -g "daemon off;"\n' > /start.sh && \
    chmod +x /start.sh

# 6. 健康检查
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
    CMD curl -f http://localhost:7860/health || exit 1

# 7. 暴露端口
EXPOSE 7860

# 8. 启动命令
ENTRYPOINT []
CMD ["/start.sh"]