dragg2 commited on
Commit
b39ad01
·
verified ·
1 Parent(s): ae0ce11

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +48 -38
Dockerfile CHANGED
@@ -2,13 +2,13 @@ FROM ymlisoft/kkfileview
2
 
3
  USER root
4
 
5
- RUN apt-get update && apt-get install -y xvfb python3 && rm -rf /var/lib/apt/lists/*
6
 
7
  ENV SERVER_PORT=8012
8
  ENV KKFILEVIEW_SECURITY_TRUST_HOST=default
9
  ENV ACCESS_TOKEN=your-secret-token-here
10
 
11
- # 创建 Token 验证脚本(添加更多日志)
12
  RUN printf '#!/usr/bin/env python3\n\
13
  import http.server\n\
14
  import socketserver\n\
@@ -17,7 +17,6 @@ import os\n\
17
  import sys\n\
18
  from urllib.parse import urlparse, parse_qs\n\
19
  \n\
20
- # 强制立即输出(不缓冲)\n\
21
  sys.stdout = os.fdopen(sys.stdout.fileno(), "w", buffering=1)\n\
22
  sys.stderr = os.fdopen(sys.stderr.fileno(), "w", buffering=1)\n\
23
  \n\
@@ -27,30 +26,42 @@ TOKEN = os.getenv("ACCESS_TOKEN", "changeme")\n\
27
  \n\
28
  print(f"[TOKEN_PROXY] Starting on port {PORT}", flush=True)\n\
29
  print(f"[TOKEN_PROXY] Backend: {BACKEND}", flush=True)\n\
30
- print(f"[TOKEN_PROXY] Token configured: {TOKEN[:5]}...", flush=True)\n\
31
  \n\
32
  class TokenHandler(http.server.SimpleHTTPRequestHandler):\n\
33
  def log_message(self, format, *args):\n\
34
- print(f"[TOKEN_PROXY] {format % args}", flush=True)\n\
35
  \n\
36
  def do_GET(self):\n\
37
  parsed = urlparse(self.path)\n\
38
  params = parse_qs(parsed.query)\n\
39
- \n\
40
  provided_token = params.get("token", [""])[0]\n\
41
  \n\
42
  if provided_token != TOKEN:\n\
43
- print(f"[TOKEN_PROXY] Access denied - invalid token", flush=True)\n\
44
  self.send_response(403)\n\
45
- self.send_header("Content-type", "text/html")\n\
46
  self.end_headers()\n\
47
- self.wfile.write(b"<h1>Access Denied</h1><p>Please provide valid token in URL: ?token=YOUR_TOKEN</p>")\n\
 
 
 
 
 
 
 
 
48
  return\n\
49
  \n\
50
- print(f"[TOKEN_PROXY] Valid token - forwarding request", flush=True)\n\
51
  url = BACKEND + self.path\n\
52
  try:\n\
53
- response = urllib.request.urlopen(url, timeout=30)\n\
 
 
 
 
 
54
  self.send_response(response.getcode())\n\
55
  for header, value in response.headers.items():\n\
56
  if header.lower() not in ["connection", "transfer-encoding"]:\n\
@@ -58,57 +69,56 @@ class TokenHandler(http.server.SimpleHTTPRequestHandler):\n\
58
  self.end_headers()\n\
59
  self.wfile.write(response.read())\n\
60
  except Exception as e:\n\
61
- print(f"[TOKEN_PROXY] Backend error: {str(e)}", flush=True)\n\
62
  self.send_error(502, f"Backend error: {str(e)}")\n\
63
  \n\
64
  do_POST = do_GET\n\
65
  \n\
66
  try:\n\
67
- with socketserver.TCPServer(("", PORT), TokenHandler) as httpd:\n\
68
- print(f"[TOKEN_PROXY] Server running successfully!", flush=True)\n\
69
- print(f"[TOKEN_PROXY] Access URL: http://localhost:{PORT}/onlinePreview?url=YOUR_FILE&token={TOKEN}", flush=True)\n\
70
  httpd.serve_forever()\n\
71
  except Exception as e:\n\
72
- print(f"[TOKEN_PROXY] FATAL ERROR: {str(e)}", flush=True)\n\
73
  import traceback\n\
74
  traceback.print_exc()\n\
75
  sys.exit(1)\n' > /token_check.py && \
76
  chmod +x /token_check.py
77
 
78
- # 启动脚本(添加更多调试)
79
  RUN printf '#!/bin/bash\n\
80
  set -e\n\
81
- \n\
82
- echo "=== Starting kkFileView with Token Auth ==="\n\
83
- echo "Step 1: Starting Xvfb..."\n\
84
- Xvfb :99 -screen 0 1024x768x24 &\n\
85
- XVFB_PID=$!\n\
86
  export DISPLAY=:99\n\
87
- echo "Xvfb started with PID: $XVFB_PID"\n\
88
- sleep 2\n\
89
  \n\
90
- echo ""\n\
91
- echo "Step 2: Starting kkFileView backend on port 8012..."\n\
92
- /opt/kkFileView/bin/kkFileView --server.port=8012 &\n\
93
  KKFILEVIEW_PID=$!\n\
94
- echo "kkFileView started with PID: $KKFILEVIEW_PID"\n\
95
  \n\
96
- echo ""\n\
97
- echo "Step 3: Waiting for backend to be ready..."\n\
98
- for i in {1..30}; do\n\
99
- if curl -s http://127.0.0.1:8012 > /dev/null 2>&1; then\n\
100
- echo "Backend is ready!"\n\
101
  break\n\
102
  fi\n\
103
- echo "Waiting... ($i/30)"\n\
 
 
 
 
104
  sleep 1\n\
105
  done\n\
106
  \n\
 
107
  echo ""\n\
108
- echo "Step 4: Starting Token Auth Proxy on port 7860..."\n\
109
- echo "Python version: $(python3 --version)"\n\
110
- echo ""\n\
111
- python3 -u /token_check.py\n' > /start.sh && \
112
  chmod +x /start.sh
113
 
114
  EXPOSE 7860
 
2
 
3
  USER root
4
 
5
+ RUN apt-get update && apt-get install -y xvfb python3 curl && rm -rf /var/lib/apt/lists/*
6
 
7
  ENV SERVER_PORT=8012
8
  ENV KKFILEVIEW_SECURITY_TRUST_HOST=default
9
  ENV ACCESS_TOKEN=your-secret-token-here
10
 
11
+ # 创建 Token 验证脚本
12
  RUN printf '#!/usr/bin/env python3\n\
13
  import http.server\n\
14
  import socketserver\n\
 
17
  import sys\n\
18
  from urllib.parse import urlparse, parse_qs\n\
19
  \n\
 
20
  sys.stdout = os.fdopen(sys.stdout.fileno(), "w", buffering=1)\n\
21
  sys.stderr = os.fdopen(sys.stderr.fileno(), "w", buffering=1)\n\
22
  \n\
 
26
  \n\
27
  print(f"[TOKEN_PROXY] Starting on port {PORT}", flush=True)\n\
28
  print(f"[TOKEN_PROXY] Backend: {BACKEND}", flush=True)\n\
29
+ print(f"[TOKEN_PROXY] Token: {TOKEN[:5]}***", flush=True)\n\
30
  \n\
31
  class TokenHandler(http.server.SimpleHTTPRequestHandler):\n\
32
  def log_message(self, format, *args):\n\
33
+ print(f"[ACCESS] {format % args}", flush=True)\n\
34
  \n\
35
  def do_GET(self):\n\
36
  parsed = urlparse(self.path)\n\
37
  params = parse_qs(parsed.query)\n\
 
38
  provided_token = params.get("token", [""])[0]\n\
39
  \n\
40
  if provided_token != TOKEN:\n\
41
+ print(f"[DENIED] Invalid token from {self.client_address[0]}", flush=True)\n\
42
  self.send_response(403)\n\
43
+ self.send_header("Content-type", "text/html; charset=utf-8")\n\
44
  self.end_headers()\n\
45
+ html = f"""<!DOCTYPE html>\n\
46
+ <html><head><meta charset="utf-8"><title>Access Denied</title></head>\n\
47
+ <body style="font-family: Arial; padding: 50px; text-align: center;">\n\
48
+ <h1>🔒 Access Denied</h1>\n\
49
+ <p>Please provide valid token in URL</p>\n\
50
+ <p><code>?token=YOUR_TOKEN</code></p>\n\
51
+ <p style="color: #666; margin-top: 30px;">Current token: <strong>{provided_token or "(empty)"}</strong></p>\n\
52
+ </body></html>"""\n\
53
+ self.wfile.write(html.encode())\n\
54
  return\n\
55
  \n\
56
+ print(f"[ALLOWED] Valid token - forwarding to backend", flush=True)\n\
57
  url = BACKEND + self.path\n\
58
  try:\n\
59
+ req = urllib.request.Request(url)\n\
60
+ for header in ["User-Agent", "Accept", "Accept-Language"]:\n\
61
+ if header in self.headers:\n\
62
+ req.add_header(header, self.headers[header])\n\
63
+ \n\
64
+ response = urllib.request.urlopen(req, timeout=60)\n\
65
  self.send_response(response.getcode())\n\
66
  for header, value in response.headers.items():\n\
67
  if header.lower() not in ["connection", "transfer-encoding"]:\n\
 
69
  self.end_headers()\n\
70
  self.wfile.write(response.read())\n\
71
  except Exception as e:\n\
72
+ print(f"[ERROR] Backend error: {str(e)}", flush=True)\n\
73
  self.send_error(502, f"Backend error: {str(e)}")\n\
74
  \n\
75
  do_POST = do_GET\n\
76
  \n\
77
  try:\n\
78
+ with socketserver.TCPServer(("0.0.0.0", PORT), TokenHandler) as httpd:\n\
79
+ print(f"[TOKEN_PROXY] Server ready on port {PORT}!", flush=True)\n\
80
+ print(f"[TOKEN_PROXY] Access: https://your-space.hf.space/?token={TOKEN}", flush=True)\n\
81
  httpd.serve_forever()\n\
82
  except Exception as e:\n\
83
+ print(f"[FATAL] {str(e)}", flush=True)\n\
84
  import traceback\n\
85
  traceback.print_exc()\n\
86
  sys.exit(1)\n' > /token_check.py && \
87
  chmod +x /token_check.py
88
 
89
+ # 启动脚本
90
  RUN printf '#!/bin/bash\n\
91
  set -e\n\
92
+ echo "=== kkFileView with Token Auth ==="\n\
93
+ echo ""\n\
94
+ echo "[1/4] Starting Xvfb..."\n\
95
+ Xvfb :99 -screen 0 1024x768x24 >/dev/null 2>&1 &\n\
 
96
  export DISPLAY=:99\n\
97
+ sleep 1\n\
98
+ echo "✓ Xvfb started"\n\
99
  \n\
100
+ echo "[2/4] Starting kkFileView backend..."\n\
101
+ /opt/kkFileView/bin/kkFileView --server.port=8012 >/tmp/kkfileview.log 2>&1 &\n\
 
102
  KKFILEVIEW_PID=$!\n\
103
+ echo "kkFileView PID: $KKFILEVIEW_PID"\n\
104
  \n\
105
+ echo "[3/4] Waiting for backend (max 60s)..."\n\
106
+ for i in {1..60}; do\n\
107
+ if python3 -c "import urllib.request; urllib.request.urlopen('"'"'http://127.0.0.1:8012'"'"', timeout=1)" 2>/dev/null; then\n\
108
+ echo "✓ Backend ready after ${i}s"\n\
 
109
  break\n\
110
  fi\n\
111
+ if [ $i -eq 60 ]; then\n\
112
+ echo "✗ Backend timeout! Showing logs:"\n\
113
+ tail -50 /tmp/kkfileview.log\n\
114
+ exit 1\n\
115
+ fi\n\
116
  sleep 1\n\
117
  done\n\
118
  \n\
119
+ echo "[4/4] Starting Token Proxy..."\n\
120
  echo ""\n\
121
+ exec python3 -u /token_check.py\n' > /start.sh && \
 
 
 
122
  chmod +x /start.sh
123
 
124
  EXPOSE 7860