跳到內容

    11. 進階網路與維運

    本章是給伺服器的 owner 與 admin 使用,涵蓋伺服器的網路設定與日常維運。點分頁列右側的齒輪圖示(提示「使用者設定」)打開設定面板後,「網路」分組裡有「TURN 伺服器」分頁,用來設定內建的 TURN 中繼;「伺服器設定」分組的第一個分頁「儀表板」則呈現伺服器的規模統計。儀表板分頁裡由上往下還排著「備份」、「孤兒檔案」、「伺服器更新」、「伺服器操作」幾個區段,本章一併說明。owner 與 admin 在本章看到的內容完全一致。

    點分頁列右側的齒輪圖示(提示「使用者設定」)打開設定面板,在「網路」分組裡按「TURN 伺服器」分頁進入,分頁頂部標題也是「TURN 伺服器」。

    分頁由上往下排著:環境變數覆蓋提示(指向外部 TURN 時才出現)、啟用開關與狀態、TURN 連接埠、位址模式、執行診斷、防火牆提示。

    如果這座伺服器已經透過環境變數指向外部的 TURN,分頁最上方會出現一條提示,逐字寫著:「TURN 已透過環境變數(TURN_URL)設定,內建 TURN 伺服器停用。移除 TURN_URL 以使用內建功能。」出現這條提示時,下方的啟用開關按不下去;要改用內建 TURN,得先移除 TURN_URL 這個環境變數。

    啟用內建 TURN 伺服器(開關 + 狀態)

    Section titled “啟用內建 TURN 伺服器(開關 + 狀態)”

    「啟用內建 TURN 伺服器」是分頁第一段,旁邊一句說明:「運行 TURN 中繼伺服器,幫助在嚴格 NAT(VPN、企業網路)後的用戶連接語音頻道。」

    這段有一顆開關,按一下就立即切換並套用,不需要再按儲存。前述環境變數覆蓋的情況下,這顆開關按不下去。

    開關下方是狀態列:「狀態」後面接一個圓點。伺服器正在運行 TURN 時是綠燈與「運行中」;停下時是灰燈與「已停止」。

    「TURN 連接埠」用來設定 TURN 對外使用的埠,旁邊一句說明:「TURN 伺服器使用的 UDP 與 TCP 連接埠,需在防火牆中開放。」

    這是一個數字輸入框,預設顯示 3478。改好後按旁邊的「儲存」就寫入新的連接埠。

    「位址模式」用來告訴 TURN 這座伺服器對外的位址怎麼取得。下方兩顆橫排按鈕二選一:「固定 IP」或「動態 DNS (DDNS)」。選哪一個,下方就出現對應的設定區。

    切到「固定 IP」後,下方出現「公網 IP 位址」,附一句說明:「此伺服器的公網 IP 位址。」這是一個文字輸入框,預先填入的提示文字是 203.0.113.45。旁邊有「自動偵測」按鈕,按下會嘗試填入偵測到的公網 IP,偵測過程中按鈕顯示忙碌;確認位址後按「儲存」寫入。

    切到「動態 DNS (DDNS)」後,下方改出現「DDNS 主機名」,附一句說明:「你的 DDNS 主機名(例如 myserver.duckdns.org),伺服器會定期解析。」這是一個文字輸入框,預先填入的提示文字是 myserver.duckdns.org。填好後按「儲存」寫入主機名,伺服器之後會定期解析它取得最新位址。

    位址設好後,可以按「執行診斷」做一次內部自我檢測。這顆按鈕只有在 TURN 已經啟用時才能按;還沒啟用時按不下去。

    檢測成功會顯示「TURN 伺服器內部運作正常。」;失敗會顯示「TURN 診斷失敗」,後面附上失敗細節。

    按鈕下方有一行重要說明,逐字寫著:「此為伺服器內部自我檢測,無法驗證外部連線是否暢通。請使用 VPN 或從外部網路實際測試語音連線,以確認 TURN 對真實用戶有效。」也就是說,診斷成功只代表伺服器這端的 TURN 自己跑得起來,不代表外部的使用者一定連得上;要真正確認,請從外部網路或透過 VPN 實測一次語音連線。

    分頁最下方有一塊提示框,提醒你把埠開好。文字會把目前設定的連接埠(預設 3478)帶進去:「請確保 UDP 與 TCP 連接埠 3478 都已在防火牆中開放,若在路由器後方請設定連接埠轉發(TCP 是給 UDP 被封鎖之網路環境的備援)。」

    點分頁列右側的齒輪圖示(提示「使用者設定」)打開設定面板,在「伺服器設定」分組裡按該組第一個分頁「儀表板」進入,分頁頂部標題是「伺服器儀表板」。

    開啟這個分頁時會先載入一次統計,不必手動操作就先載一次。右側有一顆「重新整理」按鈕,要更新數字就按它重新抓取一次。

    分頁上方是一片統計卡網格,每張卡呈現一項數字,數值來自伺服器。載入中時這片網格還沒出現,畫面中央顯示一個轉圈的載入指示;載入完成後網格才出現。載入後若某一格的數值缺失,該格顯示「—」。

    主要會用到的統計卡有:

    • 使用者總數 — 這座伺服器累計註冊的使用者數
    • 線上使用者 — 目前在線的使用者數
    • 封禁使用者 — 已被封禁的使用者數
    • 訊息總數 — 全站累計的訊息數
    • 今日訊息 — 今天累計的訊息數
    • 頻道總數 — 全站頻道數
    • 資料庫大小 — 資料庫目前佔用的空間
    • 上傳檔案大小 — 成員上傳的檔案累計佔用的空間
    • IO 應用佔用 — IO 應用累計佔用的空間
    • 網頁佔用 — 網頁內容累計佔用的空間
    • 記憶體使用量 — 伺服器目前的記憶體用量

    網格裡同時還有一格「Goroutines」,呈現伺服器內部的執行緒數,屬偏技術的指標,本手冊不展開。

    其中磁碟與規模類的數字(資料庫大小、上傳檔案大小、IO 應用佔用、網頁佔用、記憶體使用量)會自動換算成可讀單位,依量級顯示為 B、KB、MB 或 GB。這些卡呈現你按下重新整理、或剛開啟分頁那一刻的數字;要看最新狀況,就再按一次「重新整理」。

    從儀表板分頁往下捲,統計卡下方第一段是「備份」。這段用來建立與下載資料庫備份,旁邊一句說明:「建立和下載資料庫備份。」

    按「建立備份」就會建立一份備份,建立過程中按鈕顯示忙碌;完成後旁邊會短暫顯示「備份建立成功!」。

    伺服器上有備份後,下方會出現備份清單區:

    • 一個下拉選單列出所有現存備份,每個選項顯示「備份檔名(檔案大小)」,大小已自動換算成可讀單位。
    • 「下載備份」把目前選中的備份下載下來;還沒選任何備份時按不下去。
    • 「刪除」(紅色)把目前選中的備份移除;還沒選任何備份時按不下去,刪除過程中按鈕顯示忙碌。

    選中某一份備份後,下方會顯示兩列細節:「大小」是該備份的檔案大小(已換算單位),「建立時間」是它建立的日期時間。

    從儀表板分頁往下捲,備份下一段是「孤兒檔案」。這段用來找出已經上傳、但不再被任何地方引用的檔案,旁邊一句說明(逐字):「掃描已上傳、但沒有任何訊息、筆記、白板、頁面、使用者、伺服器設定或其他伺服器資產(貼圖、音效、徽章、主題)引用的檔案。剛上傳不久的檔案會被略過——它們可能還在傳送途中。」

    按「掃描」開始掃描,掃描過程中按鈕顯示忙碌。掃描完成後依結果出現不同內容:

    • 找到孤兒檔案時,出現一顆紅色按鈕「全部刪除(…)」,括號內是找到的數量。
    • 沒找到孤兒檔案時,顯示綠色的「未找到孤兒檔案。」

    找到檔案時,下方會列出清單。標頭逐字寫著「找到 … 個孤兒檔案」,「…」是數量,後面接這批檔案的總大小(已換算單位)。清單每一列左邊是檔名、右邊是該檔大小。確認過後可以按「全部刪除(…)」一次清掉,釋放磁碟空間。

    剛上傳、還沒送出的檔案本來就沒有被任何東西引用,但它們不是孤兒。所以掃描會刻意略過太新的檔案:一般檔案在上傳後一小時內不列入;伺服器知道「已經上傳、但還沒被任何訊息取走」的檔案,則是二十四小時內不列入,連它的縮圖一起略過。

    「掃描結果比想像中少」通常就是這個原因,不是掃描壞了。

    孤兒判定要先讀完所有「還在使用中」的引用來源。只要其中任何一項讀不到,整個掃描就會中止、一個檔案都不列出,並顯示紅色橫幅說明是哪一項讀取失敗、以及底層原因,逐字如下:「掃描中止:讀取「…」失敗(…)。在讀得到之前不會列出任何檔案,以免把還在使用的檔案當成孤兒。」

    這是刻意的設計:「讀不到」與「沒有被引用」不能給出同一個答案 —— 否則一整類還在使用的資產會被列成可刪,而刪除那一端不會再驗一次。看到這個橫幅時不要急著重試刪除,先處理讀取失敗的那個來源。

    按下「全部刪除(…)」後,伺服器會逐個檔案刪除,並回報它實際做了什麼:

    • 「已刪除 … 個檔案,釋放 …。」— 真正刪掉的數量與釋放的空間。
    • 「… 個檔案因為太新而保留——它們可能還在傳送途中。」— 只在真的有保留時才出現。
    • 「… 個檔案的名稱未通過安全檢查,已略過。」— 同樣只在真的有時才出現。

    刪除完成後,清單會重新向伺服器確認一次而不是直接清空(被保留下來的檔案本來就還在,清空會把它們藏起來)。刪除進行中「掃描」按鈕會停用,避免兩邊互相干擾。

    如果刪除中途出錯,橫幅寫的是「刪除未完成」而不是「檔案未變動」—— 伺服器是一個一個刪的、沒有整批回復的機制,所以連線斷掉時客戶端無法知道究竟刪掉了幾個。出錯後清單一樣會重新向伺服器確認一次,確認成功時這條橫幅會附上「檔案清單已重新向伺服器確認。」,下方清單就是實際狀態;沒附上這句時,重新掃描一次就能看到實際狀態。

    從儀表板分頁往下捲,孤兒檔案下一段是「伺服器更新」,標題左側有一個下載圖示。這段用來查看目前版本、決定要不要接收預覽版,並在有新版本時下載與套用。

    最上面一列是「目前版本」,右側顯示這座伺服器目前的版本字串;還沒載入時顯示「—」。

    下方一塊卡是「接收預覽版更新」,旁邊一句說明:「啟用後,檢查更新時也會包含預覽版(Pre-release)。預覽版可能包含未完成或不穩定的功能。」

    這裡有一顆開關,按一下就立即切換。打開後,下方會多出一條黃色提醒,逐字寫著:「⚠ 預覽版可能包含尚未完成的功能或已知問題,建議僅用於測試環境。」

    這個開關實際決定的是「檢查更新時會提供哪一個版本」:

    • 開啟 — 從所有合格的版本裡挑版本號最高的那一個,預覽版也算在內。
    • 關閉 — 只看穩定版,提供其中最新的那一個。

    開關預設是關閉的。每次切換後,更新區會回到還沒檢查的樣子,要再按一次「檢查更新」,才會照新的設定檢查。

    要注意的是,判斷「有沒有新版」看的是執行檔本身有沒有變,而不是版本號的大小。這帶來三個實務上的結果:

    • 同一個版本號重新發布過(版本號沒變、執行檔重建)時,這裡仍然會出現更新 —— 那確實是不同的執行檔。
    • 目前跑預覽版、開關關閉時,「檢查更新」會提供最新的穩定版,即使它的版本號比目前低。這就是從預覽版換回穩定版的做法:關掉開關、按「檢查更新」,再照下方的步驟下載並套用。
    • 反過來,目前跑穩定版、把開關打開之後,只要有比最新穩定版更新的合格預覽版,「檢查更新」就會提供它。

    如果這座伺服器跑的是你自己下載的預覽版(一開始就用預覽版架設,或後來手動換上;可從官網下載頁的「版本」選單下載,見《速架設指南》§4.2),記得也把這個開關打開,之後的「檢查更新」才會繼續提供新的預覽版。

    按下「檢查更新」後,更新區會依檢查結果顯示不同內容。檢查過程中先顯示「檢查中…」。

    如果已經是最新,會顯示帶勾的「已是最新版本」,後面附上「上次檢查」與時間。

    如果這座伺服器跑在容器中,更新區會改顯示帶鯨魚圖示的「由 Docker 管理」,並附一段說明:「此 server 跑在容器中,已停用 app 內自動更新。請改用 docker pull 取得新 image、再重建容器即可更新;資料保存在 volume 不會遺失。」下方還有一段可以全選複製的指令:

    docker compose pull && docker compose up -d

    跑在容器中的伺服器就照這段指令更新——拉取新版、重建容器即可,原有資料會保留不會遺失。

    如果有可用更新,會出現帶上箭頭的「有新版本可用!」區塊,列出「最新版本」、「檔案大小」、「發布時間」,並附一段可展開查看的更新說明。要更新就按「下載更新」,過程中會看到「下載中」、「驗證中」等階段的進度與剩餘時間。

    下載的檔案會自動以 SHA256 比對驗證。萬一自動驗證沒過,會出現帶警示符號的「SHA256 自動驗證失敗」,提示寫著:「可能是網路暫時問題或 SHA256SUMS.txt 還沒上傳。請前往 GitHub Release 頁面手動比對下列雜湊值,若與 release 頁面上的雜湊相符,可選擇「略過驗證並套用」。」這時可以按「開啟 GitHub Release 頁面」連結,到該頁手動核對雜湊;核對相符後按紅色的「已手動核對,略過驗證並套用」繼續,或按「丟棄已下載更新」、「取消」放棄這次更新。

    下載並驗證完成後,會顯示帶勾的「下載完成,已驗證」,旁邊出現黃色的「套用更新」按鈕。按下後進入確認態,黃框警告逐字寫著:「將中斷所有使用者連線並重啟伺服器,是否繼續?」確認鈕是紅色的「確定套用更新」,另有「取消」。套用過程中顯示「正在更新伺服器…」。

    請挑使用者較少的低峰時段套用更新,套用前一定先到上方的「備份」區段按「建立備份」(§11.3)。

    在 Linux 上,按下「確定套用更新」之後,伺服器會換上新版本並重新啟動,期間所有使用者的連線會中斷。以 systemd 服務執行的伺服器,重新啟動由 systemd 負責,服務設定要用 Restart=always(服務設定見《速架設指南》§4.5;套用後沒有回來時見本手冊 §12.2)。新版本啟動後,所有成員都會收到一則「系統更新」通知:「已從 … 更新至 …」。

    以單一執行檔架設的伺服器,在你按「檢查更新」與「下載更新」時,會連到 HakoSpace 的軟體發佈來源 dl.hakospace.com 查詢與下載新版本;那裡無法使用時,會自動改連 GitHub。伺服器只有在你按下這兩顆按鈕時,才會為了更新而對外連線。伺服器的對外連線受防火牆限制時,要放行的網域見 §12.2。

    從儀表板分頁捲到最下方,是「伺服器操作」。旁邊一句說明:「執行伺服器管理操作。重啟期間伺服器將暫時無法使用。」

    目前提供的操作是重啟,按鈕是黃色的「重新啟動」,採兩段式確認,避免誤觸:

    • 第一次按「重新啟動」會進入確認態,旁邊出現「確定要執行嗎?」。
    • 確認態會出現紅色的「確認」與一顆「取消」。按「確認」才會執行,按「取消」放棄;執行過程中按鈕顯示忙碌。

    在 Linux 上,按「確認」之後伺服器會重新啟動,期間暫時無法使用,請在使用者較少時操作。以 systemd 服務執行的伺服器,重新啟動由 systemd 負責,服務設定要用 Restart=always(見《速架設指南》§4.5)。