饥荒专服部署维护
通过前文我搭建了饥荒专服,但是新的问题出现了,怎么维护呢,来看下我一步步简化的部署流程吧
通过上篇文章大家都知道我用的是 2v4G 的机子,但这机子又没有学生优惠,开一个月都不少钱呢,不慌,我们有按需付费,在阿里云一个 ecs.c7.large
的实例一个月二百多,但是按需付费的话是每小时 5毛 左右,我们也可以选别的便宜的计算型哈,这里就是举个栗子,但是最好别用性能突发实例,之前看到有人分享说不好用,当然你也可以试试,试完了评论说下你的体验给大家参考下。我这个专服就是朋友一起玩,大家白天都上班,这玩意一直在那跑一天也是浪费,所以按需付费是符合我的场景的,不一定符合你的,按照自己的需求来还是。
下面的产品都是阿里云的哈,在这里说下就不再下面说了,然后公网都是开的用的 5M 峰值,按需付费。
第一级 ECS
将实例创建存为启动模板,每次从模板创建实例能省事不少,然后在不用的时候选择停机不收费模式,但是这样的话云盘还是要收费的,每小时 4分,看起来不多,一天少说要闲置20小时,那就是 8毛 了。想想此时这个云盘上对我们来说比较需要保存的就是存档了,镜像这个装了 docker 之后拉取很方便的。那能不能吧存档文件保存为云文件,我在服务器上像容器一样的去挂载这个数据卷,这样存档一直在那不用管,每次实例创建的时候我挂载一下这个云文件。
可以的,经过我的探索,发现 NAS 文件服务满足我的需求,可以将存储内的某个目录挂载到自己的云服务器上的某个目录,妙啊。
阿里 NAS 服务
因为本身我是不懂这个服务吧相当于,所以就感觉那控制台可难用了,我创建了文件系统,但是死活找不到去哪新建文件夹,问了客服,客服意思我随着美找个 ecs 挂载一下就能编辑了。这个不好做到云盘那种在线编辑么,起码的能在线建文件夹也好啊,不然我不操作之前只能挂我的根目录啊我丢。好在我按需付费的 ecs 还在,去挂载上,在根目录下新建了十个文件夹,就 dst_save_1 - dst_save_10
,然后把我现有的存档上传到 dst_save_1
文件夹下,唔姆,十个存档位置应该够了(我至今也只用到了一个)。
我买的是最便宜的,你在购买页可能需要换个地域才能看到容量型,默认给到的都是性能型,创建专属网络和VPC,记得和你的实例在一个位置,建议你人在哪就选哪个地域得了,比如你在上海就直接选个上海的地域,记也好记
点进文件系统的详情,在里面找到挂载设置,里面有 ecs 如何挂载文件的说明
第二级 ECS + NAS
有 NAS 之后,我在创建 ECS 实例的时候选择将我的 NAS 根目录挂载到实例的 /ali-nas
目录,然后在饥荒专服的容器数据卷挂载哪里,把 ali-nas/dst_save_1
挂载到容器的 /data
目录,好耶,呼应上了。然后每次创建实例之后只要安装 docker 并拉取镜像运行就可以了,写了个简单的脚本安装 docker 并拉取镜像。利用 ECS 的云助手在每次实例初始化之后就执行这脚本初始化。
脚本详情
#! /bin/bash
echo "--- start docker install ---"
# 安装 docker 的公钥
echo "-- add public key"
rpm --import http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7 &&
# 一键安装脚本
echo "-- install docker"
curl -sSL https://get.daocloud.io/docker | sh &&
# 查看是否安装成功
echo "-- docker version"
docker version &&
# 启动 docker
echo "start docker"
systemctl start docker &&
echo "--- end docker install ---"
echo " --- 分割线 ---"
echo "mkdir /etc/docker"
mkdir -p /etc/docker &&
echo "fill daemon.json"
echo '{
"registry-mirrors": [阿里云加速地址]
}' >> /etc/docker/daemon.json &&
echo "daemon reload & docker restart"
systemctl daemon-reload &&
systemctl restart docker &&
echo " --- 分割线 ---"
echo "pull image"
docker pull jamesits/dst-server &&
echo "install docker compose"
yum install -y docker-compose &&
echo "mk dst folder and cd"
mkdir /${HOME}/dst &&
cd /${HOME}/dst &&
echo " --- 分割线 ---"
echo "edit docker-compose.yml"
echo "
version: '3.5'
services:
dst-server:
# 环境变量
environment:
- DST_CLUSTER_TOKEN=你的token
# 镜像名字信息
image: jamesits/dst-server:latest
restart: 'on-failure:5'
# 端口映射
ports:
- '10999-11000:10999-11000/udp'
- '12346-12347:12346-12347/udp'
# 数据卷挂载
volumes:
- /ali-nas/dst_save_1:/data
stop_grace_period: 6m
" >> docker-compose.yml &&
echo " --- docker-compose up -d ---"
docker-compose up -d
echo " ------ 脚本执行结束 ------ "
exit
第三级 ECI + NAS
通过上一级,基本上可以自动部署了,但是也有一点,我其实不需要 ECS ,ECS 只是用来作为容器运行的环境,那像我这种情况,有没有直接给我提供一个容器实例的地方,我就拉取镜像运行就完了的那种,有的, ECI 弹性容器实例。ECI 有提供一个客户端管理工具 ECI-client(Mac 和 Linux) ,但是这个工具只能管理用 client 创建的实例,唯一的就是它这 ECI 目前没发现有可以停止容器运行的命令,只有启动,重启,删除。
在控制台创建和 ECS 也很像,也需要设置交换机、安全组啥的,不要忘记的是挂载 NAS 到容器的 /data
目录,设置好之后保存为启动模板,这样下次就可以直接从启动模板新建了,有 Mac 或者 Linux 的同学可以直接使用 client 创建,很方便了可以说是。我这里的 yml 配置如下:
# ali-eci.yml
ContainerGroupName: dst-group
RegionId: cn-beijing
ZoneId: cn-beijing-h
SecurityGroupId: 安全组
VSwitchId: 交换机
CPU: 1.0
Memory: 2.0
Container:
- Name: dst-1
Image: jamesits/dst-server
ImagePullPolicy: IfNotPresent
CPU: 1.0
Memory: 2.0
VolumeMount:
- Name: nas
MountPath: /data
ReadOnly: false
EnvironmentVar:
- Key: DST_CLUSTER_TOKEN
Value: 设置环境变量,这里是你的 token 的值
Volume:
- Name: nas
Type: NFSVolume
NFSVolume:
Server: NAS 挂载地址(NAS文件系统 - 挂载点管理 里面查看)
Path: /dst_save_1
ReadOnly: false
执行命令 eci run -f ali-eci.yml -w 5
,就是以配置创建实例,并自动创建弹性公网,带宽5M。这样当我需要的时候一行命令就可以创建实例,然后等它镜像拉取完毕后运行大约十分钟就够了
第四级 自构建镜像,加速实例初始化
目前的 ECI 正常启动大约是十分钟的时间,其中拉取镜像需要三分钟左右。这其实可以接受的,但是周末的时候出问题了,镜像拉取完之后启动专服的时候发现一直在 downloading update ,把最近安装的 mod 注释了也还是要 update ,这个之前也出现过,不过之前都是很短的时间就加载完了,我意识到问题并不简单,我猜可能是镜像过时了,确实专服有更新了现在,虽然作者推荐的 latest
是比较稳定的日用的,但是我这里的实际问题确实是更新太费劲,一种是选择使用作者的 nightly
(每晚更新) 的镜像,一种是拉取 github 后自己构建使用,我选择后者,在阿里云新建了镜像仓库,指向我 fork 之后的 github ,增加一个立即构建的触发器,然后在实例就可以直接用自己的镜像了,只要把配置文件中 Image 的地方换成自己的镜像的地址即可,这样可能费用会增加一点点,不过应该还好
结语
至此呢,饥荒专服的研究也差不多了,下一步打算仔细看看那个镜像,毕竟自己现在还是浮于用的地步,弄明白镜像里做了啥,才能对端口是否占用这块有点体会我觉得。这个话我想到有没有人在做这样一种服务,就是出租饥荒专服呢,只要存档能转移是吧,小伙伴保存好自己的存档,每次花一块钱/小时租个云服务器玩耍会有人付费吗?确实,我就不会,太贵了,我选择自己研究研究。主要是游戏热度不够,现在还在的要么是老玩家,要么就是技术流,不会架专服的真不多了。