游戏服务器搭建记录

记录一下要玩的游戏的服务器怎么搭。

幻兽帕鲁

Docker - Palworld Dedicated Server

使用docker compose。

docker-compose.yml

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
version: '3.9'
services:
palworld-dedicated-server:
container_name: palworld-dedicated-server
image: jammsen/palworld-dedicated-server:latest
restart: unless-stopped
logging:
driver: "local"
options:
max-size: "10m"
max-file: "3"
ports:
- target: 8211 # Gamerserver port inside of the container
published: 8211 # Gamerserver port on your host
protocol: udp
mode: host
- target: 8212 # Gameserver API port inside of the container
published: 8212 # Gameserver API port on your host
protocol: tcp
mode: host
- target: 25575 # RCON port inside of the container
published: 25575 # RCON port on your host
protocol: tcp
mode: host
env_file:
- ./default.env
volumes:
- ./game:/palworld

default.env

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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# Container-setttings
PUID=1000
PGID=1000
TZ=Asia/Shanghai

# SteamCMD-settings
ALWAYS_UPDATE_ON_START=true
STEAMCMD_VALIDATE_FILES=true

# Backup-settings
BACKUP_ENABLED=true
BACKUP_ANNOUNCE_MESSAGES_ENABLED=true
BACKUP_CRON_EXPRESSION=0 * * * * # 每小时备份一次
BACKUP_RETENTION_POLICY=true
BACKUP_RETENTION_AMOUNT_TO_KEEP=20 # 保留备份个数

# Restart-settings
RESTART_ENABLED=true # 定时重启
RESTART_DEBUG_OVERRIDE=false
RESTART_CRON_EXPRESSION="0 3 * * *" # 每天重启时间

# RCON-Playerdetection - NEEDS RCON ENABLED!
RCON_PLAYER_DETECTION=true # 启用玩家在线检测
RCON_PLAYER_DEBUG=true
RCON_PLAYER_DETECTION_STARTUP_DELAY=60
RCON_PLAYER_DETECTION_CHECK_INTERVAL=15 # 每15秒检测一次

# Webhook-settings
WEBHOOK_ENABLED=false # 关闭Webhook通知
WEBHOOK_DEBUG_ENABLED=false
WEBHOOK_URL="YOUR-URL-IN-HERE"
WEBHOOK_CONTENT_TITLE="Status update"
WEBHOOK_INFO_TITLE="Info"
WEBHOOK_INFO_DESCRIPTION="This is an info from the server"
WEBHOOK_INFO_COLOR="2849520"
WEBHOOK_INSTALL_TITLE="Installing server"
WEBHOOK_INSTALL_DESCRIPTION="Server is being installed"
WEBHOOK_INSTALL_COLOR="2849520"
WEBHOOK_RESTART_TITLE="Server is restarting soon"
WEBHOOK_RESTART_DESCRIPTION="The gameserver is restarting in 15 minutes"
WEBHOOK_RESTART_COLOR="15593515"
WEBHOOK_START_TITLE="Server is starting"
WEBHOOK_START_DESCRIPTION="The gameserver is starting"
WEBHOOK_START_COLOR="2328576"
WEBHOOK_STOP_TITLE="Server has been stopped"
WEBHOOK_STOP_DESCRIPTION="The gameserver has been stopped"
WEBHOOK_STOP_COLOR="7413016"
WEBHOOK_UPDATE_TITLE="Updating server"
WEBHOOK_UPDATE_DESCRIPTION="Server is being updated"
WEBHOOK_UPDATE_COLOR="2849520"

# Config-setting - Warning: Every setting below here will be affected!
SERVER_SETTINGS_MODE=auto

# Gameserver-start-settings
MULTITHREAD_ENABLED=true
COMMUNITY_SERVER=true

# Engine.ini settings
NETSERVERMAXTICKRATE=120 # 服务器刷新率

