↓ Skip to main content

The Joy of Coding Outdoors: A Practical Guide to code-server, Tailscale, and a Tablet

Table of Contents
Oops! This article is currently only available in Traditional Chinese. English translation is coming soon!

前言
#

實際範例圖片

☕ 拋開笨重筆電!解鎖戶外寫程式的終極浪漫:Linux + code-server + Tailscale HTTPS + 平板 實戰指南

想像一下這個畫面:午後微風徐徐,你坐在綠意盎然的戶外咖啡廳,手裡只拿著一台輕便的平板。沒有發熱風扇狂轉的厚重筆電,沒有隨時會沒電的焦慮,但你卻正在遠端使用著強大的 Linux + 你的專案,享受低延遲、流暢的遠端 Coding 體驗!程式碼與開發環境都留在 Linux 伺服器上,平板則透過瀏覽器操作,讓輕便的行動裝置也能擁有完整的開發工作流。

除此之外,這也很適合外出寫 Hugo 部落格文章,本站是 Hugo 架構,部分文章也是我用平板 + Tailscale 炸出來的!

要達成這種神仙級的體驗,我們只需要三個神隊友:

  1. 實體或雲端 Linux 電腦:提供強大運算、執行資源、程式碼儲存空間的後盾。
  2. code-server:打造完全自架(Self-Hosted)的網頁版 VS Code!將熟悉的開發環境一手掌控在自己的伺服器上,搬進瀏覽器裡。
  3. Tailscale + HTTPS:提供免公網 IP、免對外開 Port、自動配置 SSL 憑證的安全極速通道。

這套平板寫程式的方案:

flowchart TD
    A[平板瀏覽器] -->|Tailscale 私有網路| B[Tailscale Serve HTTPS]
    B --> C[Linux 主機]
    C --> D[code-server]
    D --> E[專案檔案]

code-server 的 repo: https://github.com/coder/code-server

為什麼選擇自架網頁版 VS Code?
#

相較於官方的 vscode.dev 或 GitHub Codespaces,自架 code-server 意味著你擁有 100% 的主導權!所有的程式碼專案、擴充套件(Extensions)、專案環境與擴充空間,甚至連執行的環境,都安安全全地躺在妳自己的伺服器上,完全不受第三方平台的資源限制與收費綁定!(⁠๑♡3♡๑⁠)✨

code-server 支援終端機、Git 版本控制及許多 VS Code 擴充套件,也能搭配部分 AI 程式開發工具。不過,擴充套件的相容性、登入方式與功能完整度,仍可能受到發佈平台、版本及授權條件影響,建議依照實際使用需求測試。


接下來,就讓我們一步一步把這個終極行動開發環境搭建起來吧!(⁠◍⁠>⁠ω⁠<⁠◍⁠)💖

第一步:部署 code-server,自架專屬的網頁版 VS Code
#

首先,請登入你的 Linux 雲端或實體主機(例如 Ubuntu / Debian 系統)。

1. 一鍵安裝 code-server
#

開發者提供了非常方便的安裝腳本,打開終端機執行以下指令:

curl -fsSL https://code-server.dev/install.sh | sh

2. 啟動並設定開機自啟
#

安裝完成後,使用 systemctl 讓 code-server 在背景執行並隨開機自動啟動:

# 設定目前使用者的 code-server 服務開機自啟
sudo systemctl enable --now code-server@$USER

3. 修改設定檔(可選)
#

預設情況下,code-server 只會監聽 127.0.0.1:8080,密碼會隨機產生在設定檔中。你可以查看或修改它:

nano ~/.config/code-server/config.yaml
bind-addr: 127.0.0.1:8080
auth: password
password: {生成的密碼}
cert: false

註:因為我們後續會透過 Tailscale 進行反向代理,這裡保持預設監聽 127.0.0.1:8080 即可,既安全又不需要對外暴露連接埠!


第二步:設定 Tailscale 打造安全虛擬網域
#

