From ed5d3bf7484c5d2dde61aefa0d6b56c95aac584b Mon Sep 17 00:00:00 2001 From: yxsj245 <17737475682@163.com> Date: Sun, 9 Aug 2026 21:34:33 +0800 Subject: [PATCH] =?UTF-8?q?feat(apps):=20=E6=B7=BB=E5=8A=A0=20gsmanager=20?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=8F=8A=E5=85=B6=E9=85=8D=E7=BD=AE=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/gsmanager/app.json | 117 +++++++++++++++++++++++ apps/gsmanager/icon.png | Bin 0 -> 4083 bytes apps/gsmanager/latest/.env | 6 ++ apps/gsmanager/latest/docker-compose.yml | 37 +++++++ 4 files changed, 160 insertions(+) create mode 100644 apps/gsmanager/app.json create mode 100644 apps/gsmanager/icon.png create mode 100644 apps/gsmanager/latest/.env create mode 100644 apps/gsmanager/latest/docker-compose.yml diff --git a/apps/gsmanager/app.json b/apps/gsmanager/app.json new file mode 100644 index 00000000..90a6c456 --- /dev/null +++ b/apps/gsmanager/app.json @@ -0,0 +1,117 @@ +{ + "appid": -1, + "appname": "gsmanager", + "apptitle": "GSManager-游戏服务端一键部署面板", + "apptype": "Tools", + "appTypeCN": "实用工具", + "appversion": [ + { + "m_version": "latest", + "s_version": [] + } + ], + "appdesc": "GameServerManager 3.0(简称GSM3)是一个基于现代化技术栈的游戏服务器管理平台,采用 React + TypeScript + Node.js 架构,专为简化游戏服务器的部署、管理和维护而设计。", + "appstatus": 1, + "home": "https://github.com/GSManagerXZ/GameServerManager", + "help": "http://docs.gsm.xiaozhuhouses.asia/", + "updateat": 1784968552, + "depend": null, + "field": [ + { + "attr": "domain", + "name": "域名", + "type": "textarea", + "default": "", + "suffix": "浏览器访问的域名,非必填", + "unit": "" + }, + { + "attr": "allow_access", + "name": "允许外部访问", + "type": "checkbox", + "default": true, + "suffix": "允许直接通过主机IP+端口访问", + "unit": "" + }, + { + "attr": "gsm_web_port", + "name": "web管理端口", + "type": "number", + "default": 3001, + "suffix": "GSManager的web管理面板端口", + "unit": "" + }, + { + "attr": "game_port", + "name": "游戏服务器端口", + "type": "number", + "default": 27015, + "suffix": "游戏服务端默认端口,可按需在面板中映射更多端口", + "unit": "" + }, + { + "attr": "cpus", + "name": "cpu核心数限制", + "type": "number", + "default": 0, + "suffix": "0为不限制,最大可用核心数为: ", + "unit": "" + }, + { + "attr": "memory_limit", + "name": "内存限制", + "type": "number", + "default": 0, + "suffix": "0为不限制,最大可用内存为: ", + "unit": "" + } + ], + "env": [ + { + "key": "gsm_web_port", + "type": "port", + "default": null, + "desc": "web管理端口" + }, + { + "key": "game_port", + "type": "port", + "default": null, + "desc": "游戏服务器端口" + }, + { + "key": "app_path", + "type": "path", + "default": null, + "desc": "应用数据目录" + }, + { + "key": "host_ip", + "type": "string", + "default": null, + "desc": "主机IP" + }, + { + "key": "cpus", + "type": "number", + "default": null, + "desc": "CPU核心数限制" + }, + { + "key": "memory_limit", + "type": "number", + "default": null, + "desc": "内存大小限制" + } + ], + "volumes": { + "game_data": { + "type": "path", + "desc": "Steam用户数据目录" + }, + "game_file": { + "type": "path", + "desc": "游戏文件目录" + } + } +} diff --git a/apps/gsmanager/icon.png b/apps/gsmanager/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b548bc194f8b4245181cb313fab53cf5fa5d86bb GIT binary patch literal 4083 zcmY*cX*iVc+a5~{*_)=a4^u`)i7DHlVaAdWniy+}ke$eu>_Q^DY}rO6WS6~U9rUv^ z*~!i@*|-1Gr}ub2T=#t(&vswec`fJpgg?+$V`b)M27y4V8tPa*V7L5dUy|+BhLjm7vHkZ#l$pAk>^1lZO5Hi zIa#o`uFV(7T;cQ}LH=mE(rS)GD_F!V*IDi=50-`=iz!3W zf#4dnAX0Cy5OCC+Y)>A4U9GNgY_r@T zRG5fdBrdZf+>p06mNRVs@dx7V*UGw(9D=$`i6OxT6L-q+6_RKr{X-)>3j<7SAT$%J&C{qm_)7>eB(E1h}3od^9kt2{xwx zrDmC>9Klk>?BcdoSSa@{8uo|t#dS_2_4h50V2AF$Qr|UlrRn)JeAx-GMCkkPIAtWg z-xv5_7%ubyOp~QaQTn0!dl+CXFGqQv*m9~8G~Y^eePiP+-n}7Qk0l%~&fIV4;E>z7 z`aQdNHxydtS{hZheNex1xyJE37|ji`m;-tDJ%>O z4765cwH)2wzSJIsxOnB?M|gaT3$Ne7!XCxugM&0JF)=|UW|Sw&E@pitNwVq+jBaAu>wt0_FXQQ?dtC4Tci;d7PfJ6 zYM*TIQTT7Cf09wa*B>yBPD?#9Zu(Nd_sQjDTNYN`V{dSkw`SI;( z2>m~=8;>?r)YQ}-k2?aWg|Q2?t*s%SJ$vRmvNx0-78**~Y8RN>?WwkdW^G!er>6sF zFg%`;Uq6l%1doA#_&kf-hME}94kRd{Bo+1Y)5^xD;x3#B!; zGh#l1j5Ab~OK-cNgAPzS-B-z>4jVho06Arpa5}hIPoeep@u`%IRyvh2^IpChr48r8 zNTy(|twnY>r=rD;t7^8NhnAEYBw7uQj2M&TQ+sABN6dccD4hf+CPK|cPf%LM{Xm^n z+NZ?9nM_ShKNT0NdU<(az7-Y*VU3Z{N7b?4edxR_6|`Qr1+|OXA^7*@)-& zvTV8g6!v)A+S-0iP8KsYFXx^s5s^@jrGGb9krh^PDY|{e%B|3}uCOqWXhY%6-x7@w z>P?dk%E;iipR6a;=?tJO3B%(e26#MYlqzTBPmai+zXk_`r6)b<@^vy*B~u1>S-80U zIBk}(POw@NHl?%U@;fLbbnQ-pH=f8t(oKhJEG;j$9PX@&=LGVw(|1~Oq5I~5l7Ti| zgkS7<8UK@tMnv?7UTMf%x^hj*Tq?-SWgX1?g-;hk6Kx&2pCzUdtKwNCl-Xz3sOkhe z-0fV;Fsule0#OurB#+psdnPx+re2>-=;hx#@?73Au+W*Z4eyXQ zeYtPeEu;_terpo$e|U8C_0^FFfF$`)>6k)y!=%O^$d3fe9Kx_aZYM$m&ZV9|ker(8 zc8vMY1|t32IcQE1iql0N%ZHo-m@2k7%Jlz0UebkJ(t$Z5EMeJ**{m>rWi72JhZ8k^ zFM73Tew>aD`}p|y10$oA0w9nrl2qSxxqiNclNf#caHhz$Yrx>2sp(j35IN!`-oE~V zxXL!g3~OlnBBCBUFGIDu%y6{3{^OFlZ$NSJ4g23UoOZ)Sx8lQ9b1w7nsHms}Wr;|m zP#>v1(yUhDf*o+lq;89|)04}5d^l6n^blz!sB#gclz9a0Bx(FN`_JyTte6mvKg?M< zIdqKd{H^=@GNEB%tbHr1t1h#xOh5x3Sh0UKWMO3EZT|Zgb?w?UWZ!!5CXu6rB6R5{ zIF|z`mS`{gAvInPfsDl#DjKe#Y-cCN#wSOQ)1?4yZ`&)Ea{tNtc%_W%JeWu%R(N1_ z2Up^v4;tYbpNfiF8($qspwVyb@7Pg36pQicuQl{0<-r0eo=5fRL&+tM?$6kO2sb342Lrlz9j+M}OtPBtJ!MYsM2 zfw_5jzFPP3r=h*LUQW0tc}&%X>_^T%B8AD|2)SETRd;|034WF@UrKv>ds7DWb*}Ip z4BhfQJ!WsvyW=n(JUMBWCg;u^6%|$Nds|wXC-EUx7pt#-fgU3PR!y|(iB&(+4s?qw zd;1ZoXi3OHHk?Zl&#kC{di$_VJPTJKj=D zlYiNpkY8AMoma-W`EJr*qZ9bhKljS)7qz-?v;U{2tKHj;Gzql;0G~)j3u7s_BX?sdN}64&0w$h2Su{5DL1ahsTlt$bxqypS<&TBWwIW zyIra4eKOLR8nX0?b{c6(uB--uEn$Ziz~k`=2^KG24C*V?nN^oM3{%}33^$Y)VcPXK z64|%DaAYiE1}b11uTKvaZ%IpswX|SVqD2GKlDY#Hz0|IX zM(9y;3JYh_!;#(NJ}h-1cb~ul1@CguQ_!0T8NEkmE=F(Q!?~GG;s-G}v(G@B&aMj! z3!aC|`CDVwnKMV5P1Rq>zkk0~6L>YayAYeQ1$2I6qoR4|OMr}n;2Mc4ay=>;22HaM zhqXG&kUZO<#1~K0bs@uFjKhF7LLbb>CDsdvT9o?iZ5(_}9IW%W-J}GIfio??;C`=8 z9}5q#xO`t*I~&jn04vJAT%2GFoYOX}H+b&a=27tY&v2Z4X;KH#hfB zXvB8H$H`oE<+U=86r^bM6gkh6k!;Gx#ELk)Dsz$8U=!?jIN+@8; zDm83yXebMi;UYR2EEPgzGC6V}Uni%k3hM6eUS$R4@?vFUn>{|D+BiB^p{d+fvN*Dt zID9E)fvgNxfs0O4`;-9cWxQiQ3Tj@$?vUcXCR^@IxOR&RE|O9)f5Z;GLJa0zWqnU} zMr>?tF(~fJ`f3U59+370{jMjlR@e3Ib6_n6Q$pe^9Z%6vi_^IK*PNaZhMn&h9dx+l zpK+#q`0%~C**~A|4IYof;m#Qu8}mhTJj7otFE0m5Un;pN6TY#s@?3n*v?QjpQzKVT zR5P3QheXYK75RalUiL(t?}21!XeiPFP;&rfjWwTjbb#C1+r`mk$VmCkdVM>ADnIZJSxIR>{5jiqzpuWpwLUYwN|?*2V><{w zg9Cu>WNoM-rNV=VmB)mcA?su{?z&C6lt_m2gi&oG2j;G7jvZ8zLl?4;nTmKmr!JpV z7q!;7x;mQf?BMszV0by@f@$^C+>xu8fr9Y& zvHjpkL|o^F&*LFhm@LU#J9*626H7N4Hc?t}bZl6hE(47(<21_Oe0}AZJ?|i2(Y}`~ R2>iu^G;rG3V&%ty{{u$D$(8^B literal 0 HcmV?d00001 diff --git a/apps/gsmanager/latest/.env b/apps/gsmanager/latest/.env new file mode 100644 index 00000000..67ce1236 --- /dev/null +++ b/apps/gsmanager/latest/.env @@ -0,0 +1,6 @@ +GSM_WEB_PORT= +GAME_PORT= +HOST_IP= +CPUS= +MEMORY_LIMIT= +APP_PATH= diff --git a/apps/gsmanager/latest/docker-compose.yml b/apps/gsmanager/latest/docker-compose.yml new file mode 100644 index 00000000..84bd41d3 --- /dev/null +++ b/apps/gsmanager/latest/docker-compose.yml @@ -0,0 +1,37 @@ +volumes: + gsm3_data: + driver: local +services: + gsmanager: + image: xiaozhu674/gameservermanager:latest + user: root + deploy: + resources: + limits: + cpus: ${CPUS} + memory: ${MEMORY_LIMIT} + ports: + - ${HOST_IP}:${GSM_WEB_PORT}:3001 + - ${HOST_IP}:${GAME_PORT}:27015 + volumes: + - ${APP_PATH}/game_data:/home/steam/.config + - ${APP_PATH}/game_data:/home/steam/.local + - ${APP_PATH}/game_file:/home/steam/games + - ${APP_PATH}/game_data:/root/.config + - ${APP_PATH}/game_data:/root/.local + - ${APP_PATH}/game_file:/root/steam/games + - gsm3_data:/root/server/data + environment: + - TZ=Asia/Shanghai + - SERVER_PORT=3001 + stdin_open: true + tty: true + restart: unless-stopped + labels: + createdBy: "bt_apps" + networks: + - baota_net + +networks: + baota_net: + external: true