Spaces:
Running
Running
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"]
|