# 建立自訂雞蛋

::: 警告 您不應編輯面板附帶的現有服務或選項。我們推動的每一次升級都會帶來輕微的影響 對這些進行更改,您將丟失所做的任何更改。 :::

[[目錄]]

您需要做的第一件事是建立一項新服務。在這種情況下,名稱和描述不言自明。 Folder Name _必須是唯一的名稱_不被任何其他服務使用,並且應該只 包含字母、數字、底線和破折號。這是守護程式將儲存的資料夾的名稱 守護程式上的服務選項。

還需要預設啟動命令,但可以根據選項進行更改。

# 建立新選項

建立服務後,在頁面右下角您應該會看到一個標題為 New Egg 的按鈕,按下它。

您將被帶到一個新的服務選項頁面,這是大部分配置發生的地方。第一件事 您需要做的就是從 Associated Nest 下拉清單中選擇您先前建立的服務。

之後,輸入選項名稱來描述它,在本例中我使用 Widget 。您還需要提供 有效 docker 映像,以及要指派給此服務選項下的伺服器的啟動命令(請記住,此 如果需要,可以根據每個伺服器進行調整)。

_Docker 映像必須經過專門設計才能與 Pterodactyl Panel 一起使用。 _ 您應該閱讀更多相關內容 我們的 Creating a Docker Image 指南。

# 設定進程管理

這可能是此服務選項配置中最重要的步驟,因為這告訴守護程式如何執行所有內容。

您將遇到的第一個欄位是 Copy Settings From 。預設選擇是 None 。這是預料之中的,好吧。 此下拉清單將在本文末尾討論。

# 停止命令

接下來,您將遇到 Stop Command ,顧名思義,這應該是用於安全停止的命令 選項。對於某些遊戲,這是 stopend 。某些程式和遊戲沒有指定的停止命令,因此 您可以輸入 ^C 讓守護程式執行 SIGINT 來結束行程。

# 日誌存儲

日誌現在完全由守護程序處理,並使用 docker 日誌從伺服器輸出完整的輸出。 可以如下設定。

{}

# 設定文件

下一個區塊是最複雜的區塊之一,即 Configuration Files 描述符。守護進程將處理這個 在啟動伺服器之前阻止以確保所有必要的設定均已定義並正確設定。

{
    "server.properties": {
        "parser": "properties",
        "find": {
            "server-ip": "0.0.0.0",
            "enable-query": "true",
            "server-port": "{{server.build.default.port}}",
            "query.port": "{{server.build.default.port}}"
        }
    }
}

在這個範例中,我們告訴守護程式讀取 /home/container 中的 server.properties 。在這個街區內,我們 定義一個 parser ,在本例中為 properties 但以下是 valid parsers (opens new window)

  • file — 此解析器是基於匹配行的開頭,而不是像其他五個那樣的特定屬性。 如果可能,請避免使用此解析器。
  • yaml (支援 * 表示法)
  • properties
  • ini
  • json (支援 * 表示法)
  • xml

一旦定義了解析器,我們就定義一個 find 區塊,告訴守護程式要找哪些特定元素 並更換。在此範例中,我們在 server.properties 檔案中提供了我們想要的四個單獨的項目 尋找並替換為指定的值。您可以使用精確值,也可以定義特定的伺服器設定 server.json 文件。在本例中,我們分配預設伺服器連接埠用作 server-portquery.port 。 **這些佔位符區分大小寫,且其中不應有空格。 **

您可以在此處列出多個文件,守護進程將在啟動伺服器之前並行處理它們。什麼時候 使用 yamljson 您可以使用更進階的元素搜尋。

{
    "config.yml": {
        "parser": "yaml",
        "find": {
            "listeners[0].query_enabled": true,
            "listeners[0].query_port": "{{server.build.default.port}}",
            "listeners[0].host": "0.0.0.0:{{server.build.default.port}}",
            "servers.*.address": {
                "127.0.0.1": "{{config.docker.interface}}",
                "localhost": "{{config.docker.interface}}"
            }
        }
    }
}

在此範例中,我們使用 yaml 解析器來解析 config.yml。前三個查找項只是分配 第一個偵聽器區塊的連接埠和 IP。最後一個 servers.*.address 使用通配符匹配來匹配任何項目 在 servers 區塊內,然後尋找這些項目的每個 address 區塊。

