饥荒专服部署维护

... 2021-08-13 20:38:41 饥荒专服 大约 7 分钟

通过前文我搭建了饥荒专服,但是新的问题出现了,怎么维护呢,来看下我一步步简化的部署流程吧

通过上篇文章大家都知道我用的是 2v4G 的机子,但这机子又没有学生优惠,开一个月都不少钱呢,不慌,我们有按需付费,在阿里云一个 ecs.c7.large 的实例一个月二百多,但是按需付费的话是每小时 5毛 左右,我们也可以选别的便宜的计算型哈,这里就是举个栗子,但是最好别用性能突发实例,之前看到有人分享说不好用,当然你也可以试试,试完了评论说下你的体验给大家参考下。我这个专服就是朋友一起玩,大家白天都上班,这玩意一直在那跑一天也是浪费,所以按需付费是符合我的场景的,不一定符合你的,按照自己的需求来还是。

下面的产品都是阿里云的哈,在这里说下就不再下面说了,然后公网都是开的用的 5M 峰值,按需付费。

# 第一级 ECS

将实例创建存为启动模板,每次从模板创建实例能省事不少,然后在不用的时候选择停机不收费模式,但是这样的话云盘还是要收费的,每小时 4分,看起来不多,一天少说要闲置20小时,那就是 8毛 了。想想此时这个云盘上对我们来说比较需要保存的就是存档了,镜像这个装了 docker 之后拉取很方便的。那能不能吧存档文件保存为云文件,我在服务器上像容器一样的去挂载这个数据卷,这样存档一直在那不用管,每次实例创建的时候我挂载一下这个云文件。

可以的,经过我的探索,发现 NAS 文件服务满足我的需求,可以将存储内的某个目录挂载到自己的云服务器上的某个目录,妙啊。

# 阿里 NAS 服务

因为本身我是不懂这个服务吧相当于,所以就感觉那控制台可难用了,我创建了文件系统,但是死活找不到去哪新建文件夹,问了客服,客服意思我随着美找个 ecs 挂载一下就能编辑了。这个不好做到云盘那种在线编辑么,起码的能在线建文件夹也好啊,不然我不操作之前只能挂我的根目录啊我丢。好在我按需付费的 ecs 还在,去挂载上,在根目录下新建了十个文件夹,就 dst_save_1 - dst_save_10 ,然后把我现有的存档上传到 dst_save_1 文件夹下,唔姆,十个存档位置应该够了(我至今也只用到了一个)。

新建 NAS

我买的是最便宜的,你在购买页可能需要换个地域才能看到容量型,默认给到的都是性能型,创建专属网络和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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67

# 第三级 ECI + NAS

通过上一级,基本上可以自动部署了,但是也有一点,我其实不需要 ECS ,ECS 只是用来作为容器运行的环境,那像我这种情况,有没有直接给我提供一个容器实例的地方,我就拉取镜像运行就完了的那种,有的, ECI 弹性容器实例。ECI 有提供一个客户端管理工具 ECI-client(Mac 和 Linux) (opens new window) ,但是这个工具只能管理用 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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

执行命令 eci run -f ali-eci.yml -w 5 ,就是以配置创建实例,并自动创建弹性公网,带宽5M。这样当我需要的时候一行命令就可以创建实例,然后等它镜像拉取完毕后运行大约十分钟就够了

# 第四级 自构建镜像,加速实例初始化

目前的 ECI 正常启动大约是十分钟的时间,其中拉取镜像需要三分钟左右。这其实可以接受的,但是周末的时候出问题了,镜像拉取完之后启动专服的时候发现一直在 downloading update ,把最近安装的 mod 注释了也还是要 update ,这个之前也出现过,不过之前都是很短的时间就加载完了,我意识到问题并不简单,我猜可能是镜像过时了,确实专服有更新了现在,虽然作者推荐的 latest 是比较稳定的日用的,但是我这里的实际问题确实是更新太费劲,一种是选择使用作者的 nightly (每晚更新) 的镜像,一种是拉取 github 后自己构建使用,我选择后者,在阿里云新建了镜像仓库,指向我 fork 之后的 github ,增加一个立即构建的触发器,然后在实例就可以直接用自己的镜像了,只要把配置文件中 Image 的地方换成自己的镜像的地址即可,这样可能费用会增加一点点,不过应该还好

# 结语

至此呢,饥荒专服的研究也差不多了,下一步打算仔细看看那个镜像,毕竟自己现在还是浮于用的地步,弄明白镜像里做了啥,才能对端口是否占用这块有点体会我觉得。这个话我想到有没有人在做这样一种服务,就是出租饥荒专服呢,只要存档能转移是吧,小伙伴保存好自己的存档,每次花一块钱/小时租个云服务器玩耍会有人付费吗?确实,我就不会,太贵了,我选择自己研究研究。主要是游戏热度不够,现在还在的要么是老玩家,要么就是技术流,不会架专服的真不多了。

上次编辑于: 2021年11月16日 19:50