rikunarita commited on
Commit
17d86c5
·
verified ·
1 Parent(s): 121ba4c

Update entrypoint.sh

Browse files
Files changed (1) hide show
  1. entrypoint.sh +52 -68
entrypoint.sh CHANGED
@@ -1,89 +1,73 @@
1
  #!/bin/bash
 
 
2
  set -e
3
 
4
  echo "🚀 Starting custom VSCode environment..."
5
 
 
6
  # 1. 永続ストレージ (/data) のセットアップ
 
 
7
  if [ -d "/data" ]; then
8
- echo "💾 Persistent storage detected at /data"
9
- mkdir -p /data/User /data/extensions /data/workspace
10
- mkdir -p /home/user/.local/share /home/user/.config
11
- [ ! -L /home/user/.local/share/code-server ] && ln -s /data/extensions /home/user/.local/share/code-server
12
- [ ! -L /home/user/.config/code-server ] && ln -s /data/User /home/user/.config/code-server
 
 
 
 
 
 
 
 
 
 
 
 
 
 
13
  WORKING_DIR="/data/workspace"
14
  else
15
  echo "⚠️ No persistent storage found. Using ephemeral storage."
16
  WORKING_DIR="/home/user"
17
  fi
18
 
 
19
  # 2. SQLite データベースの準備
 
 
20
  DB_PATH="$WORKING_DIR/user_data.sqlite"
 
21
  if [ ! -f "$DB_PATH" ]; then
 
 
22
  sqlite3 "$DB_PATH" "CREATE TABLE IF NOT EXISTS system_logs (id INTEGER PRIMARY KEY, message TEXT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP);"
 
 
 
 
23
  fi
24
 
25
- # 3. リバースプロキシ (proxy.py) の作成
26
- # 404エラーを防ぐために、ファイルパスを明示的に指定するように修正したよ
27
- cat << EOF > /home/user/proxy.py
28
- import http.server
29
- import http.client
30
- import socketserver
31
- import urllib.parse
32
- import os
33
-
34
- class ProxyHandler(http.server.SimpleHTTPRequestHandler):
35
- def do_GET(self):
36
- query = urllib.parse.urlparse(self.path).query
37
- # VSCodeへの転送条件
38
- if 'app=vscode' in query or any(self.path.startswith(p) for p in ['/static', '/vscode', '/webview', '/healthz']):
39
- self.proxy_request("127.0.0.1", 8080)
40
- else:
41
- # 案内ページを強制的に表示
42
- self.show_landing_page()
43
 
44
- def do_POST(self):
45
- self.proxy_request("127.0.0.1", 8080)
46
-
47
- def show_landing_page(self):
48
- # landing.html を探して読み込む
49
- path = "/home/user/landing.html"
50
- if os.path.exists(path):
51
- self.send_response(200)
52
- self.send_header("Content-type", "text/html")
53
- self.end_headers()
54
- with open(path, 'rb') as f:
55
- self.wfile.write(f.read())
56
- else:
57
- self.send_error(404, f"landing.html not found at {path}")
58
-
59
- def proxy_request(self, host, port):
60
- try:
61
- content_length = int(self.headers.get('Content-Length', 0))
62
- body = self.rfile.read(content_length) if content_length > 0 else None
63
- conn = http.client.HTTPConnection(host, port, timeout=15)
64
- headers = {k: v for k, v in self.headers.items()}
65
- conn.request(self.command, self.path, body, headers)
66
- res = conn.getresponse()
67
- self.send_response(res.status)
68
- for k, v in res.getheaders():
69
- self.send_header(k, v)
70
- self.end_headers()
71
- self.wfile.write(res.read())
72
- except Exception as e:
73
- self.send_error(502, f"VSCode is starting... Please refresh in 10 seconds. ({e})")
74
-
75
- print("✅ Gateway Proxy starting...")
76
- # ポートを掴んで起動
77
- socketserver.TCPServer(("0.0.0.0", 7860), ProxyHandler).serve_forever()
78
- EOF
79
-
80
- # 4. 実行開始
81
- echo "💻 Launching VSCode Server (Internal: 8080)..."
82
- export PASSWORD=${PASSWORD:-"changeme123"}
83
-
84
- # VSCodeをバックグラウンドで起動
85
- code-server --bind-addr 127.0.0.1:8080 --auth password --disable-telemetry "$WORKING_DIR" &
86
 
87
- # プロキシを起動
88
- echo "🌐 Opening the gateway on 7860..."
89
- python3 /home/user/proxy.py
 
 
 
 
 
 
 
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"