rikunarita commited on
Commit
3a71d4c
·
verified ·
1 Parent(s): ad1c947

Update entrypoint.sh

Browse files
Files changed (1) hide show
  1. entrypoint.sh +66 -58
entrypoint.sh CHANGED
@@ -1,73 +1,81 @@
1
  #!/bin/bash
2
-
3
- # エラーが出たら止まるように設定
4
  set -e
5
 
6
- echo "🚀 Starting custom VSCode environment..."
7
-
8
- # ---------------------------------------------------------
9
- # 1. 永続ストレージ (/data) のセットアップ
10
- # ---------------------------------------------------------
11
- # /data フォルダが存在するか確認(Persistent Storageが有効なら存在する)
12
  if [ -d "/data" ]; then
13
- echo "💾 Persistent storage detected provided at /data"
14
-
15
- # ユーザー設定や拡張機能を保存するフォルダを /data 内に作成
16
- mkdir -p /data/User
17
- mkdir -p /data/extensions
18
- mkdir -p /data/workspace
19
-
20
- # 本来の保存場所から /data へリンクを貼る(これでデータが永続化される!)
21
- # .local/share/code-server は拡張機能など
22
- mkdir -p /home/user/.local/share
23
- rm -rf /home/user/.local/share/code-server
24
- ln -s /data/extensions /home/user/.local/share/code-server
25
-
26
- # .config/code-server は設定ファイルなど
27
- mkdir -p /home/user/.config
28
- rm -rf /home/user/.config/code-server
29
- ln -s /data/User /home/user/.config/code-server
30
-
31
- # ワークスペース(作業場)を /data/workspace に設定
32
  WORKING_DIR="/data/workspace"
33
  else
34
- echo "⚠️ No persistent storage found. Using ephemeral storage."
35
  WORKING_DIR="/home/user"
36
  fi
37
 
38
- # ---------------------------------------------------------
39
- # 2. SQLite データベースの準備
40
- # ---------------------------------------------------------
41
- # ユーザーごとのデータを保存するためのSQLite DBをセットアップ
42
  DB_PATH="$WORKING_DIR/user_data.sqlite"
43
-
44
  if [ ! -f "$DB_PATH" ]; then
45
- echo "📦 Initializing SQLite database at $DB_PATH..."
46
- # 新規作成時にテーブルを作っておく(例としてusersテーブルを作成)
47
- sqlite3 "$DB_PATH" "CREATE TABLE IF NOT EXISTS system_logs (id INTEGER PRIMARY KEY, message TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP);"
48
- sqlite3 "$DB_PATH" "INSERT INTO system_logs (message) VALUES ('System initialized');"
49
- echo "✅ SQLite database created."
50
- else
51
- echo "📂 SQLite database found. Ready to use."
52
  fi
53
 
54
- # ---------------------------------------------------------
55
- # 3. code-server (VSCode) の起動
56
- # ---------------------------------------------------------
57
- echo "💻 Launching VSCode Server on port 7860..."
58
 
59
- # PASSWORD環境変数が設定されていない場合のデフォル(必ずSpaceのSettingsで設定してね!)
60
- if [ -z "$PASSWORD" ]; then
61
- export PASSWORD="changeme123"
62
- echo "⚠️ WARNING: No password set. Using default: 'changeme123'"
63
- fi
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
64
 
65
- # VSCodeを起動
66
- # --bind-addr: 外部からアクセスできるようにする
67
- # --auth: パスワード認証を有効にする
68
- # --user-data-dir: 設定ファイルの場所を指定(リンク済みだが念のため)
69
- exec code-server \
70
- --bind-addr 0.0.0.0:7860 \
71
- --auth password \
72
- --disable-telemetry \
73
- "$WORKING_DIR"
 
1
  #!/bin/bash
 
 
2
  set -e
3
 
4
+ # --- 永続ストレージ / SQLite の設定 (前と同じなので省略せず書くね) ---
 
 
 
 
 
