Spaces:
Running
Running
| FROM ymlisoft/kkfileview | |
| USER root | |
| RUN apt-get update && apt-get install -y xvfb python3 && rm -rf /var/lib/apt/lists/* | |
| ENV SERVER_PORT=8012 | |
| ENV KKFILEVIEW_SECURITY_TRUST_HOST=default | |
| ENV ACCESS_TOKEN=your-secret-token-here | |
| # 创建 Token 验证脚本(添加更多日志) | |
| RUN printf '#!/usr/bin/env python3\n\ | |
| import http.server\n\ | |
| import socketserver\n\ | |
| import urllib.request\n\ | |
| import os\n\ | |
| import sys\n\ | |
| from urllib.parse import urlparse, parse_qs\n\ | |
| \n\ | |
| # 强制立即输出(不缓冲)\n\ | |
| sys.stdout = os.fdopen(sys.stdout.fileno(), "w", buffering=1)\n\ | |
| sys.stderr = os.fdopen(sys.stderr.fileno(), "w", buffering=1)\n\ | |
| \n\ | |
| PORT = 7860\n\ | |
| BACKEND = "http://127.0.0.1:8012"\n\ | |
| TOKEN = os.getenv("ACCESS_TOKEN", "changeme")\n\ | |
| \n\ | |
| print(f"[TOKEN_PROXY] Starting on port {PORT}", flush=True)\n\ | |
| print(f"[TOKEN_PROXY] Backend: {BACKEND}", flush=True)\n\ | |
| print(f"[TOKEN_PROXY] Token configured: {TOKEN[:5]}...", flush=True)\n\ | |
| \n\ | |
| class TokenHandler(http.server.SimpleHTTPRequestHandler):\n\ | |
| def log_message(self, format, *args):\n\ | |
| print(f"[TOKEN_PROXY] {format % args}", flush=True)\n\ | |
| \n\ | |
| def do_GET(self):\n\ | |
| parsed = urlparse(self.path)\n\ | |
| params = parse_qs(parsed.query)\n\ | |
| \n\ | |
| provided_token = params.get("token", [""])[0]\n\ | |
| \n\ | |
| if provided_token != TOKEN:\n\ | |
| print(f"[TOKEN_PROXY] Access denied - invalid token", flush=True)\n\ | |
| self.send_response(403)\n\ | |
| self.send_header("Content-type", "text/html")\n\ | |
| self.end_headers()\n\ | |
| self.wfile.write(b"<h1>Access Denied</h1><p>Please provide valid token in URL: ?token=YOUR_TOKEN</p>")\n\ | |
| return\n\ | |
| \n\ | |
| print(f"[TOKEN_PROXY] Valid token - forwarding request", flush=True)\n\ | |
| url = BACKEND + self.path\n\ | |
| try:\n\ | |
| response = urllib.request.urlopen(url, timeout=30)\n\ | |
| self.send_response(response.getcode())\n\ | |
| for header, value in response.headers.items():\n\ | |
| if header.lower() not in ["connection", "transfer-encoding"]:\n\ | |
| self.send_header(header, value)\n\ | |
| self.end_headers()\n\ | |
| self.wfile.write(response.read())\n\ | |
| except Exception as e:\n\ | |
| print(f"[TOKEN_PROXY] Backend error: {str(e)}", flush=True)\n\ | |
| self.send_error(502, f"Backend error: {str(e)}")\n\ | |
| \n\ | |
| do_POST = do_GET\n\ | |
| \n\ | |
| try:\n\ | |
| with socketserver.TCPServer(("", PORT), TokenHandler) as httpd:\n\ | |
| print(f"[TOKEN_PROXY] Server running successfully!", flush=True)\n\ | |
| print(f"[TOKEN_PROXY] Access URL: http://localhost:{PORT}/onlinePreview?url=YOUR_FILE&token={TOKEN}", flush=True)\n\ | |
| httpd.serve_forever()\n\ | |
| except Exception as e:\n\ | |
| print(f"[TOKEN_PROXY] FATAL ERROR: {str(e)}", flush=True)\n\ | |
| import traceback\n\ | |
| traceback.print_exc()\n\ | |
| sys.exit(1)\n' > /token_check.py && \ | |
| chmod +x /token_check.py | |
| # 启动脚本(添加更多调试) | |
| RUN printf '#!/bin/bash\n\ | |
| set -e\n\ | |
| \n\ | |
| echo "=== Starting kkFileView with Token Auth ==="\n\ | |
| echo "Step 1: Starting Xvfb..."\n\ | |
| Xvfb :99 -screen 0 1024x768x24 &\n\ | |
| XVFB_PID=$!\n\ | |
| export DISPLAY=:99\n\ | |
| echo "Xvfb started with PID: $XVFB_PID"\n\ | |
| sleep 2\n\ | |
| \n\ | |
| echo ""\n\ | |
| echo "Step 2: Starting kkFileView backend on port 8012..."\n\ | |
| /opt/kkFileView/bin/kkFileView --server.port=8012 &\n\ | |
| KKFILEVIEW_PID=$!\n\ | |
| echo "kkFileView started with PID: $KKFILEVIEW_PID"\n\ | |
| \n\ | |
| echo ""\n\ | |
| echo "Step 3: Waiting for backend to be ready..."\n\ | |
| for i in {1..30}; do\n\ | |
| if curl -s http://127.0.0.1:8012 > /dev/null 2>&1; then\n\ | |
| echo "Backend is ready!"\n\ | |
| break\n\ | |
| fi\n\ | |
| echo "Waiting... ($i/30)"\n\ | |
| sleep 1\n\ | |
| done\n\ | |
| \n\ | |
| echo ""\n\ | |
| echo "Step 4: Starting Token Auth Proxy on port 7860..."\n\ | |
| echo "Python version: $(python3 --version)"\n\ | |
| echo ""\n\ | |
| python3 -u /token_check.py\n' > /start.sh && \ | |
| chmod +x /start.sh | |
| EXPOSE 7860 | |
| CMD ["/start.sh"] | |