iT邦幫忙

2024 iThome 鐵人賽

DAY 26
0
Python

用 Python 打造你的 Discord BOT系列 第 26

[Day 26] 部屬 (四):GCP (下)

  • 分享至 

  • xImage
  •  

昨天在 GCP 建立好 VM 執行個體了,今天繼續接著介紹怎麼在上面部屬 Discord BOT。

進度

進度沒有變化~

昨天有說到,部屬的流程可以簡單分成三個階段:

  1. 建立 VM
  2. 進入 VM,準備程式碼與執行環境
  3. 啟動程式

今天繼續介紹第二三個階段。

進入 VM

建立好 VM 後,接下來就是要連線進入。這個步驟可以直接透過 GCP 在瀏覽器操作,也可以使用其他可以 SSH 連線的工具進行連線 (但需要先設定好金鑰才能連線)。這邊介紹比較簡單的作法:瀏覽器。

在 VM 執行個體清單中,可以看到右邊有一個 SSH 的按鈕。

點擊「SSH」按鈕就會出現一個彈出視窗,接著會看到要求允許授權的畫面,同意之後就連線成功了。

準備程式碼與執行環境

1. 準備要部屬的程式碼

與之前在 Render 部屬不同,由於 GCP 的 Compute Engine 不會有資源分配的問題,機器並不會因為長時間不使用而休眠。所以,這次就不用準備 Flask 之類的後端 server,只要像平時在自己電腦開發一樣就好了。

2. 準備執行環境

這邊的做法通常有兩種,第一種做法是使用 Docker (這也是最常見的作法),把整個環境打包進 Docker image 中;第二種則是手動另外安裝,就跟當初在自己電腦開發一樣。

方法一:Docker

通常 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

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 執行個體 (或是有其他想關閉的原因),就回到 VM 執行個體清單,點開最右側的三個點的選單,按下「停止」,再稍等一下就好了。

小結

今天簡單介紹了在 GCP 部屬 Discord BOT 的後半段步驟,大家可以依照自己的習慣,考慮是否要使用 Docker 來部屬。

明天就會開始以我開發的 Discord BOT 為例,讓大家實戰演練一下。


上一篇
[Day 25] 部屬 (三):GCP (上)
下一篇
[Day 27] 開發實戰 (一):定義需求
系列文
用 Python 打造你的 Discord BOT31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言