[DevOps] 把家裡舊的 Macbook 當作 Server 使用

PC Chen
程式乾貨
Published in
10 min read1 day ago

發現好像有點久沒有寫技術相關的文章了,今天就來點「微。技術」文好了。好啦其實只是剛好最近換了台新的 Macbook,舊的電腦 2014 Mid Macbook Pro 想想也是賣不出去了,加上擺在那邊也是積灰塵,心血來潮不如就把它當成一個簡易的檔案傳輸 server 好了。

這也讓我回憶起前前公司就是把 Mac mini 當作是 CI/CD 的伺服器來使用,感覺上把 Macbook 架設當 server 也不是不可行 😗 ,就當作一邊架設順手記錄下來 💪

需求說明

想把閒置的電腦(Macbook)當個簡易的伺服器(傳輸檔案、跑程式、遠端桌面)使用,滿足一些日常開發需求。

原理間單來說,就是把要作為伺服器的 Macbook,裡面內建的「共享」功能打開。進入「設定」 app 後,點入「共享」,可以看到裡面有很多功能,而我們主要需要的就只有:(附上設定功能截圖)

  • 遠端登入:對於開發者這功能不陌生,可以讓你在本地 ssh 登入 server,進行開發
  • 螢幕共享:讓遠端桌面可以連線,進行 GUI 操作
  • 檔案傳輸:允許本地電腦跟遠端伺服器進行檔案上傳、下載,當然要打開
舊版 macOS 設定界面
新版 macOS 設定界面(個人覺得很不直覺....)

我們首先對區域網路做測試,簡單來講,記得現在這些操作,你預計要使用的電腦(之後我都簡稱 local 或 本地端電腦) 跟 要當作server 的電腦,網路要連上同一個。以我的例子來說,我現在是連家裡的 wifi,則兩端的電腦都要連上同一個 wifi 名稱的網路。

接下來,其實打開後我們按著設定裡指示操作就行:

測試 ssh 遠端登入

我們首先打開「遠端登入」,裏頭會分配一個區域網路的 ip address,讓其他的電腦可以透過這個 ip地址 連接到你設定的 server。如下圖所示,它分配給我的是 192.168.0.31。

這組ip是我區域網路分配給我的,亂try沒用

接著到你另一台要連接的電腦,可以先 ping 看看:

ping 192.168.0.31

正常應該會有以下回應:

正常的響應

確定有回應沒問題,我們就可以用 ssh 登入看看:

ssh {username}@192.168.0.31

如果問密碼,就是你登入這台電腦的帳號密碼。如果電腦沒有設密碼的話,就會自動登入,這樣其實不太安全,所以建議還是在 server side 的電腦設定個密碼。

ssh 登入成功!

螢幕共享 a.k.a 遠端遙控桌面

基本上 ssh 可以登入的話,剩下連線應該就沒什麼問題,所以可以把 ssh 當作第一個連線的檢查點。接下來我們來試著用遠端桌面,顧名思義就是可以有個圖形介面,讓我們遠端遙控 server 電腦,Mac 有內建的遠端桌面 app 叫做「螢幕共享」。

點進去後,我們點擊「+」圖標,就可以新增要連線的主機,這裡我們一樣輸入它分配給我們的「vnc://192.168.0.31/」

這個 ip 是區域網路分配給我的,亂try沒用😛

其實 Safari 瀏覽器本身也支援 vnc 協定

我們打開 Safari,在網址列輸入分配的ip「vnc://192.168.0.31/」,也可以登入遠端桌面。新版的 macOS 則會幫你直接跳轉到「螢幕共享」的應用程式,算是相當使用者友善!

讓伺服器電腦不斷電⚡️

既然都要當作 server 了,那我們自然不希望它運行到一半休眠,對於 MacBook 而言就必須去「能源節約器」裏頭,把「永不關閉顯示器」開啟、並勾選「避免硬碟進入睡眠」。

再多囉唆一步的話,可以把「螢幕保護程式」一起關閉,這樣就可以確保即使把 MacBook 闔上螢幕後,也不會自動進入睡眠,不過通常我為了散熱效果好,還是會微打開螢幕。

以上步驟,基本上就部署好了一台,在家裡的區域網路內,可以隨時連線使用的 server。

目前區域網路的伺服器架構圖

讓外網可以連入區域網路內的 server

作為一個伺服器使用者,當然會想要在外面用別的網路連回家裡的 server,比較複雜的做法,是要設定家裡的 wifi 分享數據機,分配一個 靜態ip 以及 特定通訊埠port(ssh: 20; Remote Desktop: 5900) 給這台 server,這樣才能讓外網連進家裡的區域網路伺服器。

用外網連回家裡內網的伺服器架構圖

詳細解釋起來影些複雜,需要一些網路知識,加上如果是用中華電信的數據機、或是租房子等沒有辦法自己設定的 wifi 分享器,那就比較難執行。所以我們就得用到 ngrok 的服務。

