L4D2私服搭建

 

参考

搭建

L4D2 服务端体积较大(约 30GB), 建议在宿主机上预先下载, 然后通过数据卷挂载到 Docker 容器中, 这样可以避免每次重建镜像都重新下载

下载服务端

在宿主机创建一个工作目录(如 ~/l4d2_host), 并下载 SteamCMD:

mkdir -p ~/l4d2_host && cd ~/l4d2_host
curl -sSL https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz | tar zxvf -

使用 SteamCMD 匿名登录并下载 L4D2 服务端(AppID: 222860):

./steamcmd.sh +login anonymous +force_install_dir ./l4d2_server +app_update 222860 validate +quit

完整结构

.
├── bin
├── dedicatedserver_readme.txt
├── hl2
├── hlds_steamgames.vdf
├── l4d2-devkit.sh
├── left4dead2
├── left4dead2.dat
├── left4dead2_dlc1
├── left4dead2_dlc2
├── left4dead2_dlc3
├── left4dead2.exe
├── left4dead2.ico
├── left4dead2_lv
├── platform
├── srcds_linux
├── srcds_run
├── steam_appid.txt
├── steamapps
└── update

docker构建

Dockerfile

FROM debian:12-slim

ENV LANG=C.UTF-8
ENV DEBIAN_FRONTEND=noninteractive

# 替换为清华源, 添加 32 位架构支持并安装依赖
RUN sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list.d/debian.sources && \
    dpkg --add-architecture i386 && \
    apt-get update && \
    apt-get install -y --no-install-recommends \
        ca-certificates curl lib32gcc-s1 lib32stdc++6 lib32z1 \
        lib32ncurses6 lib32tinfo6 libcurl4 libcurl4:i386 \
        tmux && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# 创建 steam 用户并切换
RUN useradd -m -s /bin/bash steam
USER steam
WORKDIR /home/steam

# 暴露游戏默认端口 (TCP/UDP)
EXPOSE 27015/tcp 27015/udp

构建镜像

docker build -t l4d2_server:latest .

服务器配置

在宿主机的 ~/l4d2_host 目录下创建配置文件, 后续通过挂载注入容器

服务器基础配置

宿主机下新建server.cfg, 后续会挂载到容器的left4dead2/cfg/server.cfg

// ================= 基础信息 =================
hostname "My L4D2 Docker Server"      // 服务器名称
sv_steamgroup "你的Steam组ID"          // 关联的 Steam 组 ID
sv_steamgroup_exclusive "1"           // 是否仅限 Steam 组成员进入 (0=否, 1=是)
sv_tags "hidden"                      // 隐藏服务器, 不在公共大厅显示
sv_region "255"                       // 区域设置 (255 表示全球)

// ================= 游戏规则 =================
sv_consistency "0"                    // 允许玩家使用不同的 Mod 进入 (必须为0, 否则三方图报错)
sv_allow_lobby_connect_only "0"       // 允许通过 IP 直连 (0=允许, 1=仅限大厅)
sv_cheats "0"                         // 是否开启作弊 (0=关闭, 1=开启)

// ================= 网络与性能 =================
sv_maxrate "30000"                    // 最大网络带宽限制
sv_minrate "20000"                    // 最小网络带宽限制
fps_max "300"                         // 服务器最大帧率

欢迎信息(可选)

宿主机新建motd.txt, 玩家进入服务器时会弹出此文本

后续会挂载到容器的left4dead2/cfg/motd.txt

Welcome to My L4D2 Server!
Enjoy your stay!

部署与启动

创建容器

docker run -d \
  --name l4d2 \
  --net host \
  --restart unless-stopped \
  -v $(pwd)/l4d2_server:/home/steam/l4d2_server \
  -v $(pwd)/server.cfg:/home/steam/l4d2_server/left4dead2/cfg/server.cfg \
  -v $(pwd)/motd.txt:/home/steam/l4d2_server/left4dead2/cfg/motd.txt \
  l4d2_server:latest \
  /home/steam/l4d2_server/srcds_run \
  -game left4dead2 \
  -insecure \
  +map c1m1_hotel \
  -maxplayers 8 \
  +exec server.cfg

--net host: 使用宿主机网络, 避免端口映射带来的 NAT 问题(推荐)

-insecure: 禁用 VAC 反作弊, 运行三方图和插件的必要条件

+map c1m1_hotel: 初始启动地图(死亡中心第一关)

+exec server.cfg: 加载配置文件

建图

获取目标地图代码, 执行命令建立地图

docker exec -it l4d2_mini sh /home/steam/left4dead2_server/srcds_run -game left4dead2 -secure -insecure +map 地图代码 -maxplayers 8 -condebug +exec /home/steam/left4dead2_server/left4dead2/cfg/server.cfg -nomaster

若要使用三方图, 须将地图文件拷贝到容器内/home/steam/l4d2server/left4dead2/addons路径下

  • 示例, 使用广州增城地图

拷贝vpk文件

docker cp ./2396847377.vpk l4d2:/home/steam/l4d2server/left4dead2/addons

修改地图代码为增城第一关, 启动

docker exec -it l4d2 sh /home/steam/l4d2server/srcds_run -game left4dead2 -secure -insecure +map zc_m1 -maxplayers 8 -condebug +exec /home/steam/l4d2server/left4dead2/cfg/server.cfg -nomaster

连接

创建大厅

页面选择: 完成战役-与好友一起玩游戏-创建新战役大厅

设置服务器

服务器类型选目前最佳专用

~启动控制台, 设置强制使用指定服务器, 开始游戏

mm_dedicated_force_servers 服务器IP:端口
  • 示例, 设服务器IP为112.126.28.203, 端口默认27015
mm_dedicated_force_servers 112.126.28.203:27015

连接成功后服务端显示用户已经加入

安装插件

获取 Metamod 和 SourceMod: 前往 Metamod 官网 和 SourceMod 官网 下载最新的 Linux 版本

解压到游戏目录: 将下载的压缩包解压到宿主机的 l4d2_server/left4dead2/ 目录下(会生成 addons 和 cfg 等文件夹, 直接覆盖合并)

配置 Metamod: 在 left4dead2/addons/ 目录下创建 metamod.vdf 文件, 内容如下

"Plugin"
{
    "file"    "../left4dead2/addons/sourcemod/bin/sourcemod_mm"
}

重启服务器: docker restart l4d2

进入容器输入 meta list 和 sm plugins list 验证是否安装成功

控制台指令

基础

队友传送

Warp_all_survivors_here

作弊

Sv_Cheats 1

无敌

god 1

穿墙

noclip

第三人称

thirdpersonshoulder 1

绑定按键

# 将常用指令绑定到键盘按键上, 例如将第三人称绑定到 <kbd>V</kbd> 键: 
bind g "thirdpersonshoulder 1"

bind v "thirdpersonshoulder 1"
bind b "thirdpersonshoulder 0"
bind p "noclip"

武器

无限弹药不换弹夹

sv_infinite_ammo 1

激光

upgrade_add laser_sight

榴弹

give weapon_grenade_launcher

m60

give rifle_m60

地图

map 地图代码

突变模式

map 地图代码 模式名

猎头者

map 地图代码 mutation2