饥荒联机吧 关注:59,532贴子:386,311

【2015_09_06】Don’t Starve Together Dedicated Server 搭建教

取消只看楼主收藏回复

据说发帖要镇楼


正式开始,陆续更新。
先上目录,如果有不全面的地方在教程结束后会有补充
第0章 绪论3
第1章 饥荒独立服务器4
1.1 简介4
1.2 优缺点4
1.3 硬性要求4
第2章 下载独立服务器6
2.1 windows平台下载6
2.1.1 steam客户端6
2.1.2 windows平台使用steamcmd6
2.2 linux平台下载8
第3章 服务器分析9
3.1 目录结构9
3.1.1 程序安装目录9
3.1.2 配置和存档目录9
3.2 基本配置11
3.2.1 基本配置11
3.3 令牌文件12
3.3.1 生成令牌12
3.3.2 上传令牌12
3.4 扩展配置14
3.4.1 mod配置14
3.4.2 自定义世界15
3.4.3 添加管理员15
3.4.4 房间多开16
第4章 服务器搭建17
4.1 对战平台上的搭建17
4.2 windows平台上的搭建17
4.3 linux平台上的搭建18
4.3.1 依赖关系18
4.3.2 安装工具软件18
4.3.3 CentOS 7.0 64位下的搭建19
4.3.4 Ubuntu 14.04 32位下的搭建20
第5章 自动化维护脚本21
第6章 测试和其他说明22
6.1 简单测试22
6.2 其他经验性说明29
第7章 附录31