Tailscale 是一種基於 WireGuard 的 Mesh VPN 技術,能讓你的平板與遠端 Linux 伺服器建立點對點的安全連線,而且通常流量不會經過 Tailscale 伺服器,他們的伺服器只是幫忙牽線,所以相對安全。

Tailscale 請先註冊、設定、連線好所有所需裝置,這裡不多贅述,網路上都有豐富的教學。

1. 在 Linux 伺服器安裝 Tailscale
#

官方一鍵安裝指令:

curl -fsSL https://tailscale.com/install.sh | sh

安裝後啟動 Tailscale 並進行帳號綁定:

sudo tailscale up

此時終端機會顯示一串驗證網址,打開瀏覽器登入你的 Tailscale 帳號完成認證即可!

2. 在平板上安裝 Tailscale App
#

  • 請至 App Store 或 Google Play 下載 Tailscale。
  • 打開 App 並登入與伺服器相同的 Tailscale 帳號。
  • 啟用 VPN 連線,此時妳的平板與 Linux 伺服器就已經進入同一個安全的私人區域網路囉!(⁠≧⁠▽⁠≦⁠)✨

第三步:啟用 Tailscale Serve(輕鬆搞定 HTTPS)
#

code-server 的有些功能、擴充模組會在沒有 https 的連線下無法使用,平板瀏覽器中許多功能(如 PWA 貼上剪貼簿、Websocket 穩定連線、PWA 安裝)都強制要求 HTTPS 環境。所以我們用 Tailscale Serve 反代功能來升級 https。

Tailscale 提供了內建的反向代理的魔法功能(類似 Nginx,但是是在自己的私人網路中),Tailscale 會自己申請 Let’s Encrypt,也不用設定複雜的 Nginx!

1. 開啟 MagicDNS 與 HTTPS 憑證功能
#

前往 Tailscale Admin Console:

  • 確保 MagicDNS 功能已開啟。
  • 在 HTTPS Certificates 選項中點擊啟用(Enable)。

2. 使用 Tailscale Serve 綁定 code-server
#

在 Linux 伺服器上執行以下指令,直接將 code-server 的 8080 連接埠映射到 Tailscale 的安全 HTTPS 網址,為了避免和主機上的其他服務打架,我代理到 5487 端口:

sudo tailscale serve --bg --https=5487 http://127.0.0.1:8080

執行後,Tailscale 會自動為妳申請好 Let’s Encrypt SSL 憑證,並給妳一個專屬網址,例如: https://your-server-name.your-domain.ts.net:5487

注意! 這雖然看起來是個公網的網域,但還是只能在你自己的 Tailscale 虛擬網路裡面存取喔!Tailscale Serve 可以讓你在不必直接向公網開放 code-server 連接埠的情況下,透過 Tailnet 存取 HTTPS 服務。實際可存取的裝置與使用者,仍取決於 Tailscale 網路的存取控制設定,以及伺服器本身的安全配置。!

備註:想關掉反代伺服器請執行:

tailscale serve --https=5487 off

第四步:平板完美體驗設定與戶外姿勢推薦
#

現在,所有的架設設定都搞定啦!(⁠๑♡3♡๑⁠)🎉

1. 平板存取與 PWA 化
#

  1. 在平板上記得開啟 Tailscale App,連線。
  2. 打開平板上的瀏覽器(大部分瀏覽器應該都能正常使用),輸入剛剛獲得的 HTTPS 網址:https://your-server-name.your-domain.ts.net:5487 (這是範例)。
  3. 輸入 config.yaml 中的密碼,熟悉的 VS Code 畫面就出來囉!
    code-server 輸入密碼
    code-server 介面
  4. 加入主畫面 (PWA):點擊 Safari 的「分享」按鈕,選擇「加入主畫面」。或 Chrome, Firefox 的安裝按鈕。這樣 code-server 就會變成一個獨立的 App,隱藏瀏覽器網址列,全螢幕寫 Code 超舒服!