# PalWorldSettings.ini settings
DIFFICULTY=None
RANDOMIZER_TYPE=None
RANDOMIZER_SEED=""
IS_RANDOMIZER_PAL_LEVEL_RANDOM=false
DAYTIME_SPEEDRATE=1.000000
NIGHTTIME_SPEEDRATE=1.000000
EXP_RATE=1.000000 # 经验倍率
PAL_CAPTURE_RATE=1.000000 # 捕捉成功率
PAL_SPAWN_NUM_RATE=1.000000
PAL_DAMAGE_RATE_ATTACK=1.000000
PAL_DAMAGE_RATE_DEFENSE=1.000000
PLAYER_DAMAGE_RATE_ATTACK=1.000000
PLAYER_DAMAGE_RATE_DEFENSE=1.000000
PLAYER_STOMACH_DECREASE_RATE=1.000000
PLAYER_STAMINA_DECREACE_RATE=1.000000
PLAYER_AUTO_HP_REGENE_RATE=1.000000
PLAYER_AUTO_HP_REGENE_RATE_IN_SLEEP=1.000000
PAL_STOMACH_DECREACE_RATE=1.000000
PAL_STAMINA_DECREACE_RATE=1.000000
PAL_AUTO_HP_REGENE_RATE=1.000000
PAL_AUTO_HP_REGENE_RATE_IN_SLEEP=1.000000
BUILD_OBJECT_HP_RATE=1.000000
BUILD_OBJECT_DAMAGE_RATE=1.000000
BUILD_OBJECT_DETERIORATION_DAMAGE_RATE=1.000000
COLLECTION_DROP_RATE=1.000000
COLLECTION_OBJECT_HP_RATE=1.000000
COLLECTION_OBJECT_RESPAWN_SPEED_RATE=1.000000
ENEMY_DROP_ITEM_RATE=1.000000
DEATH_PENALTY=All # 死亡掉落全部物品
ENABLE_PLAYER_TO_PLAYER_DAMAGE=false
ENABLE_FRIENDLY_FIRE=false
ENABLE_INVADER_ENEMY=true
ACTIVE_UNKO=false
ENABLE_AIM_ASSIST_PAD=true
ENABLE_AIM_ASSIST_KEYBOARD=false
DROP_ITEM_MAX_NUM=3000
DROP_ITEM_MAX_NUM_UNKO=100
BASE_CAMP_MAX_NUM=128
BASE_CAMP_WORKER_MAXNUM=15
DROP_ITEM_ALIVE_MAX_HOURS=1.000000
AUTO_RESET_GUILD_NO_ONLINE_PLAYERS=false
AUTO_RESET_GUILD_TIME_NO_ONLINE_PLAYERS=72.000000
GUILD_PLAYER_MAX_NUM=20
BASE_CAMP_MAX_NUM_IN_GUILD=4
PAL_EGG_DEFAULT_HATCHING_TIME=72.000000
WORK_SPEED_RATE=1.000000 # 工作速度
AUTO_SAVE_SPAN=30.000000
IS_MULTIPLAY=false
IS_PVP=false
HARDCORE=false
PAL_LOST=false
CHARACTER_RECREATE_IN_HARDCORE=false
CAN_PICKUP_OTHER_GUILD_DEATH_PENALTY_DROP=false
ENABLE_NON_LOGIN_PENALTY=true
ENABLE_FAST_TRAVEL=true
IS_START_LOCATION_SELECT_BY_MAP=true
EXIST_PLAYER_AFTER_LOGOUT=false
ENABLE_DEFENSE_OTHER_GUILD_PLAYER=false
INVISBIBLE_OTHER_GUILD_BASE_CAMP_AREA_FX=false
BUILD_AREA_LIMIT=false
ITEM_WEIGHT_RATE=1.000000

COOP_PLAYER_MAX_NUM=4 # 单个队伍人数上限(需匹配!)
MAX_PLAYERS=8 # 最大玩家数

SERVER_NAME=Overstars' PalWorld
SERVER_DESCRIPTION=呃呃呃困死我了
ADMIN_PASSWORD=qwerty123
SERVER_PASSWORD=
PUBLIC_PORT=8211 # 游戏端口
PUBLIC_IP=
RCON_ENABLED=true # 启用RCON管理
RCON_PORT=25575 # RCON端口