收起回复
举报|3楼2015-09-06 22:08
    格式好乱后面的数字是页码,pdf文件在教程结束后会附上


    收起回复
    举报|4楼2015-09-06 22:10
      还是接个图,层次比较好看


      收起回复
      举报|5楼2015-09-06 22:11
        第0章 绪(che)论(dan)
        本教程旨在尽量全面地介绍饥荒独立服务器的结构和在不同平台上如何搭建。由于笔者没有MAC机,所以只介绍了windows平台和linux平台下如何搭建服务器。笔者曾在PC机上尝试过搭建正版公开服务器和盗版的局域网服务器,正版PC机服务器质量受网络限制,盗版服务器处于局域网,只限于本网络玩家游戏。总之局限性太大。后来通过各种渠道在专用的服务器主机上搭建,使用win server 2003和win server 2008,后来使用liunx系统,发行版为社区系统Ubuntu14.04和社区企业系统CentOS6.5及CentOS7.0。就总体感觉而言,质量排名为CentOS>server2003>server2008。难易排名win优于linux。
        本教程中的举例和分析均是基于linux,但是和windows差别不大。
        本教程中除了引用官方教程外,其余均为笔者自己编写。
        官方wiki教程:
        http://dont-starve-game.wikia.com/wiki/Don%E2%80%99t_Starve_Together_Dedicated_Servers
        官方steamcmd教程:
        https://developer.valvesoftware.com/wiki/SteamCMD
        本教程现为第二版,内容基本全部重写,第一版并未放出。截止本教程完成,饥荒联机版的最新版本为148470,以后版本更新,请注意教程时效性。
        本教程内容除特殊说明外均为笔者验证,但本教程也只作为参考,由此造成的任何切问题笔者概不负责。
        如需转载本教程请保持完整性且注明出处。




        上面的格式都是用空格挤出来的,原以为能照文档的格式搬过来呢,现在。。想太多。。。。


        收起回复
        举报|6楼2015-09-06 22:15
          第1章 饥荒独立服务器
          1.1 简介
          饥荒独立服务器是专门为Don’t Starve Together (DST)设计的服务器端程序,此程序正确运行后将产生一个游戏房间,客户端玩家搜索到房间之后可以加入其中进行游戏。
          独立服务器程序没有使用图形接口以节约系统资源开销,提高服务性能。


          收起回复
          举报|7楼2015-09-06 22:19
            1.2 优缺点
            独立服务器与客户端Host相比,有以下优缺点。
            优点:
            A 无人值守。独立服务器不需要主机玩家在房间中来保持房间状态,服务器中没有人的时候,依然可以运行,其他玩家仍然可以进行游戏,客户端Host无法做到。
            B 支持人数更多。独立服务器支持人数上限为64人,客户端Host最多为6人。
            C 稳定性好。极少出现崩溃,适合长期运行。
            D 方便管理。基本参数,世界定义,mod安装等都通过配置文件来完成,所有设置一览无遗。
            E 方便纠错。服务器运行全程均有运行记录,崩溃后会有错误信息,对于mod引起的错误尤其有效,查看记录马上知道哪个mod除错。
            缺点:
            A 对服务器主机硬性要求较高,尤其是带宽。
            B 需要维护。主要有定义世界,管理房间,增删mod,程序升级等。
            C 成本。如果要建立可用性和稳定性高的服务器,家庭宽带和个人计算机无法胜任,需要使用专门的服务器主机,必然涉及到成本增加。


            收起回复
            举报|8楼2015-09-06 22:20
              20分钟过去了 没得人看


              收起回复
              举报|9楼2015-09-06 22:21
                1.3 硬性要求
                网络:上传带宽至少8K字节每人每秒。这是不修改世界和不安装mod的情况。如果使用家庭宽带建立服务器,最好先测试上传速率。


                内存:大约65M每人。这是玩家加入后的内存增量,服务端只要开启后就会在笔者的linux主机上消耗350M~400M的内存。


                CPU:没有具体官方说明。CPU的消耗跟世界设置和玩家游戏环境相关度极高,不同的设置和环境CPU资源消耗差距极大。


                收起回复
                举报|10楼2015-09-06 22:28
                  第2章 下载独立服务器


                  独立服务器程序是可以任意下载的,没有要求正版。


                  2.1 windows平台下载
                  windows平台下的下载方式有两种,通过steam客户端或steamcmd下载,使用steam客户端下载要求正版。
                  2.1.1 steam客户端
                  如果你的steam客户端有饥荒联机版,你可以‘库’>‘工具’中找到‘Don’t Starve Together Dedicated Server’然后右键安装。


                  2.1.2 windows平台使用steamcmd
                  首先在这个链接下载steamcmd:
                  https://steamcdn-a.akamaihd.net/client/installer/steamcmd.zip
                  解压文件,运行其中的steamcmd.exe ,会开始下载steamcmd的相关组件,所以最好先将steamcmd.exe放到一个新建的文件夹中再运行。组件下载完成后会出现下面的提示符


                  然后可以开始下载服务端程序了,完成以下命令:
                  >login anonymos
                  匿名登录,当然你也可以用你的账号密码登录,不过没有这个必要。完成这个命令后如下图




                  >app_update 343050 validate
                  下载程序,343050是这个程序的ID,如果你想下载其他程序,查询对应的ID就能下载。下载过程如下图


                  下载完成


                  收起回复
                  举报|11楼2015-09-06 22:39
                    2.2 linux平台下载
                    linux平台下一般使用steamcmd下载,下面的网址获得linux平台的steamcmd:
                    https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
                    使用方法和windows平台steamcmd大致相同,不再介绍。需要注意的是使用steamcmd前要先安装一些依赖库,又更具发行版不同和系统位数不同有不同的安装方法,具体方法参考以下链接:
                    https://developer.valvesoftware.com/wiki/SteamCMD


                    收起回复
                    举报|12楼2015-09-06 22:41
                      稍后继续


                      回复
                      举报|13楼2015-09-06 22:42
                        第3章 服务器分析
                        3.1 目录结构
                        目录结构在windows和linux下基本一样,下面列出的是linux平台下的目录,本文中仅列出和配置相关的目录和文件。
                        3.1.1 程序安装目录


                        3.1.2 配置和存档目录


                        收起回复
                        举报|14楼2015-09-06 23:18
                          3.2 基本配置
                          基本配置是服务端必须的配置文件,否则无法开启服务。
                          3.2.1 基本配置
                          这是服务端必须的,没有这个配置就无法开启服务。
                          配置文件名:settings.ini
                          配置内容有[network]、[account]、[MISC]三个字段,建立公开的服务器,只需要配置[network]字段即可;如果建立局域网主机,还需要配置[account]字段,无需下文的令牌文件;[MISC]字段无需配置。
                          [network]
                          default_server_name = YOUR_SERVER_NAME
                          注:服务器名字,自己定义。
                          default_server_description = YOUR_SERVER_DESCRIPTION
                          注:服务器描述,自己定义。
                          server_port = 10999
                          注:开放的端口,默认10999,可自己定义,一定不能为空。
                          server_password = PASSWORD
                          注:服务器密码,自己定义,为空则对所有人开放。
                          max_players = 10
                          注:玩家数,最大为64。
                          pvp = true
                          注:pvp开关,true开启,false关闭。
                          game_mode = endless
                          注:游戏模式,可选survival endless wilderness三种。
                          enable_snapshots = true
                          注:服务器快照,每隔一段时间保存一次存档。true开启,false关闭。
                          enable_autosaver = true
                          注:自动保存,每天开始的时候保存,true开启,false关闭
                          tick_rate = 30
                          注:滴答率,笔者理解为服务器向客户端的数据推送率,越高服务器质量越好,资源消耗越大,默认30,可选10 15 30 60四种。
                          connection_timeout = 8000
                          注:超时时间,默认8000ms,可自己定义。
                          server_save_slot = 1
                          注:存档槽,可选1~5.
                          enable_vote_kick = true
                          注:投票踢人,true开启,false关闭
                          pause_when_empty = true
                          注:服务器无人暂停,极好的功能,true开启,false关闭。

                          [account]
                          dedicated_lan_server = [ true | false ]
                          注:局域网服务器,true开启,false关闭,如果建立局域网服务器,设置为true。


                          收起回复
                          举报|15楼2015-09-06 23:20
                            3.3 令牌文件
                            3.3.1 生成令牌
                            令牌是建立公开服务器的必须文件,建立局域网服务器则不需要。打开游戏后,按~键(TAB键上方的按键)开启控制台,输入TheNet:GenerateServerToken()
                            按回车键后,在XXX\klei\DoNotStarveTogether\下生成server_token.txt文件。这就是我们要的令牌文件。
                            3.3.2 上传令牌
                            生成令牌后,需要上传到服务器上(服务器不在本地机器上),windows平台下使用远程桌面登录时,打开选项,依次选择本地资源>详细信息>驱动器,然后根据自己的路径勾选复选框,登录到远程服务器上时,就能访问本地文件了。


                            其实还有更简单的方法,在本地的令牌文件上按Ctrl-C后,然后登录远程桌面按Ctrl-V,文件就上传了(真TM方便!)


                            收起回复
                            举报|16楼2015-09-06 23:22
                              对于linux平台,你可以使用登录工具(FlashFXP,SSH Secure Shell Client,sercureCRT等)或者其他的一些协议上传文件。因为令牌文件包含了特殊的结束符,所以不能简单的复制粘贴,需要将整个文件上传。
                              但是有的登录软件并不带有文件传输功能,这里笔者介绍一种简单的方法。令牌文件的结尾符不同于一般的文本,它采用的是NUL,而不是CRLF或LF。在linux系统下,使用vim建立与令牌文件同名文件,把令牌文件的明文字符写到文件里,保存退出。使用vim用二进制方式打开文件,然后转换为十六进制(为了方便),把最后一个字节由0A改为00,即把LF改为NUL。再把文件转换为二进制,保存退出。就造成了一个和令牌文件一模一样的东西。由于包含了令牌文件的字符,所以和令牌文件完全等价,这样就完成了令牌文件的上传且不采用传输整个文件。使用的几个关键命令为:
                              vim –b server_token.txt
                              :%!xxd
                              :%!xxd -r


                              收起回复
                              举报|17楼2015-09-06 23:22
                                3.4 扩展配置
                                扩展配置不是服务器所必须的,只是为了方便管理和增加游戏乐趣而额外添加的一些配置。
                                3.4.1 mod配置
                                服务端安装mod有两个步骤,第一步下载mod,通过配置文件dedicated_server_mods_setup.lua来完成,第二步启用mod,有两种方法,这里只介绍通过modoverrides.lua文件来配置的这种方法,更加科学,官方也是推荐使用这种方法。至于另外一种方法可到官网自行查阅,此处不作说明。
                                下载mod的配置方法。要下载某个mod,只需要在dedicated_server_mods_setup.lua这个文件中添加一行 ServerModSetup("xxxxxxxx"),其中xxxxxxx是一串有数字组成的编号,每个mod在创意工坊都有一个独立的编号。这里介绍把编号和mod对应的方法:首先订阅mod,游戏的目录里会下载mod,打开某个mod文件夹,这时候这个文件夹的名字是workshop-xxxxxxx,xxxxxx就是编号,mod的名字在此文件夹里面的一个名为modinfo.lua的文件里有记录。
                                启用mod的方法。配置modoverrides.lua文件,文件的配置格式为:
                                return {
                                ["workshop-350811795"] = { enabled = true },
                                ["workshop-387028143"] = { enabled = true },
                                ["workshop-361336115"] = { enabled = true,
                                configuration_options =
                                {
                                hunt_time = 6,
                                ["String Phrase Option Name"] = "some value",
                                }
                                },
                                ["workshop-336882447"] = { enabled = true }
                                }
                                要启用前面某个已经配置下载的mod只要把编号替换就可以。configuration_options是mod的配置,不同mod配置不同。可以删除采用默认配置,简化后的配置文件如下,一行代表启用一个mod,false则不启用。
                                return {
                                ["workshop-350811795"] = { enabled = true },
                                ["workshop-387028143"] = { enabled = true },
                                ["workshop-361336115"] = { enabled = true },
                                ["workshop-336882447"] = { enabled = false }
                                }
                                通过这种配置方法,可以不同的房间开启不同的mod,在后面的房间多开很有用。
                                3.4.2 自定义世界
                                通过worldgenoverride.lua这个文件来自定义世界,达到修改世界资源的目的。由于要配置的资源很多,文件的内容将在后文附录中列出。
                                3.4.3 添加管理员
                                独立服务器默认是提供令牌的用户为管理员,如果要其他的人成为管理员,需要配置文件,配置文件路径\save\adminlist.txt。在这个文件下添加用户的UserID,一行一个,用户便成为管理员,可以通过控制台来管理当前的世界,比较重要的功能有:重置世界、重载世界、踢人、救人、回档。当然亦可以刷东西,管理员拥有使用控制台的全部功能权利。
                                下图是添加管理后的结果(拿第一版的截图充数看看效果):


                                UserID可以在游戏中加入房间后按退格键查看,显示在右下角,以KU_ 开头的一串字符。也有其他方法查看,请自行查阅。
                                3.4.4 房间多开
                                如果服务器资源有较多空闲,可以同时开启多个房间。这些房间都有独立的参数,在外界看来是互不干扰的。这要解决两个问题:端口占用和存档冲突。好在这两个问题都可以通过配置settings.ini来解决。
                                多开的方法是在存档目录下新建一个文件夹,里面要包含settings.ini,令牌,(mod开启文件,世界配置等)一个房间必须的信息。假如文件夹名为:ROOM_INFO,在运行服务器程序的时候,使用命令行,在其后添加 -conf_dir ROOM_INFO (直接写文件夹名,不能写路径)选项。也就是说,一个文件夹就是一个房间的信息,指定不同文件夹就指定了不同的房间。


                                收起回复
                                举报|18楼2015-09-06 23:26
                                  【今晚先写到这里,明晚继续剩余内容】


                                  回复
                                  举报|19楼2015-09-06 23:27
                                    继续更新


                                    收起回复
                                    举报|22楼2015-09-07 21:37
                                      今天计划更新完剩下的部分


                                      回复
                                      举报|23楼2015-09-07 21:37
                                        第4章 服务器搭建
                                        4.1 对战平台上的搭建
                                        对战平台有很多,笔者用过的只有游侠,所以此处只介绍游侠对战平台上的搭建方法。因为在对战平台上要求玩家版本一致,而笔者并没有找到在游侠上当前版本的服务端,所以无法开启服务端让外面的玩家进来测试,只用了最新的服务端和盗版匹配的客户端自己测试。


                                        笔者2台电脑用路由器隔开不再同一网段。一台先用游侠平台启动服务端,再直接启动客户端;另一台用游侠平台启动客户端,两台客户端均可搜索到服务器。远方的客户端可以加入游戏,但是运行服务端的机器无法加入游戏,提示不在同一局域网。


                                        笔者分析是游戏虚拟出来的IP是在192.168.2.X网段,远方的客户端经过游侠的虚拟后也是在192.168.2.X网段,反而我本地的客户端IP是172.16.X.X,不再同一网段。个人认为的解决方法是先把自己的IP修改到192.168.2.X网段,然后通过游戏运行服务端,再直接运行客户端。此时客户端理论上可以加入游戏。以上方法均为推测,没有验证。


                                        因为网络并非笔者独享,所以不方便修改光猫和路由器,以后有机会再来验证


                                        如果有145705的版本,给我来一份啊啊啊啊啊


                                        收起回复
                                        举报|24楼2015-09-07 21:46
                                          4.2 windows平台上的搭建
                                          windows平台搭建很简单。根据主机情况大致分为两种。专用服务器主机和普通PC机,PC机一个重要的问题是要自己解决网络环境的问题,你需要一个公网IP且上传速率不能太低且延迟不能太高。专用服务器主机一般采用租用的方式,同时也配备了固定的公网IP,稳定性也有保障,性能优于PC机,但是成本高。服务器主机采用远程登录的方式,登录后操作方法和自己的PC机一样。PC机解决网络环境问题先查询自己是否拥有一个可操作的公网IP,如果有,对这个IP做端口映射或者DMZ到自己的机器,如果没有,联系网络运营商给你分配一个(软磨硬泡)。
                                          前面介绍了服务端下载法,下载后根据自己的情况编写好配置文件,生成令牌,然后运行服务器程序,就是这么简单。
                                          如果使用win server 2008时提示并行配置不正确,安装vc++2008运行库即可。但是win server 2003笔者却没遇到这样的问题?!


                                          收起回复
                                          举报|25楼2015-09-07 21:49
                                            4.3 linux平台上的搭建
                                            linux是流行的服务器系统,虽然发行版众多,各有特色,但是基本都大同小异,原理上没有太大出入。根据实际情况采用不同策略。


                                            到了linux上,基本都是不用图形接口的,对于同等硬件水平,linux效能比win稍高。
                                            其次是管理方便,使用了文字接口,远程操作主机时对网络要求极低。低到什么程度?手机移动2G网络都可登录操作主机。也就是说在蹲坑无聊的时候都可以玩玩主机,笔者安卓机 vxconnectbot juicessh等这些登录软件都是可以用的 又扯远了


                                            收起回复
                                            举报|26楼2015-09-07 21:59
                                              4.3.1 依赖关系
                                              linux下运行的程序有大部分情况需要依赖于额外的库或者软件提供的功能,如果没有这些库或者软件,那么当前程序是不能运行的。要让程序运行需要先根据依赖关系安装相应的库或者软件。
                                              饥荒独立服务器程序是一个32位的软件,主要依赖于库文件。在安装依赖库的时候需要注意的问题有:
                                              lA 找到需要的库文件。
                                              lB 明确库文件的版本,太新太旧都不能运行。
                                              lC 如果是64位系统,让32位库和64位库并存。
                                              linux下动态库搜索路径优先级:
                                              1 编译目标代码时指定的动态库搜索路径
                                              2 环境变量LD_LIBRARY_PATH指定的动态库搜索路径
                                              3 配置文件/etc/ld.so.conf中指定的动态库搜索路径
                                              4 默认的动态库搜索路径/lib或/lib64
                                              5 默认的动态库搜索路径/usr/lib或/usr/lib64
                                              在上面的路径中,库文件只要在一处被搜索到,就能运行成功。饥荒独立服务器程序的指定路径是安装目录bin/lib32。

                                              4.3.2 安装工具软件
                                              饥荒独立服务器运行后会独占当前shell,如果会话断开则会停止运行。虽然可以使用nohup把服务器放到后台运行,但是不方便使用服务器的控制功能。官方推荐使用screen,利用screen可以很方便的管理饥荒独立服务器,也可以在房间多开时非常方便的管理。不同系统下根据不同命令安装screen即可(rpm,yum;apt-get)。工具的使用方法可以使用man screen查看。
                                              网络监控使用的一些工具,如ifstat,iftop,nload等,有些系统已经自带。这些不是必须的,只是方便监控网络情况。


                                              收起回复
                                              举报|27楼2015-09-07 22:00
                                                4.3.3 CentOS 7.0 64位下的搭建
                                                内核版本3.10.0,硬件等级x86_64。
                                                这是一个社区企业操作系统,因为追求稳定性所以采用的都是一些较老较稳定的库,缺失的、太旧的都需要先安装、升级后才能运行饥荒独立服务器程序。同时它是一个64位的系统,需要额外安装32位库。下面是解决以来关系的一些关键命令:
                                                #yum install -y screen
                                                注:安装screen工具
                                                #yum install -y glibc.i686
                                                注:安装32位的glibc库
                                                #yum install -y --setopt=protected_multilib=false libstdc++.i686
                                                注:由于已存在64位库,所以要关闭多重保护,让32位和64位库并存
                                                #yum install -y --setopt=protected_multilib=false libcurl.i686
                                                注:安装32位的libcurl,关闭多重保护
                                                #ln -s /usr/lib/libcurl.so.4 /usr/lib/libcurl-gnutls.so.4
                                                注:软链接ibcurl-gnutls.so.4到libcurl.so.4
                                                完成上面的步骤后,使用ldd命令运行主程序,发现还缺少3个库文件,可通过下面的链接下载。
                                                https://github.com/dgibbs64/linuxgameservers/raw/master/Insurgency/dependencies/libc.so.6
                                                https://github.com/dgibbs64/linuxgameservers/raw/master/Insurgency/dependencies/libpthread.so.0
                                                https://github.com/dgibbs64/linuxgameservers/raw/master/Insurgency/dependencies/librt.so.1
                                                如果使用CentOS6.5以前的版本,还会出现glibc库版本过低的情况,将安装steamcmd时下载组件时得到的libstdc++.so.6覆盖到游戏目录bin/lib32下即可(强烈不建议覆盖系统默认路径)。但是如果使用CentOS7.0,则不能这样做,反而会出现glic库版本过高。
                                                完成后使用ldd运行结果,出现一个版本信息不可用,这是因为使用了软连接。此时所有依赖库均可找到,程序可以运行了。


                                                4.3.4 Ubuntu 14.04 32位下的搭建
                                                内核版本3.13.0,硬件等级i686。
                                                这是一个很新的系统,加之又是32位系统,只需少量操作即可。
                                                # apt-get update
                                                # apt-get install libgcc1
                                                # apt-get install libcurl4-gnutls-dev:i386


                                                收起回复
                                                举报|28楼2015-09-07 22:02
                                                  第5章 自动化维护脚本
                                                  上文已经说过,独立服务器的缺点之一是需要维护,很麻烦。我们可以编写shell script配合linxu的crond服务来完成一些自动化维护。
                                                  由于此处的内容已和本文主题相去较远,只是简单介绍。有兴趣的读者可以继续阅读。共有3个脚本参与,使用管线命令、正则表达式、文本处理和简单判断逻辑。一个负责升级检查(每天定点执行),一个负责错误检查(1分钟1次),一个负责错误后恢复(2分钟1次)。完成的功能有版本自动升级,程序崩溃(mod导致、程序本身导致、令牌挂载失败导致)后自动恢复,mod过期自动升级。
                                                  经笔者观察,除了mod偶尔导致的一些无法恢复的反复错误(笔者大约安装了25个服务端mod),其他问题服务器基本可以自恢复。
                                                  如果少装mod,基本上可以不用管理


                                                  收起回复
                                                  举报|29楼2015-09-07 22:07
                                                    第6章 测试和其他说明
                                                    6.1 简单验证
                                                    先说下笔者的主机配置,1核2.6GHz,1Mb带宽,1G内存。Linux系统(CentOS7.0),没有运行其他非系统服务。
                                                    上文已经说过,网络与CPU和世界设置息息相关,下面我们来看看具体的效果。本次只有笔者一人进行测试,但也能说明问题。


                                                    收起回复
                                                    举报|30楼2015-09-07 22:11
                                                      A 未运行服务器前CPU【负载0.01(刚关闭程序,以最新的1分钟为准),占用率0.6%】、网络状态【出口速率9.34kb/s,入口速率关系不大】


                                                      收起回复
                                                      举报|32楼2015-09-07 22:40
                                                        B 开启服务端(全默认,少量mod),笔者进入游戏后CPU【负载0.23,占用率11.3%】、网络【出口58.08kb/s】



                                                        回复
                                                        举报|33楼2015-09-07 22:45
                                                          C 控制台来200只杀人蜂套餐。CPU【负载0.65,占用率67.9%】,网络【出口655.19kb/s】



                                                          回复
                                                          举报|34楼2015-09-07 22:47