2. 戶外寫 Code 最佳姿勢指南
#

  • 輕量化裝備:一台平板 + 輕薄藍牙鍵盤 + 可調角度支架,背包輕盈零負擔!
  • 避開強光:選擇樹蔭下或戶外咖啡廳陽傘座位,保護眼睛與螢幕可讀性。
  • 快捷鍵優化:搭配 外接鍵盤(如 iPad 外接 Smart Keyboard / Magic Keyboard),VS Code 的快捷鍵(Ctrl+C, Ctrl+V, Command+P 等)都能完美映射!

示範

3. code-server 使用
#

code-server 基本就是 VS Code 的開源自架網頁版,功能、操作都和原版的差不多。

可以正常安裝大部分模組、正常用 GitHub Copilot (AI) 等等。

code-server 中,開啟資料夾是開啟伺服器上的檔案、資料夾喔!而且終端機也是直接用伺服器上的終端機,連 ssh 都免了!

code-server 開啟資料夾


常見問題與故障排查(FAQ)
#

在架設 Linux + code-server + Tailscale 的過程中,偶爾可能會遇到服務無法啟動、HTTPS 網址打不開,或平板操作不如預期等問題。以下整理幾個常見的檢查方式,方便大家快速定位問題!

1. code-server 網頁打不開,該怎麼辦?
#

首先,確認 code-server 是否正常執行:

systemctl status "code-server@$USER"

如果服務沒有正常啟動,可以查看最近的日誌:

journalctl -u "code-server@$USER" -n 50 --no-pager

接著,確認服務是否能在 Linux 主機本機正常回應:

curl -I http://127.0.0.1:8080

如果本機就無法正常連線,應優先檢查 code-server 的服務狀態、設定檔與日誌;如果本機正常,但平板無法開啟,則繼續檢查 Tailscale 與 Serve 的設定。

2. Tailscale 已經連線,為什麼還是無法開啟網頁?
#

Tailscale VPN 已連線,不代表 code-server 的 HTTPS 入口一定正常。

請先在 Linux 主機執行:

tailscale status

確認主機已連上 Tailnet,再檢查 Serve 的設定:

tailscale serve status

確認 HTTPS 入口指向正確的本機服務 127.0.0.1:8080,並且使用的是正確的 HTTPS 網址與連接埠。

另外,也請確認平板已連上相同的 Tailnet,且該裝置有權限存取這台主機。

3. HTTPS 網址打不開,或瀏覽器顯示憑證錯誤?
#

請先確認 MagicDNS 與 Tailscale HTTPS 憑證功能已正確設定,並查看 Serve 的實際狀態:

tailscale serve status

接著,使用指令輸出中顯示的完整 HTTPS 網址開啟網頁,包含必要的連接埠。

如果使用自訂 HTTPS 連接埠,例如 5487,網址通常需要包含 :5487;如果使用標準 HTTPS 連接埠 443,則一般不需要特別標示。

若仍然無法連線,請確認憑證申請狀態、DNS 解析、系統時間,以及目前使用的 Tailscale 版本與設定是否正常。

4. 為什麼平板上的部分功能或快捷鍵無法正常使用?
#

code-server 雖然提供網頁版 VS Code 的操作體驗,但瀏覽器、作業系統與外接鍵盤仍可能影響部分功能。

例如:

  • iPadOS 或 Android 的系統快捷鍵可能與 VS Code 快捷鍵衝突。
  • 部分瀏覽器功能受到剪貼簿權限或安全來源限制。
  • 某些 VS Code 擴充套件可能不完全支援 Web 環境。
  • 行動裝置的輸入法、虛擬鍵盤與外接鍵盤可能有不同的操作行為。

建議優先使用最新版的相容瀏覽器、確認網址使用有效的 HTTPS 連線,並逐一測試有問題的快捷鍵。

如果某個快捷鍵經常衝突,也可以在 VS Code 的 Keyboard Shortcuts 設定中調整對應的按鍵組合。

