Google Cloud Platform 的免費 VPS
也順便記錄一些踏過的坎。
除了一開始免費送的 90 天 $300 鎂額度之外,其實 GCP 還是有免費計畫可以用的,雖然負載和流量都有一定的限制,但用來放一些需要 24/7 的服務,例如給定每小時執行一次的爬蟲程式啊、Discord Bot、或是自己寫的迷你後台等等,還是綽綽有餘的。
VM 個體
根據 Google Cloud 免費計畫 關於免費 Compute Engine 服務的說明:
-
每個月可以在下列其中一個美國區域中使用 1 個非先佔 e2-micro VM 執行個體:
- 奧勒岡州:us-west1
- 愛荷華州:us-central1
- 南卡羅來納州:us-east1
-
每月 30 GB 的標準永久磁碟
-
在以下地區每個月可使用 5 GB 的快照儲存空間:
- 奧勒岡州:us-west1
- 愛荷華州:us-central1
- 南卡羅來納州:us-east1
- 台灣:asia-east1
- 比利時:europe-west1
-
每月 1 GB 從北美輸出至所有地區的網路流量 (中國和澳洲除外)
會發現只要地區選擇 us-west1、us-central1 或 us-east1,都是不用錢的,所以在 Computer Engine 裡面,我們可以直接 Create an instance(不要從 Instance templates 裡面建立,那樣會不能選擇地區),任意選擇以上三種地區,並選擇 e2-micro(2 vCPU + 1 GB memory 的那個)。

同時在 Boot Disk 裡面,把硬碟改成標準永久磁碟(Standard persistent disk),容量 30 GB 以內、作業系統就挑自己習慣的即可,我這邊選 Ubuntu 18.04 LTS(發現 Ubuntu Pro 要加錢 🥹)。

此時旁邊的金額「應該」會顯示 $7.11(可能會隨 Google 的定價策略而變動),但這是正常的,即使我們使用了免費的套餐,旁邊依舊會有一個預估的金額。
其他的選項就按照個人喜好選擇,不知道哪個是哪個的話保持原狀也可以。如果之前沒加入過信用卡的,會跟你要一下信用卡資料。
回到 VM instances 的 Dashboard 就會看到剛剛的 VM 啦,按最旁邊的 Connect > SSH 就可以進去了。

遠端桌面?
有些人可能不習慣或不熟悉透過命令列來操作 Ubuntu,這邊提供一個安裝 Xfce Desktop Environment 的方法(包著 Xfce 的 Ubuntu 又稱 Xubuntu)。概念是安裝完 Xfce 之後,再安裝 Xrdp 遠端桌面,並透過 Windows 的遠端桌面連線。
|
|
設定 sudo 的密碼(登入的時候會用到):
|
|
在安裝完以上的套件之後,就可以透過 Windows 內建的遠端連線,或是 macOS 的 Microsoft Remote Desktop,透過 External IP 以 root 的身份登入。
詳情可參考這個教學:Enable desktop experience & RDP for Ubuntu 18.04 LTS VM in GCP。
但~可能受限於 e2-micro 的效能,安裝完後連 Chromium 都跑不起來,只能裝輕量化的瀏覽器和 IDE,我建議還是別操他了(畢竟是免費的嘛),還是乖乖用終端機。
Update Python
|
|
由於 Ubuntu 18.04 LTS 預設的 Python 是 3.6.8,有些 package 會要求 3.7 甚至 3.8 以上的 Python,所以可以先將 Python 做升級:
先取得 ppa 來源且驗證:
|
|
安裝:
|
|
保存兩種版本的 Python:
|
|
在 3.6 和 3.9 之間,選擇 Python 版本。
|
|
此時會跳出目前已有的 Python 版本,可以輸入前面 Selection 的編號來切換版本。

最後再檢查
|
|
參考文章:How to upgrade to Python 3.9.0 on Ubuntu 18.04 LTS
Python 問題排除
升級 Python 之後總是會遇到一些奇葩的 bug,這裡記錄一下。
‘HTMLParser’ object has no attribute ‘unescape’
嘗試
|
|
參考文章:pip3 on python3.9 fails on ‘HTMLParser’ object has no attribute ‘unescape’
ImportError: cannot import name ‘sysconfig’ from ‘distutils’
|
|
參考文章:ImportError: cannot import name ‘sysconfig’ from ‘distutils’ (/usr/lib/python3.9/distutils/init.py)
在命令列一次執行多個程式:Screen
安裝完 Python、Pip 和各式各樣的 package 之後,就可以在 SSH 命令列執行程式啦,但如果我想要一次執行多個程式,難道就要開多個命令列才行嗎?我們可以透過 Screen 來達到切換視窗的效果。Screen 可以在一個命令列裡面切換多個命令列,這樣我們就可以讓程式在背景切換,然後執行另一個程式。
理論是在 Ubuntu 裡面應該都有內建 screen,沒有的話再另外安裝
|
|
詳細的指令可以參考這一篇:使用 Screen 指令操控 UNIX/Linux 終端機的教學與範例
常用的指令們
- 創建一個新的 screen:
screen
- 完全束當前的 screen:
exit
- 退出當前的 screen(類似把程式丟到後台):
cmd+A
,d
- 列出當前所有的 screen:
screen -ls
- 重新(attach)連接 screen:
screen -r [screen 代號]
- 退出(detach)某個 screen:
screen -d [screen 代號]