自訂 Prebuilt
雖然 Zeabur 已經涵蓋眾多由社群提供的 Prebuilt Images 和模板,但你可能會需要部署自己的 Docker 映像、設定持久化儲存、設定啟動命令等等。Zeabur 針對這個需求,提供了 Prebuilt 的自訂功能。
Prebuilt 主要是針對單個服務的部署,〈模板〉則涵蓋了一鍵部署多個服務 (Docker Compose) 的功能。
打開介面
點選「Add Service」→「Prebuilt Images」→「Customize」打開自訂 Prebuilt 的頁面。
設定說明
Image
「Image」為要拉取的 Docker image,通常就是緊隨 docker pull
或 docker run
後面的 image tag,比如
docker pull mariadb # tag 是 "mariadb"
docker run mariadb:lts # tag 是 "mariadb:lts"
或者是 Docker Compose 中的這個地方
version: '3.9'
services:
db:
image: postgres # tag 是 "postgres"
# ...
設定完成後,即可接下去設定環境變數、Port⋯⋯等等的 Prebuilt 啟動設定。
Environment Variable
「Environment Variable」,顧名思義就是傳給服務的環境變數。不過除了單純的環境變數設定外,Zeabur 也允許你將環境變數傳給其他服務 (Expose),甚至是設定「不能再次更改」(Readonly),讓你有更大的環境變數設定彈性。
「Key」是環境變數的鍵,只能由英文字母、數字和底線組成,如 MARIADB_USER
或 DB_1_HOST
都是可以接受的。
「Value」則是環境變數的值,裡面可以使用 ${KEY}
來在引用其他環境變數的 key。如上圖中 MARIADB_PASSWORD
直接引用了 MARIADB_ROOT_PASSWORD
,所以 MARIADB_PASSWORD
的值就會等於 123456
;同理,假如有個環境變數的值是 password=${MARIADB_PASSWORD}
,展開之後的結果就是 password=123456
。${KEY}
這種引用格式 會在服務啟動時直接展開,所以應用程式看到的會是已經展開完成的值,你不需要在應用層重新展開。
「Expose」指把環境變數的鍵值同時套用到其他服務上。以上圖為例,MARIADB_USERNAME
和 MARIADB_PASSWORD
都有核取 Expose,所以同專案底下的其他服務都可以看到 MARIADB_USERNAME
、MARIADB_PASSWORD
這兩個環境變數,當然也可以使用 ${KEY}
引用它們。
「Readonly」則代表「變數在 Prebuilt 建立後不能由使用者修改」。以上圖為例,MARIADB_PASSWORD
打勾了 Readonly,所以之後直接針對 MARIADB_PASSWORD
的修改都不會作用(不過修改 MARIADB_ROOT_PASSWORD
後,MARIADB_PASSWORD
的值依然會變化)。
除了其他服務 Exposed 的變數以外,你也可以使用 Zeabur 預先定義好的特殊變數,比如使用 ${ZEABUR_WEB_URL}
取回設定在 web
port 的網址。
如果你在參考 Docker image 的文件,通常環境變數在 docker run
之後的 --env
(或 -e
)引數中,如下範例所示。
docker run --detach --name some-mariadb --env MARIADB_USER=example-user --env MARIADB_PASSWORD=my_cool_secret --env MARIADB_DATABASE=example-database --env MARIADB_ROOT_PASSWORD=my-secret-pw mariadb:latest
# MARIADB_USER = example-user
# MARIADB_PASSWORD = my_cool_secret
# MARIADB_DATABASE = example-database
# MARIADB_ROOT_PASSWORD = my-secret-pw
如果是 Docker Compose,則是
version: '3.9'
services:
adminer:
image: adminer
restart: always
environment:
DEBUG: "true" # (or) - DEBUG=true
# DEBUG = true
Ports
「Ports」相當於防火牆的連入 (inbound) 規則,只有宣告的 Ports 可以被其他服務或外網連線。
「Port Name」只能由英文字母和連接號組成。「Port」則寫上服務監聽的 Port,如 MariaDB 就是 3306
;Web 服務大部分都是 8080
, 3000
, 80
, …。
「Port Type」可以是 HTTP
或 TCP
。外網的部分,HTTP
可以使用網域(如 my-service.zeabur.app
)直連,同時 Zeabur 也會自動簽署 TLS 憑證;TCP
則可以使用 Zeabur 自動分配的轉送主機名稱和 Port 連線(如 reg.clusters.zeabur.com:12345
)。如果是服務之間,可以使用 服務內網 直連到服務,減少不必要的流量費用,此時 Port 直接填寫你宣告的 Port 即可(亦即 mariadb.zeabur.internal:3306
、backend.zeabur.internal:8080
)。
如果你看得是 Docker image 的文件,通常環境變數在 docker run
之後的 -p
參數中,如下範例所示。
docker run -p 3306 mariadb:latest
# Port Name = <Custom>; Port = 3306; Port Type = TCP
# TCP 是因為 MariaDB 是使用基於 TCP 的自訂協定。
如果是 Docker Compose,則是
version: '3.9'
services:
adminer:
image: adminer
restart: always
ports:
- 80:8080
# Port Name = <Custom>; Port = 8080; Port Type = HTTP
# HTTP 是因為 adminer 是一個管理資料庫的 PHP Web 介面。
Volumes
「Volumes」是持久儲存空間的掛載路徑。
預設情況下 Zeabur 在服務每次重新啟動時,都會將服務裡面的資料重設回 Image 的預設狀態(又稱 Stateless)。假如你需要在容器中長期儲存資料,可以配置一個持久儲存空間,並掛載在你想長期儲存的目錄下,這樣服務無論重啟還是更新,掛載的目錄都不會更動——直到你刪除服務或者是自己修改目錄的內容。另外服務的「Backup」功能也是備份這個空間的資料。持久儲存空間的收費方式可以參閱 Zeabur 的 Pricing 頁面。
「Volume id」為儲存空間的代號,只能輸入英文字母、數字和連接號。「Path」 為儲存空間的掛載路徑,可以參考 Docker image 的 Volume 設定做配置。
如果你看得是 Docker image 的文件,通常環境變數在 docker run
之後的 -p
參數中,如下範例所示。
docker run -v your-storage:/var/lib/mysql mariadb:latest
# Volume ID = <Custom>; Path = /var/lib/mysql
如果是 Docker Compose,則是
version: '3.9'
services:
mariadb:
image: mariadb
volumes:
- your-storage:/var/lib/mysql
# Volume ID = <Custom>; Path = /var/lib/mysql
Start Command
「Start Command」讓你可以改掉 Docker image 預設使用的 Entrypoint 和引數。這部分比較進階,如果你不太清楚意義,可以略過。
從 GUI 建立的 Start Command 預設的 Command 都是 /bin/sh
。如果你的 Command 不是 /bin/sh
,可使用 Edit TOML 功能直接修改,或與 客服 討論更改方式。
手動撰寫 Prebuilt TOML
雖然 GUI 已經提供了製作 Prebuilt 服務必要的眾多參數,但你或許想要加入自訂的 icon、配置服務連線指引 (Instruction)、設定更多更細的項目⋯⋯這時候你可以使用 Edit TOML 幫助你撰寫功能更完善(也更為複雜的)Prebuilt TOML 檔案。
每個欄位的說明可以參考 Prebuilt TOML 的 JSON schema 文件,TOML 的撰寫說明可以參閱這份 TOML 格式文件。如果有任何撰寫上的疑問,歡迎與 客服 詢問。