REGION=
USEAUTH=true
BAN_LIST_URL=https://api.palworldgame.com/api/banlist.txt
RESTAPI_ENABLED=true
RESTAPI_PORT=8212
SHOW_PLAYER_LIST=false
CHAT_POST_LIMIT_PER_MINUTE=10
CROSSPLAY_PLATFORMS="(Steam,Xbox,PS5,Mac)"
ENABLE_WORLD_BACKUP=false
LOG_FORMAT_TYPE=Text
SUPPLY_DROP_SPAN=180
ENABLE_PREDATOR_BOSS_PAL=true
MAX_BUILDING_LIMIT_NUM=0
SERVER_REPLICATE_PAWN_CULL_DISTANCE=15000.000000
ALLOW_GLOBAL_PALBOX_EXPORT=true
ALLOW_GLOBAL_PALBOX_IMPORT=false

开放防火墙端口

1
2
sudo ufw allow 8211/udp  # 放行UDP协议
sudo ufw reload # 重载防火墙规则
1
2
docker compose up -d
docker compose logs -f

幻兽帕鲁有严重的内存泄漏问题,这部分有时间补上讲讲

定时任务

1
*/5 * * * * /home/yankf/docker/palworld/scripts/memory_monitor.sh

雾锁王国

使用enshrouded-server在ubuntu server搭建服务器。

拉取镜像到本地

1
docker pull sknnr/enshrouded-dedicated-server:latest

查看是否下载成功

1
docker images | grep enshrouded-dedicated-server

创建持久化存储卷,保存游戏存档和配置

参数 位置 说明
source 宿主机 Docker 管理的卷名称(不是直接路径)
target 容器内 容器内挂载点的绝对路径
1
docker volume create enshrouded-persistent-data

物理存储位置默认为

1
/var/lib/docker/volumes/enshrouded-persistent-data/_data

查看具体路径:

1
docker volume inspect enshrouded-persistent-data

若要删除,可使用docker volume rm

数据管理备份

1
2
3
4
5
# 查看数据卷
docker volume inspect enshrouded-persistent-data

# 备份数据卷
docker run --rm -v enshrouded-persistent-data:/data -v $(pwd):/backup alpine tar czf /backup/backup.tar.gz /data

运行

1
2
3
4
5
6
7
8
9
10
docker run \
--detach \
--name enshrouded-server \
--mount type=volume,source=enshrouded-persistent-data,target=/home/steam/enshrouded/savegame \
--publish 9006:15637/udp \
--env=SERVER_NAME='Overstars Enshrouded Containerized Server' \
--env=SERVER_SLOTS=16 \
--env=SERVER_PASSWORD='qwerty123' \
--env=PORT=15637 \
sknnr/enshrouded-dedicated-server:latest

感觉还是采用绑定宿主机目录而不是Docker Volume吧,这样更方便修改…

路径为/home/yankf/Game/enshrouded-savedata

授权给10000:10000用户,否则docker无权限

1
2
# 永久修复权限(在宿主机执行)
sudo chown -R 10000:10000 /home/yankf/Game/enshrouded-savedata

再新建一份enshrouded_server.json,用于配置服务器参数,不新建也行。

之后便可运行:

1
2
3
4
5
6
7
8
9
10
11
docker run \
--detach \
--name enshrouded-server \
--mount type=bind,source=/home/yankf/Game/enshrouded-savedata,target=/home/steam/enshrouded/savegame \
--mount type=bind,source=/home/yankf/Game/enshrouded-savedata/enshrouded_server.json,target=/home/steam/enshrouded/enshrouded_server.json \
--publish 15637:15637/udp \
--env=SERVER_NAME='Overstars Enshrouded Containerized Server' \
--env=SERVER_SLOTS=2 \
--env=SERVER_PASSWORD='qwerty123' \
--env=PORT=15637 \
sknnr/enshrouded-dedicated-server:latest

查看日志

1
docker logs -f enshrouded-server

更新服务器

1
2
3
4
docker stop enshrouded-server
docker rm enshrouded-server
docker pull sknnr/enshrouded-dedicated-server:latest
# 重新运行原docker run命令即可

进入服务器

注意不要从游戏内搜索,搜不到的。

3b345e6f7e50aa4b1287e7023d9302eb

要从steam-查看-游戏服务器-收藏-添加进行搜索

image-20250510223624584

雾锁王国(mornedhels-enshrouded-server)