5
  if [ -d "/data" ]; then
6
+ mkdir -p /data/User /data/extensions /data/workspace
7
+ mkdir -p /home/user/.local/share /home/user/.config
8
+ [ ! -L /home/user/.local/share/code-server ] && ln -s /data/extensions /home/user/.local/share/code-server
9
+ [ ! -L /home/user/.config/code-server ] && ln -s /data/User /home/user/.config/code-server
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
10
  WORKING_DIR="/data/workspace"
11
  else
 
12
  WORKING_DIR="/home/user"
13
  fi
14
 
15
+ # SQLite初期化
 
 
 
16
  DB_PATH="$WORKING_DIR/user_data.sqlite"
 
17
  if [ ! -f "$DB_PATH" ]; then
18
+ sqlite3 "$DB_PATH" "CREATE TABLE IF NOT EXISTS system_logs (id INTEGER PRIMARY KEY, message TEXT);"
 
 
 
 
 
 
19
  fi
20
 
21
+ # --- 案内ページ vs VSCode の切り替えロジック ---
 
 
 
22
 
23
+ # Hugging Faceは常にポー7860を監視している
24
+ # code-serverをそのまま起動すると即ログイン画面になるので、
25
+ # フロントに簡単な「案内用」を挟む仕組みを作る。
26
+
27
+ echo "🔧 Starting Gateway Service..."
28
+
29
+ # PASSWORD設定の確認
30
+ export PASSWORD=${PASSWORD:-"default_password_123"}
31
+
32
+ # VSCode本体をバックグラウンドで(ポート8080で)起動しておく
33
+ code-server --bind-addr 127.0.0.1:8080 --auth password --disable-telemetry "$WORKING_DIR" &
34
+
35
+ # VSCodeが立ち上がるまで少し待つ
36
+ sleep 3
37
+
38
+ # ここで「リバースプロキシ」という技を使うよ
39
+ # Pythonを使って、アクセスしてきた人に「案内」か「VSCode」を振り分ける
40
+ cat << EOF > proxy.py
41
+ import http.server
42
+ import http.client
43
+ import socketserver
44
+ import urllib.parse
45
+
46
+ class ProxyHandler(http.server.SimpleHTTPRequestHandler):
47
+ def do_GET(self):
48
+ query = urllib.parse.urlparse(self.path).query
49
+ # URLに app=vscode が入っていれば、後ろで動いてるVSCode(8080)に繋ぐ
50
+ if 'app=vscode' in query or self.path.startswith('/static') or self.path.startswith('/vscode'):
51
+ self.proxy_request("127.0.0.1", 8080)
52
+ else:
53
+ # 入っていなければ案内ページを表示
54
+ self.path = '/landing.html'
55
+ return http.server.SimpleHTTPRequestHandler.do_GET(self)
56
+
57
+ def do_POST(self):
58
+ # ログインフォームなどのPOSTリクエストもVSCodeに転送
59
+ self.proxy_request("127.0.0.1", 8080)
60
+
61
+ def proxy_request(self, host, port):
62
+ content_length = int(self.headers.get('Content-Length', 0))
63
+ body = self.rfile.read(content_length) if content_length > 0 else None
64
+
65
+ conn = http.client.HTTPConnection(host, port)
66
+ headers = {k: v for k, v in self.headers.items()}
67
+ # ホストヘッダーなどを適切に書き換えないと動かない場合がある
68
+ conn.request(self.command, self.path, body, headers)
69
+
70
+ res = conn.getresponse()
71
+ self.send_response(res.status)
72
+ for k, v in res.getheaders():
73
+ self.send_header(k, v)
74
+ self.end_headers()
75
+ self.wfile.write(res.read())
76
+
77
+ print("Proxy running on port 7860...")
78
+ socketserver.TCPServer(("0.0.0.0", 7860), ProxyHandler).serve_forever()
79
+ EOF
80
 
81
+ python3 proxy.py