「幻兽帕鲁5天爆卖15亿」 用Terraform一分钟搭建自己专属的《幻兽帕鲁》世界

本文涉及的产品
公网NAT网关,每月750个小时 15CU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 幻兽帕鲁是一款多人在线的全新开放世界生存游戏。随着游戏越来越火爆,出现了很多搭建游戏服务器的需求。对于游戏玩家或者游戏运营商,有没有简单高效地在云上部署幻兽帕鲁游戏服务器方式呢?本文基于 Terraform 提供了一种自动化在阿里云上部署幻兽帕鲁的方案,用户通过简单的配置文件,即可在数分钟内完成游戏服务器的搭建。

幻兽帕鲁是一款多人在线的全新开放世界生存游戏。随着游戏越来越火爆,在线人数的激增导致官方服务不稳定,影响玩家游戏体验。对于游戏玩家或者游戏运营商,有没有简单高效地在云上部署幻兽帕鲁游戏服务器方式呢?本文基于 Terraform 提供了一种自动化在阿里云上部署幻兽帕鲁的方案,用户通过简单的配置文件,即可在数分钟内完成游戏服务器的搭建。

image.png


1. 快速开始

1.1. 安装 Terraform

参阅《在本地安装和配置Terraform》一文安装并配置环境。

1.2. 配置模板 📝

在任意一个目录中创建一个 main.tf 文件,将如下内容写入其中:

provider "alicloud" {
  region  ="cn-hangzhou"}
variable "name" {
  default ="terraform-palworld"}
data "alicloud_zones""example" {
  available_resource_creation ="Instance"}
resource "alicloud_vpc""example" {
  vpc_name   = var.name
  cidr_block ="10.4.0.0/16"}
resource "alicloud_vswitch""example" {
  vswitch_name = var.name
  cidr_block   ="10.4.0.0/24"  vpc_id       = alicloud_vpc.example.id
  zone_id      = data.alicloud_zones.example.zones.0.id
}
resource "alicloud_security_group""example" {
  name   = var.name
  vpc_id = alicloud_vpc.example.id
}
resource "alicloud_security_group_rule""allow_all_tcp" {
  type              ="ingress"  ip_protocol       ="all"  nic_type          ="intranet"  policy            ="accept"  port_range        ="8211"  priority          =1  security_group_id = alicloud_security_group.example.id
  cidr_ip           ="0.0.0.0/0"}
data "alicloud_instance_types""enhance" {
  availability_zone = data.alicloud_zones.example.zones.0.id
  cpu_core_count    =8  memory_size       =32}
data "alicloud_images""example" {
  name_regex ="^ubuntu_[0-9]+_[0-9]+_x64*"  owners     ="system"}
