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"
Please provide valid token in URL: ?token=YOUR_TOKEN
")\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"]