rikunarita commited on
Commit
cff6fad
·
verified ·
1 Parent(s): 883ddea

Update entrypoint.sh

Browse files
Files changed (1) hide show
  1. entrypoint.sh +41 -55
entrypoint.sh CHANGED
@@ -8,20 +8,10 @@ echo "🚀 Starting custom VSCode environment..."
8
  # ---------------------------------------------------------
9
  if [ -d "/data" ]; then
10
  echo "💾 Persistent storage detected at /data"
11
-
12
- mkdir -p /data/User
13
- mkdir -p /data/extensions
14
- mkdir -p /data/workspace
15
-
16
- # 設定ファイルの保存先を /data にリンク
17
- mkdir -p /home/user/.local/share
18
- rm -rf /home/user/.local/share/code-server
19
- ln -s /data/extensions /home/user/.local/share/code-server
20
-
21
- mkdir -p /home/user/.config
22
- rm -rf /home/user/.config/code-server
23
- ln -s /data/User /home/user/.config/code-server
24
-
25
  WORKING_DIR="/data/workspace"
26
  else
27
  echo "⚠️ No persistent storage found. Using ephemeral storage."
@@ -33,74 +23,70 @@ fi
33
  # ---------------------------------------------------------
34
  DB_PATH="$WORKING_DIR/user_data.sqlite"
35
  if [ ! -f "$DB_PATH" ]; then
36
- echo "📦 Initializing SQLite database..."
37
  sqlite3 "$DB_PATH" "CREATE TABLE IF NOT EXISTS system_logs (id INTEGER PRIMARY KEY, message TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP);"
38
- sqlite3 "$DB_PATH" "INSERT INTO system_logs (message) VALUES ('System initialized');"
39
  fi
40
 
41
  # ---------------------------------------------------------
42
- # 3. code-server (VSCode) をバックグラウンドで起動
43
  # ---------------------------------------------------------
44
- # ポート 8080 してProxy(7860) とぶつからないようにす
45
- echo "💻 Launching VSCode Server on internal port 8080..."
46
-
47
- export PASSWORD=${PASSWORD:-"changeme123"}
48
-
49
- code-server \
50
- --bind-addr 127.0.0.1:8080 \
51
- --auth password \
52
- --disable-telemetry \
53
- "$WORKING_DIR" &
54
-
55
- # VSCodeが立ち上がるまで少し待つ
56
- sleep 5
57
-
58
- # ---------------------------------------------------------
59
- # 4. 案内ページ 兼 リバースプロキシ (proxy.py) の作成
60
- # ---------------------------------------------------------
61
- # 7860番ポートで待ち受け、アクセス内容によって案内かVSCodeかを振り分ける
62
  cat << EOF > proxy.py
63
  import http.server
64
  import http.client
65
  import socketserver
66
  import urllib.parse
 
67
 
68
  class ProxyHandler(http.server.SimpleHTTPRequestHandler):
69
  def do_GET(self):
70
  query = urllib.parse.urlparse(self.path).query
71
- # URLに app=vscode 含まれているか、VSCodeが必要とするリソースへのアクセスなら転送
72
  if 'app=vscode' in query or any(self.path.startswith(p) for p in ['/static', '/vscode', '/webview', '/healthz']):
73
  self.proxy_request("127.0.0.1", 8080)
74
  else:
75
- # それ以外は案内ページを表示
76
  self.path = '/landing.html'
77
  return http.server.SimpleHTTPRequestHandler.do_GET(self)
78
 
79
  def do_POST(self):
80
- # ログイン時のパスワード送信などはPOSTなので常に転送
81
  self.proxy_request("127.0.0.1", 8080)
82
 
83
  def proxy_request(self, host, port):
84
- content_length = int(self.headers.get('Content-Length', 0))
85
- body = self.rfile.read(content_length) if content_length > 0 else None
86
-
87
- conn = http.client.HTTPConnection(host, port)
88
- headers = {k: v for k, v in self.headers.items()}
89
- conn.request(self.command, self.path, body, headers)
90
-
91
- res = conn.getresponse()
92
- self.send_response(res.status)
93
- for k, v in res.getheaders():
94
- self.send_header(k, v)
95
- self.end_headers()
96
- self.wfile.write(res.read())
 
97
 
98
- print("✅ Gateway Proxy running on port 7860")
99
- socketserver.TCPServer(("0.0.0.0", 7860), ProxyHandler).serve_forever()
 
 
100
  EOF