resource "alicloud_instance""enhance" {
  availability_zone = data.alicloud_zones.example.zones.0.id
  instance_name     ="terraform-palworld"  image_id          = data.alicloud_images.example.images.0.id
  instance_type     = data.alicloud_instance_types.enhance.instance_types.0.id
  security_groups   = [alicloud_security_group.example.id]
  vswitch_id        = alicloud_vswitch.example.id
  user_data         ="IyEvYmluL2Jhc2gKY2F0Pmluc3RhbGwuc2g8PEVPRgojIS9iaW4vYmFzaApzdGVhbV91c2VyPXN0ZWFtCmxvZ19wYXRoPS90bXAvcGFsX3NlcnZlci5sb2cKc3VkbyB1c2VyYWRkIC1tIC1zIC9iaW4vYmFzaCBcJHN0ZWFtX3VzZXIKc3VkbyBhZGQtYXB0LXJlcG9zaXRvcnkgbXVsdGl2ZXJzZSAteSA+IFwkbG9nX3BhdGgKc3VkbyBkcGtnIC0tYWRkLWFyY2hpdGVjdHVyZSBpMzg2ID4+IFwkbG9nX3BhdGgKc3VkbyBhcHQgdXBkYXRlIC15ID4+IFwkbG9nX3BhdGgKc3VkbyBhcHQtZ2V0IHJlbW92ZSBuZWVkcmVzdGFydCAteSA+PiBcJGxvZ19wYXRoCmVjaG8gc3RlYW0gc3RlYW0vbGljZW5zZSBub3RlICcnIHwgc3VkbyBkZWJjb25mLXNldC1zZWxlY3Rpb25zIAplY2hvIHN0ZWFtIHN0ZWFtL3F1ZXN0aW9uIHNlbGVjdCAiSSBBR1JFRSIgfCBzdWRvIGRlYmNvbmYtc2V0LXNlbGVjdGlvbnMgCnN1ZG8gYXB0IGluc3RhbGwgc3RlYW1jbWQgLXkgPj4gXCRsb2dfcGF0aApzdWRvIGVjaG8gInN0ZWFtICAgQUxMPShBTEw6QUxMKSBBTEwiID4+IC9ldGMvc3Vkb2VycwpzdWRvIGxuIC1zIC91c3IvZ2FtZXMvc3RlYW1jbWQgL3Vzci9iaW4vc3RlYW1jbWQKc3RlYW1jbWQgK3F1aXQKc3RlYW1fdXNlcl9wYXRoPS9ob21lL3N0ZWFtCnN0ZWFtY21kX3BhdGg9XCQod2hpY2ggc3RlYW1jbWQpCnN1ZG8gLXUgXCRzdGVhbV91c2VyIG1rZGlyIC1wIFwkc3RlYW1fdXNlcl9wYXRoLy5zdGVhbS9zZGs2NC8gPj4gXCRsb2dfcGF0aApzdWRvIC11IFwkc3RlYW1fdXNlciBcJHN0ZWFtY21kX3BhdGggK2xvZ2luIGFub255bW91cyArYXBwX3VwZGF0ZSAyMzk0MDEwIHZhbGlkYXRlICtxdWl0ID4+IFwkbG9nX3BhdGgKc3VkbyAtdSBcJHN0ZWFtX3VzZXIgY3AgXCRzdGVhbV91c2VyX3BhdGgvU3RlYW0vc3RlYW1hcHBzL2NvbW1vbi9QYWxTZXJ2ZXIvbGludXg2NC8qIFwkc3RlYW1fdXNlcl9wYXRoLy5zdGVhbS9zZGs2NC8Kc3VkbyAtdSBcJHN0ZWFtX3VzZXIgbm9odXAgL2hvbWUvc3RlYW0vU3RlYW0vc3RlYW1hcHBzL2NvbW1vbi9QYWxTZXJ2ZXIvUGFsU2VydmVyLnNoID4+IFwkbG9nX3BhdGgKRU9G"}
resource "alicloud_eip_address""enhance" {
  address_name ="terraform-palworld"  bandwidth    =100}