1
2
3
4
5
6
7
8
9
10
11
12
13
docker run -d --name mornedhels-enshrouded \
--hostname enshrouded \
--restart=unless-stopped \
-p 15637:15637/udp \
-v /home/yankf/Game/mornedhels-enshrouded-server:/opt/enshrouded \
-e SERVER_NAME="Overstars Enshrouded Server" \
-e SERVER_PASSWORD="qwerty123" \
-e UPDATE_CRON="* */30 * * *" \
-e BACKUP_CRON="* */20 * * *" \
-e BACKUP_MAX_COUNT=8 \
-e PUID=4711 \
-e PGID=4711 \
mornedhels/enshrouded-server:latest

更新

1
2
docker stop mornedhels-enshrouded
docker rm mornedhels-enshrouded

查看日志

1
docker logs -f mornedhels-enshrouded

英灵神殿

英灵神殿参数

1
mkdir -p $HOME/valheim-server/config/worlds $HOME/valheim-server/data

把要迁移的StrayCatOverrun.db和fwl放在HOME/valheim-server/config/worlds_local/,运行如下命令
名称:Overstars233
两个选项选择:社区
ip地址:43.138.55.7,连接时不要加端口号
运行如下命令时不要sudo,否则$HOME地址不一样,如果无法使用docker命令点击这里

1
2
sudo gpasswd -a [你的用户名] docker
newgrp docker

MOD

寻找设置drop more loot的方法

ValheimPlus

BepInEx

该mod可能客户端装就可以。

https://valheim.thunderstore.io/package/TastyChickenLegs/DropMoreLoot/

BepInExPack Valheim

docker基础指令

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
## 镜像命令
docker images 查看docker镜像
docker images -a #列出本地所有的镜像
docker images -q #只显示镜像ID
docker images --digests #显示镜像的摘要信息
docker images --no-trunc #显示完整的镜像信息
docker rmi hello-world #从Docker中删除hello-world镜像
docker rmi -f hello-world #从Docker中强制删除hello-world镜像
## 容器命令
docker ps #列出当前所有正在运行的容器
docker ps -a #列出所有的容器
docker ps -l #列出最近创建的容器
docker ps -n 3 #列出最近创建的3个容器
docker ps -q #只显示容器ID
docker ps --no-trunc #显示当前所有正在运行的容器完整信息
exit #退出并停止容器
Ctrl+p+q #只退出容器,不停止容器
docker start 容器ID或容器名称 #启动容器
docker restart 容器ID或容器名称 #重新启动容器
docker stop容器ID或容器名称 #停止容器
docker kill 容器ID或容器名称 #强制停止容器
docker rm 容器ID或容器名称 #删除容器
docker rm -f 容器ID或容器名称 #强制删除容器
docker rm -f $(docker ps -a -q) #删除多个容器
docker logs [容器id] -f -t --since="2024-09-07" --tail=20 容器ID或容器名称 #查看容器日志
如:docker logs [容器id] -f -t --since="2018-09-10" --tail=10 f9e29e8455a5
 -f : 查看实时日志
 -t : 查看日志产生的日期
 --since : 此参数指定了输出日志开始日期,即只输出指定日期之后的日志
 --tail=10 : 查看最后的10条日志
docker top 容器ID或容器名称 #查看容器内运行的进程
docker inspect 容器ID或容器名称 #查看容器内部细节
docker attach 容器ID #进到容器内
docker exec 容器ID #进到容器内
————————————————
版权声明:本文为CSDN博主「苍穹尘」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lizhiqiang1217/article/details/89070075

运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
docker run -d \
--name valheim-server \
--cap-add=sys_nice \
--stop-timeout 120 \
-p 2456-2457:2456-2457/udp \
-v $HOME/Game/valheim-server/config:/config \
-v $HOME/Game/valheim-server/data:/opt/valheim \
-e SERVER_NAME="HatsuneMiku233" \
-e WORLD_NAME="HatsuneMiku" \
-e SERVER_PASS="qwerty123" \
-e BACKUPS_MAX_COUNT="5" \
-e BACKUPS_IDLE_GRACE_PERIOD="21600" \
-e BEPINEX=true\
ghcr.io/lloesche/valheim-server

