昨天在 GCP 建立好 VM 執行個體了,今天繼續接著介紹怎麼在上面部屬 Discord BOT。
進度沒有變化~
昨天有說到,部屬的流程可以簡單分成三個階段:
今天繼續介紹第二三個階段。
建立好 VM 後,接下來就是要連線進入。這個步驟可以直接透過 GCP 在瀏覽器操作,也可以使用其他可以 SSH 連線的工具進行連線 (但需要先設定好金鑰才能連線)。這邊介紹比較簡單的作法:瀏覽器。
在 VM 執行個體清單中,可以看到右邊有一個 SSH 的按鈕。
點擊「SSH」按鈕就會出現一個彈出視窗,接著會看到要求允許授權的畫面,同意之後就連線成功了。
與之前在 Render 部屬不同,由於 GCP 的 Compute Engine 不會有資源分配的問題,機器並不會因為長時間不使用而休眠。所以,這次就不用準備 Flask 之類的後端 server,只要像平時在自己電腦開發一樣就好了。
這邊的做法通常有兩種,第一種做法是使用 Docker (這也是最常見的作法),把整個環境打包進 Docker image 中;第二種則是手動另外安裝,就跟當初在自己電腦開發一樣。
通常 VM 內預設是沒有 Docker 的,需要另外安裝 (Docker 官方文件)。
另外,也需要把自己的程式碼打包成 Docker image,這邊提供一個 Dockerfile 範例:
FROM python:3.11.2-slim-bullseye
# setting working directory
WORKDIR /app
COPY ./requirements.txt ./requirements.txt
# install dependencies
RUN pip install -r requirements.txt --no-cache-dir
# copy this project to the working directory
COPY . /app
# run the app by using uvicorn command
CMD ["python", "main.py"]
打包完之後,放上 Docker hub 之類的平台,再回到 VM 把自己的 Docker image 拉下來就可以了。
通常 VM 都已經有 Python 了,大家可以用 python3 --version
確認一下 Python 的版本 (我的 VM 預設是裝 3.11.2
)。不過,pip 就要自己安裝了。
sudo apt update
sudo apt install python3-pip -y
剩下就簡單了,把程式碼 git clone 下來,安裝 Python 套件就好了。
建議建立一個 virtual environment 來隔離環境
最後就是執行程式了,不過,有別於平時在自己電腦執行,我們會希望在 VM 上執行時是 detached 模式。這樣做的好處有兩個,第一,可以在啟動 Discord BOT 後,繼續做其他操作;第二,之後關閉 SSH 連線之後,還可以再對它進行操作 (例如:關閉 Discord BOT)。
Docker 要以 detached 模式執行容器是非常容易,只要在指令中加上 -d
就好。
docker run -d -e TOKEN="token" mydiscordbot:0.0.1
其中,-d
是指「以 detached 模式執行容器」,-e
是設定環境變數 (讓 Discord BOT 拿得到 token)。
如果不是 Docker,建議使用 tmux 這類的終端機管理程式,讓你可以安心地以 detached 模式執行 Discord BOT 主程式。
如果上面步驟都有順利完成,應該就算是部屬成功了。但假如沒有,想要關閉 VM 執行個體 (或是有其他想關閉的原因),就回到 VM 執行個體清單,點開最右側的三個點的選單,按下「停止」,再稍等一下就好了。
今天簡單介紹了在 GCP 部屬 Discord BOT 的後半段步驟,大家可以依照自己的習慣,考慮是否要使用 Docker 來部屬。
明天就會開始以我開發的 Discord BOT 為例,讓大家實戰演練一下。