cwadayi commited on
Commit
82b8e8f
·
verified ·
1 Parent(s): f2db8fb

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +184 -0
app.py ADDED
@@ -0,0 +1,184 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+
3
+ def generate_tutorial_step(step):
4
+ if step == "介紹 (Introduction)":
5
+ return """
6
+ ## 歡迎來到 VS Code 遠端開發互動式教學!
7
+
8
+ 本教學將引導您完成一個非常強大的現代開發流程:**在 Windows 電腦上,透過 VS Code 遠端操作一台 Mac Studio,並在其上運行 Dev Container 進行開發。**
9
+
10
+ **這個流程的優勢:**
11
+ * **發揮硬體性能:** 您的所有運算(編譯、Docker 運行)都在強大的 Mac Studio 上進行。
12
+ * **保持本機純淨:** 您的 Windows 電腦只需安裝 VS Code,不需安裝任何開發工具鏈 (Python, Node, Docker 等)。
13
+ * **環境一致性:** Dev Container 確保您的開發環境 100% 可複製、可攜帶。
14
+
15
+ 👈 請從上面的下拉選單中選擇一個步驟開始。
16
+ """
17
+ elif step == "第 1 步:準備 Mac Studio":
18
+ return """
19
+ ## 第 1 步:在 Mac Studio 上的設定 (只需做一次)
20
+
21
+ 首先,我們需要將 Mac Studio 設定成一台安全的「伺服器」。
22
+
23
+ ### 1. 安裝 Docker Desktop
24
+ 確保您的 Mac Studio 上已經安裝並運行了 [Docker Desktop for Mac](https://www.docker.com/products/docker-desktop/)。這是運行 Dev Container 的基礎。
25
+
26
+ ### 2. 啟用遠端登入 (SSH)
27
+ 這是讓您的 Windows 電腦可以「登入」Mac Studio 的關鍵。
28
+ * 打開 **系統設定** > **一般** > **共享**。
29
+ * 找到 **「遠端登入」** 並將其**開啟**。
30
+ * 系統會顯示您的 SSH 位址,請記下來。它看起來像這樣:
31
+
32
+ ```bash
33
+ # 這是您需要記下的重要資訊
34
+ your_mac_username@192.168.1.10
35
+ ```
36
+ ![SSH Sharing Pane](https://i.imgur.com/3Q5c6sL.png)
37
+ *(這是一張示意圖,顯示 macOS 的共享設定介面)*
38
+
39
+ **✅ 完成這一步後,您的 Mac Studio 就準備好接受來自 Windows 的遠端連線了。**
40
+ """
41
+ elif step == "第 2 步:準備 Windows 電腦":
42
+ return """
43
+ ## 第 2 步:在 Windows 電腦上的設定
44
+
45
+ 您的 Windows 電腦是您的「操作終端」。我們只需要安裝 VS Code 和一個擴充功能。
46
+
47
+ ### 1. 安裝 Visual Studio Code
48
+ 如果尚未安裝,請從官網下載並安裝:[https://code.visualstudio.com/](https://code.visualstudio.com/)
49
+
50
+ ### 2. 安裝「Remote Development」擴充套件包
51
+ 這是實現所有魔法的核心工具。
52
+ * 打開 VS Code。
53
+ * 點擊左側邊欄的「擴充功能」圖示 (四個方塊)。
54
+ * 在搜尋框中輸入 `Remote Development`。
55
+ * 安裝由 **Microsoft** 提供的官方套件包。
56
+
57
+ ![Remote Development Extension](https://i.imgur.com/1g8B1gq.png)
58
+ *(示意圖:在 VS Code 市集中找到此擴充功能)*
59
+
60
+ **✅ 完成這一步後,您的 Windows VS Code 就擁有了遠端連線的能力。**
61
+ """
62
+ elif step == "第 3 步:建立 SSH 連線":
63
+ return """
64
+ ## 第 3 步:從 Windows VS Code 連線到 Mac Studio
65
+
66
+ 現在,我們要建立起 Windows 和 Mac Studio 之間的「橋樑」。
67
+
68
+ 1. **打開遠端總管:** 在 VS Code 左側邊欄點擊新增的「遠端總管」圖示 (看起來像一個螢幕)。
69
+ 2. **新增 SSH 目標:**
70
+ * 在 `SSH` 區塊,點擊「+」號。
71
+ * 在彈出的輸入框中,輸入您在第 1 步記下的 SSH 位址,例如:`ssh your_mac_username@192.168.1.10`
72
+ * 選擇預設的 SSH 設定檔儲存。
73
+ 3. **開始連線:**
74
+ * 在 SSH 目標列表中找到您剛剛新增的 Mac Studio。
75
+ * 點擊右側的「連接」圖示。
76
+ * 一個新的 VS Code 視窗會打開,並要求您輸入 Mac Studio 的登入密碼。
77
+
78
+ **🎉 成功!**
79
+ 當 VS Code 左下角的綠色標籤顯示 **`SSH: 192.168.1.10`** 時,代表您已成功連線。您現在的操作,都將在遠端的 Mac Studio 上執行。
80
+
81
+ ![SSH Status Bar](https://i.imgur.com/u5jJ0f3.png)
82
+ *(示意圖:VS Code 左下角的狀態列)*
83
+ """
84
+ elif step == "第 4 步:啟動 Dev Container":
85
+ return """
86
+ ## 第 4 步:在 Mac Studio 上啟動 Dev Container
87
+
88
+ 連線成功後,我們就可以在遠端的 Mac Studio 上啟動我們的開發環境了。
89
+
90
+ 1. **打開專案資料夾:**
91
+ * 在 VS Code (SSH 模式下) 中,點擊「檔案」>「打開資料夾...」。
92
+ * 選擇您在 Mac Studio 上的專案資料夾。
93
+ 2. **加入 Dev Container 設定:**
94
+ * 按下 `Ctrl + Shift + P` 打開命令面板。
95
+ * 搜尋並選擇 `Dev Containers: Add Dev Container Configuration Files...`。
96
+ * 根據您的專案類型,選擇一個範本 (例如 `Python 3` 或 `Node.js`)。VS Code 會自動建立 `.devcontainer` 資料夾。
97
+ 3. **在容器中重新打開!**
98
+ * 右下角會彈出一個提示,點擊「**Reopen in Container**」。
99
+
100
+ **🚀 終極完成!**
101
+ VS Code 會指示遠端 Mac Studio 上的 Docker 去建立容器。完成後,您的 VS Code 會重新載入。
102
+
103
+ 請看左下角的綠色標籤,它現在會顯示:
104
+ **`Dev Container: [環境名稱] on SSH: 192.168.1.10`**
105
+
106
+ 這代表您已成功:**從 Windows 進入了運行在 Mac Studio 上的 Dev Container!**
107
+ """
108
+ elif step == "最終成果與概念圖":
109
+ return """
110
+ ## 最終成果與概念圖
111
+
112
+ 恭喜您完成了整個設定流程!讓我們用一張圖來總結這個工作模式:
113
+
114
+ ```plaintext
115
+ +------------------------------------------------------------------------------------------------+
116
+ | 您的 Windows 電腦 (操作終點) |
117
+ | |
118
+ | +--------------------------+ |
119
+ | | Visual Studio Code | |
120
+ | | (使用者介面 & SSH 客戶端) | |
121
+ | +--------------------------+ |
122
+ | |
123
+ +-----------------|------------------------------------------------------------------------------+
124
+ |
125
+ | SSH 連線 (透過您的區域網路)
126
+ |
127
+ +-----------------|------------------------------------------------------------------------------+
128
+ | 您的 Mac Studio (運算主機) |
129
+ | |
130
+ | +----------------------+ +-------------------------------------------------------------+ |
131
+ | | SSH 伺服器 | --> | Docker 引擎 | |
132
+ | | (接收指令) | | | |
133
+ | +----------------------+ | +-----------------------------------------------------+ | |
134
+ | | | Dev Container (您的隔離開發環境) | | |
135
+ | | | | | |
136
+ | | | - 您的專案程式碼 | | |
137
+ | | | - Python / Node.js 等工具鏈 | | |
138
+ | | | - VS Code Server & 擴充功能 | | |
139
+ | | | | | |
140
+ | | +-----------------------------------------------------+ | |
141
+ | +-------------------------------------------------------------+ |
142
+ | |
143
+ +------------------------------------------------------------------------------------------------+
144
+
145
+ ```
146
+
147
+ **簡單來說:** 您的鍵盤和螢幕在 Windows 上,但所有的大腦運算和程式執行都在遠端的 Mac Studio 上的容器裡。
148
+ """
149
+ return "請從下拉選單選擇一個步驟。"
150
+
151
+ # Gradio 應用介面設定
152
+ with gr.Blocks(theme=gr.themes.Soft()) as demo:
153
+ gr.Markdown(
154
+ """
155
+ # 💻 VS Code 遠端開發互動式教學 🚀
156
+ ### (Windows 遠端操作 Mac Studio 上的 Dev Container)
157
+ """
158
+ )
159
+ gr.Markdown("這是一個模擬教學,引導您了解整個設定與工作流程。請從下面的下拉選單中選擇您想學習的步驟。")
160
+
161
+ step_selector = gr.Dropdown(
162
+ [
163
+ "介紹 (Introduction)",
164
+ "第 1 步:準備 Mac Studio",
165
+ "第 2 步:準備 Windows 電腦",
166
+ "第 3 步:建立 SSH 連線",
167
+ "第 4 步:啟動 Dev Container",
168
+ "最終成果與概念圖",
169
+ ],
170
+ label="選擇教學步驟",
171
+ value="介紹 (Introduction)"
172
+ )
173
+
174
+ step_output = gr.Markdown()
175
+
176
+ step_selector.change(fn=generate_tutorial_step, inputs=step_selector, outputs=step_output)
177
+
178
+ # 應用啟動時,預先載入第一頁的內容
179
+ demo.load(fn=generate_tutorial_step, inputs=step_selector, outputs=step_output)
180
+
181
+
182
+ if __name__ == "__main__":
183
+ demo.launch()
184
+