101
 
102
  # ---------------------------------------------------------
103
- # 5. プロキシサーバーの起動
104
  # ---------------------------------------------------------
105
- echo "🌐 Opening the gateway..."
 
 
 
 
 
 
 
 
 
 
 
 
 
106
  python3 proxy.py
 
8
  # ---------------------------------------------------------
9
  if [ -d "/data" ]; then
10
  echo "💾 Persistent storage detected at /data"
11
+ mkdir -p /data/User /data/extensions /data/workspace
12
+ mkdir -p /home/user/.local/share /home/user/.config
13
+ [ ! -L /home/user/.local/share/code-server ] && ln -s /data/extensions /home/user/.local/share/code-server
14
+ [ ! -L /home/user/.config/code-server ] && ln -s /data/User /home/user/.config/code-server
 
 
 
 
 
 
 
 
 
 
15
  WORKING_DIR="/data/workspace"
16
  else
17
  echo "⚠️ No persistent storage found. Using ephemeral storage."
 
23
  # ---------------------------------------------------------
24
  DB_PATH="$WORKING_DIR/user_data.sqlite"
25
  if [ ! -f "$DB_PATH" ]; then
 
26
  sqlite3 "$DB_PATH" "CREATE TABLE IF NOT EXISTS system_logs (id INTEGER PRIMARY KEY, message TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP);"
 
27
  fi
28
 
29
  # ---------------------------------------------------------
30
+ # 3. 案内ページ 兼 リバースプロキシ (proxy.py) の作成
31
  # ---------------------------------------------------------
32
+ # 7860番確保するためにスクリプトを先書き出
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
33
  cat << EOF > proxy.py
34
  import http.server
35
  import http.client
36
  import socketserver
37
  import urllib.parse
38
+ import sys
39
 
40
  class ProxyHandler(http.server.SimpleHTTPRequestHandler):
41
  def do_GET(self):
42
  query = urllib.parse.urlparse(self.path).query
43
+ # パラメータるか、VSCodeが必要とするリソースなら8080へ
44
  if 'app=vscode' in query or any(self.path.startswith(p) for p in ['/static', '/vscode', '/webview', '/healthz']):
45
  self.proxy_request("127.0.0.1", 8080)
46
  else:
 
47
  self.path = '/landing.html'
48
  return http.server.SimpleHTTPRequestHandler.do_GET(self)
49
 
50
  def do_POST(self):
 
51
  self.proxy_request("127.0.0.1", 8080)
52
 
53
  def proxy_request(self, host, port):
54
+ try:
55
+ content_length = int(self.headers.get('Content-Length', 0))
56
+ body = self.rfile.read(content_length) if content_length > 0 else None
57
+ conn = http.client.HTTPConnection(host, port, timeout=10)
58
+ headers = {k: v for k, v in self.headers.items()}
59
+ conn.request(self.command, self.path, body, headers)
60
+ res = conn.getresponse()
61
+ self.send_response(res.status)
62
+ for k, v in res.getheaders():
63
+ self.send_header(k, v)
64
+ self.end_headers()
65
+ self.wfile.write(res.read())
66
+ except Exception as e:
67
+ self.send_error(502, f"VSCode is still starting... Please refresh in a moment. ({e})")
68
 
69
+ print("✅ Gateway Proxy starting on port 7860...")
70
+ # 7860番をここでガッチリ掴む!
71
+ server = socketserver.TCPServer(("0.0.0.0", 7860), ProxyHandler)
72
+ server.serve_forever()
73
  EOF
74
 
75
  # ---------------------------------------------------------
76
+ # 4. 実行開始
77
  # ---------------------------------------------------------
78
+
79
+ # まずは VSCode を 8080 番で、完全に「隠れた状態」で起動する
80
+ echo "💻 Launching VSCode Server in background (Port 8080)..."
81
+ export PASSWORD=${PASSWORD:-"changeme123"}
82
+
83
+ # 重要な変更: --port 8080 を明示的に指定し、bind-addr も 127.0.0.1 に固定
84
+ code-server \
85
+ --bind-addr 127.0.0.1:8080 \
86
+ --auth password \
87
+ --disable-telemetry \
88
+ "$WORKING_DIR" &
89
+
90
+ # VSCode が起動するのを待たずに、すぐにプロキシを起動して 7860 番を確保する!
91
+ echo "🌐 Opening the gateway on 7860..."
92
  python3 proxy.py