專案總覽
專案簡介
MC-Server-Framework 是一個模組化 Python CLI 框架,用於管理本地 Minecraft Java 版伺服器。涵蓋完整的伺服器生命週期管理——從啟動停止到備份、動態 DNS 更新、NAT 穿透與遠端控制台存取——並可打包為 Windows 獨立執行檔。
核心理念
零依賴部署:透過 PyInstaller 打包為單一 EXE,終端使用者無需安裝 Python
多實例管理:從單一 CLI 管理多個 Minecraft 伺服器實例,各自擁有獨立設定
網路可及性:內建 DDNS 與隧道整合,解決家用伺服器的連線難題(CGNAT、動態 IP)
我的職責
作為本專案唯一開發者,我負責:
系統架構設計
設計基於 Typer 框架的模組化 CLI 架構
規劃基於 YAML 的逐伺服器設定系統
設計搭配策略式保留的備份系統
核心功能實作
伺服器生命週期:多實例的啟動、停止、重啟、狀態監控
Java 管理:逐伺服器 Java 版本切換搭配自動註冊
備份系統:策略式備份搭配可設定保留(份數或天數)、包含/排除篩選
DNS 整合:Cloudflare(A + SRV 紀錄)與 DuckDNS 動態 DNS 更新
NAT 穿透:PlayIt.gg 隧道整合用於繞過 CGNAT
遠端控制台:RCON 客戶端用於遠端伺服器管理
系統診斷:互動式選單搭配健康檢查與首次執行初始化
核心功能
1. 多實例伺服器管理
每個伺服器實例擁有自己的目錄與
server.yml設定框架自動掃描與發現伺服器實例
支援 Forge 1.17+ 特殊啟動模式
2. Java 版本管理
java_registry.yml追蹤可用 Java 安裝逐伺服器 Java 版本指派
自動路徑解析與驗證
3. 策略式備份系統
可設定保留:保留最近 N 份備份或 N 天內的備份
包含/排除檔案模式篩選
壓縮封存輸出
4. 動態 DNS 整合
Cloudflare:A 紀錄 + SRV 紀錄更新(讓玩家不需輸入埠號即可連線)
DuckDNS:簡單 A 紀錄更新
伺服器啟動時自動偵測 IP 並更新
5. PlayIt.gg 隧道(CGNAT 繞過)
整合隧道管理,讓處於電信級 NAT 後的玩家也能連線
隧道隨伺服器生命週期自動建立與關閉
6. RCON 遠端控制台
內建 RCON 客戶端用於遠端伺服器管理
支援互動模式與命令列模式
使用技術
核心
Python 3.8+:主要開發語言
Typer:CLI 框架搭配自動產生說明
Rich:終端 UI 搭配格式化輸出、進度條、表格
基礎設施
PyYAML:設定管理
Requests:HTTP 客戶端用於 Cloudflare 與 DuckDNS API
psutil:程序監控與管理
建構與發行
PyInstaller:獨立 EXE 打包(約 30-50 MB)
PowerShell:建構腳本(
build.ps1)
專案狀態
目前版本:v0.2.0(Phase 2)
✅ Phase 1:核心伺服器管理、Java 管理、備份系統、CLI
✅ Phase 2:RCON、PlayIt.gg 隧道、互動式選單、系統診斷、首次執行初始化
🔄 Phase 3(規劃中):自動辨識伺服器類型、排程備份、當機自動重啟、日誌串流
開發挑戰與成就
1. CGNAT 繞過方案
挑戰:許多家用網路使用 CGNAT,無法直接進行連接埠轉發。
解法:整合 PlayIt.gg 隧道服務,隧道隨伺服器啟停自動管理。
2. 零依賴發行
挑戰:終端使用者不應該需要安裝 Python 或管理依賴。
解法:PyInstaller 打包產生包含所有依賴的單一 EXE,以 ZIP 壓縮包發行。
3. SRV 紀錄自動化
挑戰:玩家不喜歡為非標準 Minecraft 埠輸入埠號。
解法:自動化 Cloudflare SRV 紀錄建立搭配 A 紀錄,讓玩家只需輸入網域名稱即可連線。
未來規劃
Phase 3(v0.3.0)
自動偵測伺服器類型(Paper、Fabric、NeoForge 等)
排程備份(類 cron)
當機自動重啟搭配可設定重試策略
日誌彙總與即時串流
專案亮點
技術創新
✅ 整合 DDNS + SRV 紀錄自動化實現無縫多人連線
✅ PlayIt.gg 隧道整合解決 CGNAT 可及性
✅ 策略式備份系統搭配彈性保留規則
使用者體驗
✅ 單一 EXE 發行——零安裝需求
✅ 搭配 Rich 的互動式 CLI 終端 UI
✅ 首次執行初始化精靈快速上手
技術棧:Python 3.8+、Typer、Rich、PyInstaller、Cloudflare API、PlayIt.gg 發行方式:Windows 獨立 EXE(約 30-50 MB) 目前階段:Phase 2 完成,Phase 3 規劃中