You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Packer动态修改模板生成Steam游戏服务器多实例的supervisord配置

可行实现方案

通过Packer的templatefile结合HCL循环逻辑即可实现动态生成多实例带不同query端口的supervisor配置,不需要手动编写每个实例的配置段,步骤如下:

1. 编写Supervisor配置模板

先创建模板文件supervisor_ue.tpl,内容如下:

%{ for instance_idx in range(instance_count) ~}
[program:dominionserver-${instance_idx + 1}]
command=/opt/game_server/DominionServer.sh -queryport=${query_port_start + instance_idx}
stopasgroup=true
user=ubuntu
stdout_logfile=/opt/game_server/logs/supervisor/ueserver/%(program_name)s_stdout.log
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stderr_logfile=/opt/game_server/logs/supervisor/ueserver/%(program_name)s_stderr.log
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10

%{ endfor ~}

模板内置2个可传入的变量:

  • instance_count:需要启动的UE服务实例总数
  • query_port_start:query端口的起始值,后续实例端口自动依次+1

2. 在Packer HCL中渲染模板并写入镜像

在你的Packer构建配置中,先定义相关变量,再通过templatefile函数渲染模板,将生成的配置写入到镜像的supervisor配置目录下,示例配置如下:

# 定义可配置变量,构建时可动态传入
variable "ue_instance_count" {
  type    = number
  default = 4 # 默认4个实例,可根据服务器规格调整
}

variable "ue_query_port_start" {
  type    = number
  default = 27015 # 默认起始端口
}

source "..." {
  # 你的原有source配置保持不变
}

build {
  sources = ["..."]
  # 原有其他provisioner保持不变
  
  # 新增:渲染supervisor配置并写入镜像
  provisioner "file" {
    content = templatefile("${path.root}/supervisor_ue.tpl", {
      instance_count    = var.ue_instance_count
      query_port_start  = var.ue_query_port_start
    })
    destination = "/etc/supervisor/conf.d/ueserver.conf"
  }
}

3. 配置说明

  • 原有基于numprocs的配置方式无法为每个进程传递独立的端口参数,因此改为循环生成独立program配置段的方案,完全符合supervisor的配置规范
  • 需要调整实例数时,只需修改ue_instance_count变量的值即可,无需改动模板或其他配置
  • 构建镜像时可通过-var "ue_instance_count=8"的方式动态传入实例数,适配不同配置的服务器

内容的提问来源于stack exchange,提问作者nikolaigauss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:45:03