看到如下消息时说明成功,如果服务器配置不够(内存)的话会直接卡死

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
Dec 12 16:14:31 /supervisord: valheim-updater [ 99%] Downloading update (57,385 of 57,385 KB)...
Dec 12 16:14:31 /supervisord: valheim-updater [100%] Download complete.
Dec 12 16:14:31 /supervisord: valheim-updater [----] Installing update...
Dec 12 16:14:31 /supervisord: valheim-updater [----] Extracting package...
Dec 12 16:14:31 /supervisord: valheim-updater [----] Extracting package...
Dec 12 16:14:31 /supervisord: valheim-updater [----] Extracting package...
Dec 12 16:14:31 /supervisord: valheim-updater [----] Extracting package...
Dec 12 16:14:31 /supervisord: valheim-updater [----] Installing update...
Dec 12 16:14:31 /supervisord: valheim-updater [----] Installing update...
Dec 12 16:14:31 /supervisord: valheim-updater [----] Installing update...
Dec 12 16:14:31 /supervisord: valheim-updater [----] Installing update...
Dec 12 16:14:31 /supervisord: valheim-updater [----] Installing update...
Dec 12 16:14:31 /supervisord: valheim-updater [----] Installing update...
Dec 12 16:14:31 /supervisord: valheim-updater [----] Installing update...
Dec 12 16:14:31 /supervisord: valheim-updater [----] Installing update...
Dec 12 16:14:31 /supervisord: valheim-updater [----] Cleaning up...
Dec 12 16:14:31 /supervisord: valheim-updater [----] Update complete, launching Steamcmd...
Dec 12 16:14:32 /supervisord: valheim-updater Redirecting stderr to '/home/valheim/Steam/logs/stderr.txt'
Dec 12 16:14:32 /supervisord: valheim-updater [ 0%] Checking for available updates...
Dec 12 16:14:32 /supervisord: valheim-updater [----] Verifying installation...
Dec 12 16:14:32 /supervisord: valheim-updater Steam Console Client (c) Valve Corporation - version 1669935972
Dec 12 16:14:32 /supervisord: valheim-updater -- type 'quit' to exit --
Dec 12 16:14:32 /supervisord: valheim-updater Loading Steam API...OK
Dec 12 16:14:32 /supervisord: valheim-updater
Dec 12 16:14:32 /supervisord: valheim-updater Connecting anonymously to Steam Public...
Dec 12 16:15:01 CRON[352]: pam_unix(cron:session): session opened for user root by (uid=0)
Dec 12 16:15:01 CRON[353]: (root) CMD ([ -f "/var/run/valheim/valheim-updater.pid" ] && kill -HUP $(cat /var/run/valheim/valheim-updater.pid))
Dec 12 16:15:01 CRON[352]: pam_unix(cron:session): session closed for user root
Dec 12 16:15:20 /supervisord: valheim-updater OK
Dec 12 16:15:20 /supervisord: valheim-updater Waiting for client config...OK
Dec 12 16:15:20 /supervisord: valheim-updater Waiting for user info...

食物

蛟龙肉汤(2honey + 1mushroom + 1serpentMeatCooked)/牦牛派(2Cloudberry+2LoxMeat+4BarleyFlour) + 血旺(2Thistle+2Bloodbag+4BarleyFlour) + 面包(10BarleyFlour)/蛟龙肉汤

药水

中份耐力:10蜂蜜+10云莓+10MushroomYellow
中份治疗:10蜂蜜+4血袋+10Raspberry+1dandelion

武器

黑曜石箭:8Wood+4Obsidian+2Feathers

服务器网路优化

  1. 启用BBR拥塞控制

    • 在Ubuntu服务器启用TCP BBR算法(即使使用UDP,BBR可优化底层网络吞吐量):

      1
      2
      3
      echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
      echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf
      sysctl -p
    • BBR可减少网络拥塞导致的延迟波动。

  2. 调整UDP缓冲区与QoS优先级

    • 查看当前缓冲区大小

      1
      2
      3
      4
      root@overstars:/proc/sys# cat /proc/sys/net/core/rmem_max
      212992
      root@overstars:/proc/sys# cat /proc/sys/net/core/wmem_max
      212992
    • 增大UDP接收/发送缓冲区,避免丢包:

      1
      2
      sysctl -w net.core.rmem_max=26214400
      sysctl -w net.core.wmem_max=26214400
    • 在路由器或服务器设置QoS规则,优先处理Enshrouded的UDP端口流量。