簡單來說 ,ngrok 是一個讓使用者輕鬆把服務公開到外網的中介服務商,讓你免去設定網路那些有的沒的雜瑣事。不過缺點就是用量為受限,如果要增間連線數以及傳輸量,就要另外付費。但以我們個人使用者,免費版的方案就綽綽有餘了!

差別只在於 對外ip 是由 ngrok 來提供

首先

先去 官網註冊 帳號,完成後會被分配到一個 token,之後要用這個來做授權。註冊完成後,進入左方列表中「Your Authtoken」,就會顯示分配給你的 token。

安裝

接著當然是要在作為 server 的那台電腦安裝 ngrok,官網安裝頁面 就有很詳盡的安裝方式,作為 Mac 使用者的我自然就是選擇 Hombrew 安裝~ 輸入以下指令:

brew install ngrok/ngrok/ngrok

安裝完成後,接下來初始化 token ,把剛剛的 token 複製下來並輸入以下指令:

ngrok config add-authtoken {輸入你的token}
正確設定後的畫面

修改設定檔 YAML

初始化 token 後,可以看到設定檔是一個 yaml file,會存在「/Users/{user}/Library/Applications Support/ngrok/ngrok.yml」這個位置。

接下來,我們要把這台伺服器的 ip ,讓 ngrok 映射出去給外網,這邊比較技術性地講,ssh 的通訊埠port是22;遠端桌面的通訊埠port是5900,所以我們要把 port 22 與 port 5900 給 ngrok yaml 檔案,讓它在啟動時把被分配到的 ip 映射給這兩個 port。

首先先進到 yaml file 所在的資料夾「/Users/{user}/Library/Applications Support/ngrok」,隨便開個編輯器查看,可以看到裡面有剛剛設定好的 token。

version: "2"
authtoken: {your token is here}

我們把 yaml 修改成以下:

version: "2"
authtoken: {your token is here}
tunnels:
ssh:
addr: 22
proto: tcp
rdc:
addr: 5900
proto: tcp

⚠️重要. 若想連續映射兩個 port,ngrok 很賊的要你綁定一張信用卡(雖然不會支付任何費用,但高度預感事之後會收費),所以得先去官網的 「Billing」綁定一張信用卡。這就是俗成免錢的最貴吧🥲

記得先綁定信用卡(不會花費放心!)

綁定好後,回到 server 電腦的終端機,使用指令啟動 nrgok:

ngrok start -all

接著畫面就會顯示如下:

可以看到下面兩個 Forwarding 的部份,port 22 跟 port 5900 都有對應的 對外ip 以及 port。接著我們回到本地端的電腦,一樣輸入 ssh 指令,記得 ssh 的 port 是22,所以要輸入對應 localhost:22 的那個 forwarding。

ssh {username}@{ip} -p {port}

一樣可以連入,到目前為止就完成,可以用外面的網路連回自己家的電腦 👍

對於螢幕共享也是如法炮製,進去後點選「+」號,輸入「{ngrok_ip}:{port}」(記得這裡要用 localhost:5900 對應的那個 Forwarding)

點選連線後一樣可以進入遠端桌面:)

如果本地端電腦是 Winodws 的話呢?

ssh 登入不在話下一樣可以使用

Windows Powershell 下用 ssh 登入遠端伺服器

至於螢幕共享部分也不用擔心,可以下載 RealVNC Viewer 這個軟體,一樣輸入剛剛的「vnc://{ngrok_ip}:{port}」,就可以登入啦!

在 Windows 上用 VNC Viewer 登入遠端桌面

缺點

滿明顯的,細心的讀者可以注意到每次 ngrok start -all 所分配到的 對外ip 是浮動的,也就是每次啟動都不一樣,這樣就會很麻煩:比如機器重啟後,重啟 ngrok 後,剛剛前述所有連線設定都要再做一次。

還有免費仔也有使用上限,可以看到每月只有總共 5000 連線數、傳輸的數據量也只有 1GB。不過因為我也沒有大量地使用,頂多就是偶爾連回舊電腦,拿一下檔案、或是 ssh 一下跑一些測試的東西,基本上也沒有大量操作,以個人使用者算是還湊合使用。

免費版方案有各種使用上限

總結

把 Macbook 部署為伺服器其實滿方便快速的,內建很多功能直接照著操作就好,但如果想要有對外連線能力,只像我想要簡單快速部署,可以用 ngrok 沒太大問題;但如果希望一個長期穩定的伺服器,還是要把家裡網路數據機做設定,讓其映射出一個靜態的 對外ip 給 server 使用,才是正解!

非常土炮的散熱裝置🥵

--

--

PC Chen
程式乾貨

喜歡接觸與動手實作各種軟體技術的後端數據工程師 A data- backend engineer who is enthusiastic in learning and implementing any techniques in software engineering.