1. 系统安装依赖
Ubuntu/Debian系统(推荐)
bash
# 更新系统
sudo apt update
# 安装依赖
sudo apt install -y lib32gcc-s1 lib32stdc++6 libc6-i386 wget screen p7zip-full p7zip-rar git vim
# 开放端口(没有则跳过)
iptables -A INPUT -p udp -m state --state NEW -m udp --dport 27015-j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 27015-j ACCEPT
CentOS/RHEL系统(不推荐)
bash
# 更新系统
sudo yum update -y
# 安装依赖
sudo yum install -y glibc.i686 libstdc++.i686 wget screen p7zip p7zip-plugins git vim
# 开放端口(没有则跳过)
sudo firewall-cmd --permanent --add-port=27015/udp
sudo firewall-cmd --permanent --add-port=27015/tcp
sudo firewall-cmd --reload
2. 创建用户和目录
bash
# 创建专用用户
sudo useradd -m -s /bin/bash l4d2server
sudo passwd l4d2server
# 切换到新用户
su - l4d2server
# 创建工作目录
mkdir -p ~/steamcmd ~/l4d2
3. 开始部署
3.1 安装SteamCMD
bash
# 进入SteamCMD目录
cd ~/steamcmd
# 下载SteamCMD
wget https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
# 解压
tar -xvzf steamcmd_linux.tar.gz
# 删除压缩包
rm steamcmd_linux.tar.gz
3.2 下载L4D2服务器文件
bash
# 开始部署
cd ~/steamcmd
# 部署方式二选一,匿名登录部署如果失败请登录账号部署
# 匿名 anonymous 登录部署(官方可能关闭了匿名访问)
./steamcmd.sh +force_install_dir ~/l4d2 +login anonymous +app_update 222860 validate +quit
# 使用已购买l4d2的steam账号登录部署,替换"账号" "密码"为你自己的账号密码。需要steamAPP端认证登录。
./steamcmd.sh +force_install_dir ~/l4d2 +login 账号 密码 +app_update 222860 validate +quit
4. 配置文件
bash
# 创建使用官方默认值的配置文件
mkdir -p ~/l4d2/left4dead2/cfg/
cat > ~/l4d2/left4dead2/cfg/server.cfg << 'EOF'
// =============================================================================
// Left 4 Dead 2 服务器配置文件(官方默认值)
// 最后更新: $(date)
// =============================================================================
// -----------------------------------------------------------------------------
// 服务器基本信息设置
// -----------------------------------------------------------------------------
hostname "My L4D2 Server" // 服务器名称(请修改为您自己的服务器名)
rcon_password "your_rcon_password" // RCON管理密码(请修改为强密码)
sv_password "" // 服务器加入密码(留空表示无密码)
sv_contact "admin@example.com" // 管理员联系方式
sv_steamgroup "" // 关联的Steam组ID(留空表示不关联)
sv_steamgroup_exclusive 0 // 0=公共游戏,1=仅限组成员,2=仅限好友
sv_region 4 // 地区代码: 0-美东,1-美西,2-南美,3-欧洲,4-亚洲,5-澳洲,6-中东,7-非洲,255-全球
sv_lan 0 // 0=互联网服务器,1=局域网服务器
// -----------------------------------------------------------------------------
// 游戏模式与难度设置
// -----------------------------------------------------------------------------
mp_gamemode "coop" // 游戏模式: coop(合作),versus(对抗),survival(生存)
z_difficulty "Normal" // 游戏难度: Easy, Normal, Hard, Impossible(专家)
director_no_human_zombies 1 // 设为1可防止玩家加入感染者方,仅战役模式
// -----------------------------------------------------------------------------
// 玩家管理与安全设置
// -----------------------------------------------------------------------------
mp_disable_autokick 0 // 禁用自动踢人(空闲玩家)- 默认: 0
sv_allow_lobby_connect_only 1 // 允许玩家直接连接服务器 - 默认: 1
sv_force_unreserved 0 // 允许超过4名玩家加入服务器 - 默认: 0
sv_removehumanlimit 0 // 移除人类玩家限制 - 默认: 0
sv_tags "" // 服务器标签 - 默认: 空
sv_pure 0 // 允许玩家使用自定义文件 - 默认: 0
sv_consistency 1 // 文件一致性检查 - 默认: 1
sv_cheats 0 // 禁用作弊(1=开启,0=关闭)- 默认: 0
// -----------------------------------------------------------------------------
// 性能与网络优化设置
// -----------------------------------------------------------------------------
sv_forcepreload 0 // 强制预加载资源 - 默认: 0
fps_max 300 // 服务器FPS限制 - 默认: 300
sv_minrate 5000 // 最小传输速率 - 默认: 5000
sv_maxrate 30000 // 最大传输速率 - 默认: 30000
sv_mincmdrate 10 // 最小命令速率 - 默认: 10
sv_maxcmdrate 30 // 最大命令速率 - 默认: 30
sv_minupdaterate 10 // 最小更新速率 - 默认: 10
sv_maxupdaterate 30 // 最大更新速率 - 默认: 30
sv_client_cmdrate_difference 30 // 客户端命令速率差异 - 默认: 30
sv_client_predict 1 // 客户端预测 - 默认: 1
sv_client_max_interp_ratio 2 // 客户端最大插值比率 - 默认: 2
net_splitpacket_max_rate 15000 // 分包最大速率 - 默认: 15000
net_maxroutable 1200 // 最大路由包大小 - 默认: 1200
nb_update_frequency 0.1 // AI更新频率 - 默认: 0.1
tick_door_speed 1.0 // 修复高tick值下的开关门问题 - 默认: 1.0
// -----------------------------------------------------------------------------
// AI与游戏平衡设置
// -----------------------------------------------------------------------------
sb_all_bot_game 0 // 允许全部为Bot的游戏 - 默认: 0
sb_open_fire 0 // Bot开枪延迟(0=无延迟)- 默认: 0
director_molotov_density 30 // AI随机放置汽油弹密度 - 默认: 30
director_pipe_bomb_density 30 // AI随机放置土制炸弹密度 - 默认: 30
director_pain_pill_density 15 // AI随机放置止痛药密度 - 默认: 15
z_non_head_damage_factor_expert 0.5 // 非头部伤害系数(专家难度)- 默认: 0.5
survivor_revive_duration 5 // 拉人起来的时间(秒)- 默认: 5
survivor_revive_health 40 // 被拉起来后的血量 - 默认: 40
rescue_min_dead_time 30 // 玩家死亡后可被救援的时间 - 默认: 30
// -----------------------------------------------------------------------------
// 特感感染者设置
// -----------------------------------------------------------------------------
z_tank_health 4000 // 坦克生命值 - 默认: 4000
z_tank_speed 210 // 坦克移动速度 - 默认: 210
tank_burn_duration_expert 40 // 坦克燃烧死亡时间(专家难度)- 默认: 40
z_witch_health 1000 // 女巫生命值 - 默认: 1000
z_witch_damage 100 // 女巫伤害 - 默认: 100
z_hunter_health 250 // 猎人生命值 - 默认: 250
z_hunter_speed 300 // 猎人移动速度 - 默认: 300
hunter_pounce_air_speed 700 // 猎人飞扑速度 - 默认: 700
z_gas_health 250 // 烟鬼生命值 - 默认: 250
z_gas_speed 210 // 烟鬼移动速度 - 默认: 210
tongue_range 750 // 烟鬼舌头长度 - 默认: 750
z_jockey_health 325 // Jockey生命值 - 默认: 325
z_jockey_speed 250 // Jockey移动速度 - 默认: 250
z_charger_health 600 // Charger生命值 - 默认: 600
z_spitter_health 100 // Spitter生命值 - 默认: 100
z_exploding_health 50 // Boomer生命值 - 默认: 50
z_exploding_speed 175 // Boomer移动速度 - 默认: 175
z_exploding_splat_radius 200 // Boomer爆炸范围 - 默认: 200
// -----------------------------------------------------------------------------
// 物品与武器设置
// -----------------------------------------------------------------------------
first_aid_heal_percent 0.8 // 医疗包恢复生命百分比 - 默认: 0.8
first_aid_kit_max_heal 80 // 医疗包最大恢复生命数 - 默认: 80
first_aid_kit_use_duration 5 // 使用医疗包所需时间(秒)- 默认: 5
pain_pills_health_value 50 // 止痛药补血量 - 默认: 50
pain_pills_decay_rate 0.34 // 止痛药损耗速度 - 默认: 0.34
ammo_smg_max 480 // 冲锋枪子弹上限 - 默认: 480
ammo_buckshot_max 128 // 散弹枪子弹上限 - 默认: 128
ammo_assaultrifle_max 360 // 自动步枪子弹上限 - 默认: 360
ammo_huntingrifle_max 180 // 狙击枪子弹上限 - 默认: 180
// -----------------------------------------------------------------------------
// 僵尸潮设置
// -----------------------------------------------------------------------------
z_common_limit 30 // 每次刷新的僵尸数量 - 默认: 30
z_mega_mob_size 30 // 触发警钟时的僵尸数量 - 默认: 30
z_mob_spawn_max_size 30 // 僵尸暴走时的最大数量 - 默认: 30
z_mob_spawn_min_size 30 // 僵尸暴走时的最小数量 - 默认: 30
director_special_initial_spawn_delay_min 0 // 特感初始生成最小延迟 - 默认: 0
director_special_initial_spawn_delay_max 3 // 特感初始生成最大延迟 - 默认: 3
director_special_initial_spawn_delay_max_extra 2 // 特感初始生成额外延迟 - 默认: 2
director_build_up_min_interval 5 // 僵尸产出间隔 - 默认: 5
// -----------------------------------------------------------------------------
// 日志设置
// -----------------------------------------------------------------------------
log on // 启用日志 - 默认: on
sv_log_onefile 0 // 每个会话创建新日志文件 - 默认: 0
sv_logfile 1 // 启用日志文件 - 默认: 1
sv_logbans 1 // 记录封禁日志 - 默认: 1
sv_logecho 1 // 在控制台显示日志 - 默认: 1
// -----------------------------------------------------------------------------
// 插件设置
// -----------------------------------------------------------------------------
sm_advertisements_enabled 1 // 启用广告插件 - 默认: 1
EOF
5. 启动、停止、更新命令脚本
5.1 启动脚本
命令启动:
bash
~/l4d2/srcds_run -game left4dead2 -insecure +hostport 27015 +maxplayers 8 +map c1m1_hotel +exec server.cfg -nomaster +sv_gametypes coop -condebug
脚本启动:
bash
# 创建启动脚本
cat > ~/l4d2/start.sh << 'EOF'
#!/bin/bash
SCREEN_NAME="l4d2server"
# 检查游戏模式参数
case "$1" in
"coop")
MAP="c1m1_hotel"
GAMETYPE="coop"
;;
"versus")
MAP="c1m1_hotel"
GAMETYPE="versus"
;;
"survival")
MAP="l4d_airport01_greenhouse"
GAMETYPE="survival"
;;
*)
MAP="c1m1_hotel"
GAMETYPE="coop"
;;
esac
# 检查 screen 会话是否已经存在
# -Q windows 会查询会话的窗口列表,如果会话不存在则命令失败
if screen -S "$SCREEN_NAME" -Q windows > /dev/null 2>&1; then
echo "========================================"
echo "错误:名为 '$SCREEN_NAME' 的服务器会话已在运行。"
echo "请勿重复启动。"
echo "使用 'screen -r $SCREEN_NAME' 连接到服务器控制台。"
echo "使用 '~/l4d2/update.sh' 更新游戏。"
echo "使用 '~/l4d2/stop.sh' 停止服务器。"
echo "使用 '~/l4d2/restart.sh' 重启服务器。"
echo "========================================"
exit 1
fi
# 启动服务器
echo "正在启动 L4D2 服务器..."
screen -dmS "$SCREEN_NAME" ~/l4d2/srcds_run \
-game left4dead2 -insecure \
+hostport 27015 \
+maxplayers 8 \
+map "$MAP" \
+exec server.cfg -nomaster \
+sv_gametypes "$GAMETYPE" \
-condebug
echo "========================================"
echo "L4D2服务器已成功启动!"
echo "游戏模式: $GAMETYPE"
echo "地图: $MAP"
echo "使用 'screen -r $SCREEN_NAME' 查看控制台"
echo "使用 '~/l4d2/update.sh' 更新游戏。"
echo "使用 '~/l4d2/stop.sh' 停止服务器。"
echo "使用 '~/l4d2/restart.sh' 重启服务器。"
echo "========================================"
EOF
# 添加执行权限
chmod +x ~/l4d2/start.sh
5.2 停止脚本
bash
# 创建停止脚本
cat > ~/l4d2/stop.sh << 'EOF'
#!/bin/bash
SCREEN_NAME="l4d2server"
# 检查 screen 会话是否正在运行
# -Q windows 如果会话不存在则命令失败,我们用 ! 来取反
if ! screen -S "$SCREEN_NAME" -Q windows > /dev/null 2>&1; then
echo "========================================"
echo "错误:名为 '$SCREEN_NAME' 的服务器会话未运行。"
echo "使用 '~/l4d2/update.sh' 更新游戏。"
echo "使用 '~/l4d2/start.sh' 启动服务器。"
echo "========================================"
exit 1
fi
# 停止服务器
screen -S "$SCREEN_NAME" -X quit
echo "========================================"
echo "L4D2服务器已停止!"
echo "使用 '~/l4d2/update.sh' 更新游戏。"
echo "使用 '~/l4d2/start.sh' 启动服务器。"
echo "========================================"
EOF
# 添加执行权限
chmod +x ~/l4d2/stop.sh
5.3 重启脚本
bash
# 创建重启脚本
cat > ~/l4d2/restart.sh << 'EOF'
#!/bin/bash
# 先停止服务器
~/l4d2/stop.sh
# 等待几秒
sleep 5
# 再启动服务器
~/l4d2/start.sh $1
echo "L4D2服务器已重启"
EOF
# 添加执行权限
chmod +x ~/l4d2/restart.sh
5.4 更新游戏并启动脚本
命令更新:
bash
~/steamcmd/steamcmd.sh +force_install_dir ~/l4d2 +login anonymous +app_update 222860 +quit
脚本更新:
bash
# 创建更新脚本
cat > ~/l4d2/update.sh << 'EOF'
#!/bin/bash
echo "正在停止L4D2服务器..."
~/l4d2/stop.sh
echo "正在更新L4D2服务器文件..."
~/steamcmd/steamcmd.sh +force_install_dir ~/l4d2 +login anonymous +app_update 222860 +quit
echo "正在重新启动L4D2服务器..."
~/l4d2/start.sh $1
echo "更新完成!"
EOF
# 添加执行权限
chmod +x ~/l4d2/update.sh
5.5 定时任务设置
bash
# 创建定时任务脚本
cat > ~/l4d2/cron-update.sh << 'EOF'
#!/bin/bash
echo "$(date): 开始自动更新L4D2服务器" >> /home/l4d2server/l4d2/cron.log
~/l4d2/update.sh >> /home/l4d2server/l4d2/cron.log 2>&1
echo "$(date): L4D2服务器自动更新完成" >> /home/l4d2server/l4d2/cron.log
EOF
# 设置执行权限
chmod +x ~/l4d2/cron-*.sh
# 设置定时任务
(crontab -l 2>/dev/null; echo "0 3 * * * /home/l4d2server/l4d2/cron-update.sh") | crontab -
6. 管理员权限
依赖第三方插件
- 链接: https://pan.quark.cn/s/9273fba96307?pwd=SEPz
sourcemod-1.12.0-git7210-linux.tar.gzmmsource-1.12.0-git1219-linux.tar.gzl4dtoolz-l4d2-linux-aa143fb.tar.gz三件套整合包.7z
bash
# 下载SourceMod、MetaMod、L4DToolz解压至此目录下
cd ~/l4d2/left4dead2/
bash
# 添加管理员权限
vim ~/l4d2/left4dead2/addons/sourcemod/configs/admins_simple.ini
# 添加管理员,格式为:"SteamID" "权限"
# "STEAM_x:x:xxxxxx" "99:z"
"STEAM_0:0:123456789" "99:z"
7. 使用方法
7.1 启动服务器
bash
# 启动服务器(默认合作模式)
~/l4d2/start.sh
# 启动指定游戏模式
~/l4d2/start.sh coop # 合作模式
~/l4d2/start.sh versus # 对抗模式
~/l4d2/start.sh survival # 生存模式
7.2 管理服务器
bash
# 停止服务器
~/l4d2/stop.sh
# 重启服务器
~/l4d2/restart.sh
# 重启指定游戏模式
~/l4d2/restart.sh coop
~/l4d2/restart.sh versus
~/l4d2/restart.sh survival
# 更新服务器
~/l4d2/update.sh
# 查看服务器控制台
screen -r l4d2server
# 从控制台断开(Ctrl+A,然后按D)
7.3 连接服务器
在游戏中按 ~ 键打开控制台,输入:
connect your_server_ip:27015
8. 懒人包:预配置L4D2服务器文件下载
为了方便快速部署L4D2服务器,我已经将完整配置好的服务器文件打包上传到云盘,可以直接下载使用,无需手动配置。
- 链接: https://pan.quark.cn/s/9273fba96307?pwd=SEPz
l4d2server_Linux.7z(纯净版,无管理权限配置)l4d2server_Linux插件版.7z(整合豆瓣酱部分插件,含管理权限配置)
懒人包使用方法一:脚本自动执行步骤
bash
# 将压缩包和setup_l4d2.sh放在同一个目录中
# 在root账户下执行脚本
sudo bash setup_l4d2.sh
启动前修改配置:
bash
# 添加管理员权限
vim ~/l4d2/left4dead2/addons/sourcemod/configs/admins_simple.ini
# 添加管理员,格式为:"SteamID" "权限"
# "STEAM_x:x:xxxxxx" "99:z"
"STEAM_0:0:123456789" "99:z"
设置定时任务(可选):
bash
# 设置定时任务"在每天的凌晨3点0分"更新游戏并启动
(crontab -l 2>/dev/null; echo "0 3 * * * /home/l4d2server/l4d2/cron-update.sh") | crontab -
懒人包使用方法二:手动执行步骤
下载并解压文件:
注意:l4d2server不能使用root用户启动,必须先创建用户
bash
#1.根据您的操作系统,安装必要的依赖库:
#Ubuntu/Debian系统:
sudo apt update
sudo apt install -y lib32gcc-s1 lib32stdc++6 libc6-i386
#CentOS/RHEL系统:
sudo yum update -y
sudo yum install -y glibc.i686 libstdc++.i686
#2.创建用户
adduser l4d2server
#3.根据提示输入秘密(任意密码即可),两次一样
passwd l4d2server
#4.切换到l4d2server用户
su - l4d2server
cd
# 下载并解压
7z x l4d2server_Linux版.7z
# 或者
7z x l4d2server_Linux插件版.7z
# 示例:将解压后的文件放在l4d2server用户根目录下
cd l4d2server_Linux版
mv */ ~/
# ls 看到这些目录 l4d2 Steam steamcmd

注意:如果使用root用户解压必须修改文件所属用户、所属组
bash
# 使用root账户执行下面命令
cd /home/l4d2server/
chown -R l4d2server:l4d2server *
chmod -R 755 /home/l4d2server/

启动前修改配置:
bash
# 添加管理员权限
vim ~/l4d2/left4dead2/addons/sourcemod/configs/admins_simple.ini
# 添加管理员,格式为:"SteamID" "权限"
# "STEAM_x:x:xxxxxx" "99:z"
"STEAM_0:0:123456789" "99:z"
设置定时任务(可选):
bash
# 设置定时任务"在每天的凌晨3点0分"更新游戏并启动
(crontab -l 2>/dev/null; echo "0 3 * * * /home/l4d2server/l4d2/cron-update.sh") | crontab -
首次启动服务器:
bash
# 更新游戏并启动
~/l4d2/update.sh
连接服务器:
在游戏中按 ~ 键打开控制台,输入:
connect your_server_ip:27015
通过懒人包,可以快速部署一个功能完善、性能优化的L4D2服务器,无需手动安装和配置。祝游戏愉快!