5. Linux 主機重新啟動後,為什麼無法使用 code-server?
#

請先確認 code-server 是否已設定開機自動啟動:

systemctl is-enabled "code-server@$USER"

再查看服務目前的狀態:

systemctl status "code-server@$USER"

如果服務沒有執行,請檢查啟動日誌,確認是否有設定錯誤、權限問題或其他啟動失敗原因。

接著,確認 Tailscale 是否已重新連線:

tailscale status

最後,檢查 Serve 設定是否仍然存在:

tailscale serve status

如果 code-server、Tailscale 與 Serve 都正常,但平板仍無法連線,就需要進一步檢查網路、DNS 與裝置存取權限。

6. 為什麼遠端操作有時會變得很慢?
#

Tailscale 不保證每次連線都能建立直接的點對點連線。如果網路環境限制了直接連線,流量可能會透過 DERP 中繼節點傳輸,造成延遲增加。

可以使用以下指令檢查連線狀態:

tailscale status

也可以進一步檢查特定裝置的連線路徑:

tailscale ping <裝置名稱或 Tailscale IP>

如果延遲明顯增加,建議確認平板與伺服器的網路品質、Wi-Fi 或行動網路訊號,以及目前是否使用中繼連線。

另外,遠端開發的流暢度也會受到伺服器 CPU、記憶體、磁碟效能與專案大小影響,不一定完全是網路造成的。

7. 忘記 code-server 密碼怎麼辦?
#

code-server 的密碼通常可以在目前使用者的設定檔中查看:

nano ~/.config/code-server/config.yaml

確認自己讀取的是實際執行 code-server 的那個 Linux 使用者的設定檔。

如果需要修改密碼,請更新 password 設定並依照目前的服務管理方式重新啟動 code-server,再重新登入測試。

總結
#

透過 Linux + code-server + Tailscale HTTPS 的黃金組合:

  • 安全性:完全不需要開啟公網 Port,也不用害怕 IP 暴露。
  • 相容性:真正的原生 HTTPS,瀏覽器功能完全解鎖。
  • 自由度:只要有網路、平板,隨處都是你的開發辦公室!

快帶著充飽電的平板,去戶外享受一邊喝咖啡、一邊寫 Code 的極致浪漫吧~!(⁠≧⁠▽⁠≦⁠)💕

備註:寫這篇文章時我在聽這首歌:

征け / ワンダーランズ×ショウタイム × 鏡音リン

這套方案我的實際體驗
#

很舒服,雖然螢幕比電腦小了點,但是非常方便啊!!!真要說缺點的話,就是平板的某些快捷鍵會打架而已,其他功能都 OK 喔!

除了寫程式,在平板上用 code-server 寫 Markdown 或 Hugo 這類的部落格框架也很適合,因為:

  1. 本站的「心碎的 635 天:讓人又愛又恨的青春戀情」

    這篇文章裡面有提到:「是我在畢業旅行中,在遊覽車上拿著平板打出來的。我在寫這段文字的同時,我在遊覽車上,她就坐在我後面的座位,距離我不到2公尺。」啊,確實,這篇萬字感情長文,大部分內容是我在平板上用著 code-server 打出來的,所以我也可以很方便的把文章上傳、部署到我的這個 Hugo 架構的網站中。

  2. 高鐵或大眾運輸上的「移動式靈感爆發」

    畫面感:坐在高速行駛的高鐵靠窗座位,窗外風景飛速倒退,突然有一個超棒的專案架構、文章靈感。 高鐵上的折疊小桌板放筆電常常卡得要命,但放一台平板剛剛好!利用行動網路(搭配 Tailscale 的強韌連線),直接在平板上開個終端機把想法刻出來。高鐵還沒到站,新功能已經被 push 上去了,在遠端伺服器默默跑起來了!

Related



Comments

Feel free to share your thoughts or questions about this article! Click the button below to load the Giscus comment board. Sign in with GitHub to post a comment.