此文件配置的一個進階功能是能夠為一個文件定義多個查找和取代語句。 單一匹配線。在這種情況下,我們正在尋找 127.0.0.1localhost 並將它們替換為 docker interface defined in the configuration file using {{config.docker.interface}}.

# 啟動配置

要配置的最後一個區塊是使用此服務選項執行的伺服器的 Start Configuration

{
    "done": ")! For help, type "
}

在上面的範例區塊中,我們將 done 定義為整行或行的一部分,表示伺服器已完成 開始,並準備好等待玩家加入。當守護程式看到此輸出時,它會將伺服器標記為 ON 而不是 比 STARTING

基本服務選項配置到此結束。

# 複製設定自

如上所述,新增選項時有一個獨特的 Copy Settings From 下拉清單。這給你 顧名思義,能夠從不同的選項複製上面定義的設定。

在面板中,我們使用它來複製類似服務選項之間保持相同的設置,例如許多 我的世界選項。

例如,讓我們來看看 Sponge (SpongeVanilla) 服務選項。

正如您所看到的,它被告知從 Vanilla Minecraft 複製設定。這意味著任何字段 留空將從指定的父級繼承。然後我們定義一個特定的 userInteraction 行,該行與 Sponge 與 Vanilla 進行了比較,但告訴它其他一切都應該保持不變。

*請注意 Copy Settings From 不支援巢狀副本,您只能從單一父級複製, 且該父項**不得從其他選項複製。 ***

# 雞蛋變數

Egg 變數的重要部分之一是能夠定義使用者和/或管理員可以定義的特定變數 控制來調整不同的設置,而不讓使用者修改啟動命令。建立新變量,或編輯 現有服務,存取您建立的新服務選項,然後按一下頁面頂部的 Variables 標籤。讓我們採取 看一下我們可以創建的範例變數。

名稱和描述相當不言自明,因此我將跳到 Environment Variable 框。這應該 是帶有下劃線的字母數字名稱,並且應該是大寫的。這將是環境變數的名稱 可以在啟動命令中作為 {{WOOZLE_WOO}} 進行訪問,在文件修改中作為 {{env.WOOZLE_WOO}} 進行訪問,或者 只是任何 shell 腳本中的 ${WOOZLE_WOO} (它在環境中傳遞)。我們也定義了一個預設值 在此範例中此環境變量,但不需要這樣做。

下一部分是 Permissions ,它是一個包含兩個選項的下拉清單: Users Can ViewUsers Can Edit

  • Users Can View — 允許使用者查看前端的欄位以及該變數的分配值。 他們將能夠在啟動命令中看到它被替換。
  • Users Can Edit — 允許使用者編輯變數的值,例如 server.jar 檔案的名稱 如果運行《我的世界》。

此處應小心謹慎,即使您未分配任何權限,也不表示該值將是 隱。狡猾的用戶仍然能夠在他們的伺服器上獲取環境。在大多數情況下,這只是隱藏 它來自用戶,然後在 Dockerfile 中使用來執行操作,因此用戶看到的東西並不重要。

最後,您需要定義一些輸入規則來驗證值。在這個例子中,我們使用 required|string|between:1,10 ,這表示該欄位是 required ,必須是 string ,且必須在 1 和 長度為10字元。您可以找到all of the available validation rules (opens new window) 在 Laravel 網站上。您也可以透過使用 regex: 規則標誌來使用基於 ReGEX 的驗證。例如, required|regex:/^([\w\d._-]+)(\.jar)$/ (opens new window) 將需要該字段,並將匹配 正規表示式為任何字母或數字 ( \w\d ),包含底線 ( _ )、句點 ( . ) 和破折號 ( - ),以 .jar 結尾。

然後,在管理 CP 和前端中管理伺服器的啟動時,它們將可見。

# 預設變數列表

預設變數始終可供所有 Egg 訪問,無需單獨建立。它們可以用在 Egg 啟動、安裝腳本或設定檔解析器中。

變數 描述 範例
太Z 時區 受保護_0
啟動 蛋的啟動指令 受保護_0
伺服器記憶體 伺服器可用記憶體(以 MB 為單位) 受保護_0
伺服器IP 伺服器預設ip 受保護_0
伺服器連接埠 主伺服器連接埠 受保護_0
P_SERVER_LOCATION P_SERVER_LOCATION 伺服器位置
P_SERVER_UUID P_SERVER_UUID 伺服器的 UUID
P_SERVER_ALLOCATION_LIMIT P_SERVER_ALLOCATION_LIMIT 伺服器允許的指派限制