resource "alicloud_eip_association""enhance" {
  allocation_id = alicloud_eip_address.enhance.id
  instance_id   = alicloud_instance.enhance.id
}
output "ip_address" {
  value = alicloud_eip_address.enhance.ip_address
}
resource "alicloud_ecs_command""command" {
  name ="start-palworld"# base64 encode: nohup sudo bash /install.sh &  command_content ="bm9odXAgc3VkbyBiYXNoIC9pbnN0YWxsLnNoICY="  description     ="For Terraform Palworld"  type            ="RunShellScript"  working_dir     ="/root"}
resource "alicloud_ecs_invocation""run-command" {
  command_id  = alicloud_ecs_command.command.id
  instance_id = [alicloud_instance.enhance.id]
}

1.3. 一键启动 🚀

在命令行中执行 terraform apply -auto-approve,之后只需要等待半分钟左右,恭喜你拥有一个幻兽帕鲁的游戏私服器!命令行中最后一行输出了公网IP地址即服务端的地址:

在游戏客户端中将上一步骤中输出的IP地址填入:

点击连接后即可登陆到游戏中同好友一起愉快玩耍 ~

1.4. 一键释放 ♻️

在命令行中执行 terraform destroy,即可轻松、自动地销毁所有云上资源,不会有任何资源残留:

2. 实现过程

Terraform 是一个广泛使用的 IaC 工具,它允许开发者通过代码描述和管理基础设施资源,不同的 Provider 集成了不同云厂商的 OpenAPI 服务:

阿里云是 Hashicorp Terraform 的重要合作伙伴之一,目前阿里云的 Terraform Provider 已覆盖一百二十多款产品、七百多个资源类型,在覆盖度上已经基本涵盖了云产品的各类服务。本教程使用阿里云 Terraform Provider 进行游戏服务器的自动化部署。

2.1. 架构规划

作为一个简单的教学案例,本架构采用单地域单可用区部署(如图所示的右侧链路),在一个可用区中部署了ECS实例作为游戏服务器。该架构利用专有网络 VPC、交换机和安全组以及 EIP 等基础设施,实现了公网环境下的系统通信。如果考虑长期运营和持续发展,可以考虑基于CLB的负载均衡,随着业务压力变大增加计算资源(如图左侧所示)。

2.2. 代码实现

完成云上的基础设施架构规划后,即可到 阿里云 Terraform 文档中心 寻找需要资源类型使用文档。以 EIP 产品下的资源 alicloud_eip_association 为例,文档详细地给出了该资源类型属性说明和示例:

除了创建云上基础设施,我们还需要在创建出来的 ECS 实例中部署游戏服务程序以提供游戏服务。这里用到的游戏安装脚本如下:

#!/bin/bashsteam_user=steam
log_path=/tmp/pal_server.log
sudo useradd -m-s /bin/bash $steam_usersudo add-apt-repository multiverse -y > $log_pathsudo dpkg --add-architecture i386 >> $log_pathsudo apt update -y >> $log_pathsudo apt-get remove needrestart -y >> $log_pathecho steam steam/license note '' | sudo debconf-set-selections 
echo steam steam/question select "I AGREE" | sudo debconf-set-selections 
sudo apt install steamcmd -y >> $log_pathsudoecho"steam   ALL=(ALL:ALL) ALL" >> /etc/sudoers
sudoln-s /usr/games/steamcmd /usr/bin/steamcmd
steamcmd +quit
steam_user_path=/home/steam
steamcmd_path=$(which steamcmd)sudo-u$steam_usermkdir-p$steam_user_path/.steam/sdk64/ >> $log_pathsudo-u$steam_user$steamcmd_path+login anonymous +app_update 2394010 validate +quit >> $log_pathsudo-u$steam_usercp$steam_user_path/Steam/steamapps/common/PalServer/linux64/* $steam_user_path/.steam/sdk64/
sudo-u$steam_user nohup $steam_user_path/Steam/steamapps/common/PalServer/PalServer.sh >> $log_path

我们通过alicloud_instance 这一资源上 user_data 字段,将游戏服务的安装脚本进行 base64 编码导入到 ECS 实例中。然后通过 alicloud_ecs_commandalicloud_ecs_invocation 这两个资源类型,通过执行 nohup sudo bash /install.sh & 来启动安装脚本。

resource "alicloud_instance""enhance" {
  availability_zone = data.alicloud_zones.example.zones.0.id
  instance_name     ="terraform-palworld"  image_id          = data.alicloud_images.example.images.0.id
  instance_type     = data.alicloud_instance_types.enhance.instance_types.0.id
  security_groups   = [alicloud_security_group.example.id]
  vswitch_id        = alicloud_vswitch.example.id
# 这里定义了安装脚本,base64反编码即可取到脚本文件  user_data         ="IyEvYmluL2Jhc2gKY2F0Pmluc3RhbGwuc2g8PEVPRgojIS9iaW4vYmFzaApzdGVhbV91c2VyPXN0ZWFtCmxvZ19wYXRoPS90bXAvcGFsX3NlcnZlci5sb2cKc3VkbyB1c2VyYWRkIC1tIC1zIC9iaW4vYmFzaCBcJHN0ZWFtX3VzZXIKc3VkbyBhZGQtYXB0LXJlcG9zaXRvcnkgbXVsdGl2ZXJzZSAteSA+IFwkbG9nX3BhdGgKc3VkbyBkcGtnIC0tYWRkLWFyY2hpdGVjdHVyZSBpMzg2ID4+IFwkbG9nX3BhdGgKc3VkbyBhcHQgdXBkYXRlIC15ID4+IFwkbG9nX3BhdGgKc3VkbyBhcHQtZ2V0IHJlbW92ZSBuZWVkcmVzdGFydCAteSA+PiBcJGxvZ19wYXRoCmVjaG8gc3RlYW0gc3RlYW0vbGljZW5zZSBub3RlICcnIHwgc3VkbyBkZWJjb25mLXNldC1zZWxlY3Rpb25zIAplY2hvIHN0ZWFtIHN0ZWFtL3F1ZXN0aW9uIHNlbGVjdCAiSSBBR1JFRSIgfCBzdWRvIGRlYmNvbmYtc2V0LXNlbGVjdGlvbnMgCnN1ZG8gYXB0IGluc3RhbGwgc3RlYW1jbWQgLXkgPj4gXCRsb2dfcGF0aApzdWRvIGVjaG8gInN0ZWFtICAgQUxMPShBTEw6QUxMKSBBTEwiID4+IC9ldGMvc3Vkb2VycwpzdWRvIGxuIC1zIC91c3IvZ2FtZXMvc3RlYW1jbWQgL3Vzci9iaW4vc3RlYW1jbWQKc3RlYW1jbWQgK3F1aXQKc3RlYW1fdXNlcl9wYXRoPS9ob21lL3N0ZWFtCnN0ZWFtY21kX3BhdGg9XCQod2hpY2ggc3RlYW1jbWQpCnN1ZG8gLXUgXCRzdGVhbV91c2VyIG1rZGlyIC1wIFwkc3RlYW1fdXNlcl9wYXRoLy5zdGVhbS9zZGs2NC8gPj4gXCRsb2dfcGF0aApzdWRvIC11IFwkc3RlYW1fdXNlciBcJHN0ZWFtY21kX3BhdGggK2xvZ2luIGFub255bW91cyArYXBwX3VwZGF0ZSAyMzk0MDEwIHZhbGlkYXRlICtxdWl0ID4+IFwkbG9nX3BhdGgKc3VkbyAtdSBcJHN0ZWFtX3VzZXIgY3AgXCRzdGVhbV91c2VyX3BhdGgvU3RlYW0vc3RlYW1hcHBzL2NvbW1vbi9QYWxTZXJ2ZXIvbGludXg2NC8qIFwkc3RlYW1fdXNlcl9wYXRoLy5zdGVhbS9zZGs2NC8Kc3VkbyAtdSBcJHN0ZWFtX3VzZXIgbm9odXAgL2hvbWUvc3RlYW0vU3RlYW0vc3RlYW1hcHBzL2NvbW1vbi9QYWxTZXJ2ZXIvUGFsU2VydmVyLnNoID4+IFwkbG9nX3BhdGgKRU9G"}
resource "alicloud_ecs_command""command" {
  name ="start-palworld"# 这里定义了启动命令,base64反编码为 nohup sudo bash /install.sh &  command_content ="bm9odXAgc3VkbyBiYXNoIC9pbnN0YWxsLnNoICY="  description     ="For Terraform Palworld"  type            ="RunShellScript"  working_dir     ="/root"}
resource "alicloud_ecs_invocation""run-command" {
  command_id  = alicloud_ecs_command.command.id
  instance_id = [alicloud_instance.enhance.id]
}

2.3. 镜像复用

通过上述的 Terraform 模板,我们可以快速在阿里云上创建出一台 ECS 实例,并且通过自动化的脚本安装好了幻兽帕鲁的游戏服务端。初次安装时会下载一系列的依赖软件程序,安装较为耗时,并且占用较大带宽资源。因此这里安装完成后,我们建议对进行该 ECS 实例进行镜像打包方便后续复用。这里我们同样可以通过 Terraform 来自动化构建这一个 ECS 镜像,仅需要五行即可创建出刚刚配置好的实镜像:

resource "alicloud_image""default" {
  instance_id       = alicloud_instance.default.id
  image_name        ="terraform-palworld"  description       ="terraform-palworld"}

之后,在同一账号下的在其它任意环境中即可通过 DataSource 查询的方式指定该镜像,不再需要执行游戏服务端的安装,可以直接复用镜像,真正做到秒级的一键启动。这种复用镜像的方式,游戏运营商可以做到高效、自动化地在分钟级别部署上百台游戏服务器

# 通过 name 的正则筛选找到打包的镜像data "alicloud_images""example" {
  name_regex ="^terraform-palworld$"}
# 创建新的实例resource "alicloud_instance""enhance" {
  availability_zone = data.alicloud_zones.example.zones.0.id
  instance_name     ="terraform-palworld"# 引用已打包出的镜像资源  image_id          = data.alicloud_images.example.images.0.id
  instance_type     = data.alicloud_instance_types.enhance.instance_types.0.id
  security_groups   = [alicloud_security_group.example.id]
  vswitch_id        = alicloud_vswitch.example.id
}
resource "alicloud_ecs_command""command" {
  name ="start-palworld"# nohup /home/steam/Steam/steamapps/common/PalServer/PalServer.sh &  command_content ="bm9odXAgL2hvbWUvc3RlYW0vU3RlYW0vc3RlYW1hcHBzL2NvbW1vbi9QYWxTZXJ2ZXIvUGFsU2VydmVyLnNoICY="  description     ="For Terraform Palworld"  type            ="RunShellScript"  working_dir     ="/root"}
resource "alicloud_ecs_invocation""run-command" {
  command_id  = alicloud_ecs_command.command.id
  instance_id = [alicloud_instance.enhance.id]
}

3. 简单小结

本文提供了一个使用 Terraform 在阿里云上部署幻兽帕鲁游戏服务器的解决方案,用户通过该方案可在分钟级别时间内即可完成服务部署。该方案仅作一个抛砖引玉的演示案例,目前基于 Terraform 对云上基础设施的管理方式,已经成为海内外客户的在面对瞬息万变的市场,加速应用迭代、提升用云管理水平的重要工具手段之一。有关于其它真实的客户案例,可以参阅我们的客户案例文档

4. 额外彩蛋

阿里云提供新用户免费试用服务器和网络资源,也许能免费搭建您的幻兽帕鲁服务器:

ECS免费资源申请:点击前往

网络免费资源申请:点击前往

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6月前
|
存储 弹性计算 监控
阿里云一键部署幻兽帕鲁联机服务器的使用体验
阿里云一键部署幻兽帕鲁联机服务器的使用体验
420 0
|
6月前
|
弹性计算
幻兽帕鲁服务器多少钱一台?
幻兽帕鲁服务器多少钱一台?阿里云幻兽帕鲁服务器26元/月起,配置为4核16G10M带宽,8核32G10M带宽价格是90元一个月
230 4
|
6月前
阿里云服务器怎么开发票?图文教程来了
在阿里云,用户可在用户中心的发票管理中开具电子或纸质发票。首次开票需设置发票抬头,可选个人或企业,以及增值税普通或专用发票。个人账号无法直接开企业发票,需变更实名认证。发票税率因产品而异,通常为6%或13%。发票抬头可修改,纸质发票邮寄费用由阿里云承担(特殊情况除外)。电子发票同样可报销。更多详情见阿里云官方帮助中心。
662 3
|
6月前
|
弹性计算 网络安全
【玩转幻兽帕鲁/Palworld】幻兽帕鲁服务器搭建,幻兽帕鲁部署全攻略
在开放世界的冒险中,与好友共同探索的乐趣无疑为《幻兽帕鲁》增添了更多色彩。今天,就让我们一起走进搭建《幻兽帕鲁》专属服务器的世界,体验“轻点三次鼠标,3秒轻松开服”的极致便捷!
|
6月前
|
存储 弹性计算 缓存
幻兽帕鲁服务器搭建
阿里云Ubuntu环境,搭建幻兽帕鲁服务器
1490 9
幻兽帕鲁服务器搭建
|
6月前
|
弹性计算
2024阿里云服务器购买、续费、升级配置价格表新鲜出炉!
2024年阿里云服务器购买、续费、升级优惠政策整理,阿里云服务器优惠价格表:轻量2核2G3M服务器61元一年、2核4G4M带宽165元1年,云服务器4核16G10M带宽26元1个月、149元半年,阿里云ECS云服务器2核2G3M新老用户均可99元一年续费不涨价,企业用户2核4G5M带宽199元一年。
865 2
|
6月前
|
应用服务中间件 Linux 网络安全
阿里云服务器购买和使用图文详解
本文重点讲解如何使用阿里云服务器部署项目
|
6月前
|
弹性计算
2024年阿里云幻兽帕鲁服务器多少钱1个月,Palworld/幻兽帕鲁价格详细介绍
在2024年,阿里云提供的幻兽帕鲁Palworld服务器价格根据配置有所不同。其中,一种常见的配置是4核16G10M的服务器,这种配置适合4~8人联机畅玩。根据阿里云的活动信息,这种配置的服务器的价格为26元/月。如果选择更长期的租用,价格也会有所优惠,例如3个月的价格为79元,6个月的价格更是低至149元。
58 2
|
6月前
|
弹性计算
2024年阿里云部署一个幻兽帕鲁/Palworld服务器多少钱?一个月26元
对于热爱幻兽帕鲁Palworld游戏的玩家们来说,一个稳定且高性能的游戏服务器是必不可少的。那么,在2024年,搭建一个这样的服务器需要多少钱呢?答案可能会让你惊喜——从每月仅需26元起,你就能拥有属于自己的游戏天地!
|
6月前
|
弹性计算
幻兽帕鲁服务器多少钱?如何收费?
阿里云幻兽帕鲁服务器26元/月起,配置为4核16G10M带宽,8核32G10M带宽价格是90元一个月,Palworld服务器配置可选4核16G和8核32G
下一篇
无影云桌面