18 10 月 2026

每次开新服都要重来一遍:装依赖、建用户、配 Swap、设防火墙、装 SteamCMD、配 systemd……同样的步骤抄十遍,总有一次抄错。这篇把这些固化成一套一键环境脚本:新机器跑一遍,十分钟后就是一个随时可以装任何游戏的标准开服环境。

本文基于 财富云计算 NAT 型云服务器(无独立公网 IP、价格比独立 IP 机型省一半以上)的 Ubuntu 22.04 环境编写。脚本可直接抄走,按注释改几个变量即可。

一、脚本要干什么:一张清单

步骤内容为什么
1系统更新 + 基础工具vim/curl/git,裸机啥都没有
2创建普通用户 + sudo不用 root 日常操作,安全基线
3配置 Swap小内存机器的救命稻草,Swap 优化
4内核参数调优游戏服专用 sysctl,内核调优
5防火墙(ufw)默认拒绝 + 按需放行,防火墙配置
6fail2ban防暴力破解,fail2ban 实战
7装 SteamCMD所有 Steam 游戏的基础,SteamCMD 指南
8装 screen/tmux会话保持,screen 与 tmux

二、一键脚本:直接抄走

#!/bin/bash
# ============================================
# 游戏开服环境一键配置脚本
# 适用:Ubuntu 22.04 / Debian 12
# 用法:bash setup-gameserver.sh
# ============================================
set -e

# ---------- 可改变量 ----------
SWAP_SIZE="4G"              # Swap 大小,小机器建议 4G,内存大可不设
SSH_PORT="2xxxx"            # SSH 端口,改成一个高位端口
GAME_USER="gameserver"      # 跑服务端的普通用户

# ---------- 1. 系统更新与基础工具 ----------
echo "[1/8] 系统更新..."
apt update && apt upgrade -y
apt install -y vim curl wget git htop net-tools \
  software-properties-common ufw fail2ban \
  screen tmux unzip tar

# ---------- 2. 创建普通用户 ----------
echo "[2/8] 创建用户 $GAME_USER..."
id "$GAME_USER" &>/dev/null || adduser --disabled-password --gecos "" "$GAME_USER"
usermod -aG sudo "$GAME_USER"

# ---------- 3. Swap ----------
echo "[3/8] 配置 Swap..."
if [ ! -f /swapfile ]; then
  fallocate -l "$SWAP_SIZE" /swapfile
  chmod 600 /swapfile
  mkswap /swapfile
  swapon /swapfile
  echo '/swapfile none swap sw 0 0' >> /etc/fstab
  # 游戏服倾向:少用 Swap,但要有
  sysctl -w vm.swappiness=10
  echo 'vm.swappiness=10' >> /etc/sysctl.d/99-gameserver.conf
fi

# ---------- 4. 内核参数 ----------
echo "[4/8] 内核调优..."
cat > /etc/sysctl.d/99-gameserver.conf << 'EOF'
# 游戏服网络调优
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.udp_rmem_min = 8192
net.ipv4.udp_wmem_min = 8192
# 连接跟踪(多玩家同机时防 table 满)
net.netfilter.nf_conntrack_max = 131072
# 文件句柄
fs.file-max = 65535
# 少用 Swap
vm.swappiness = 10
EOF
sysctl -p /etc/sysctl.d/99-gameserver.conf

# ---------- 5. 防火墙 ----------
echo "[5/8] 防火墙配置..."
ufw default deny incoming
ufw default allow outgoing
ufw allow "$SSH_PORT"/tcp comment 'SSH'
# 游戏端口按需加,例如帕鲁:
# ufw allow 8211/udp comment 'Palworld'
# ufw allow 27015/udp comment 'Palworld Query'
ufw --force enable

# ---------- 6. SSH 加固 ----------
echo "[6/8] SSH 加固..."
sed -i "s/^#\?Port .*/Port $SSH_PORT/" /etc/ssh/sshd_config
sed -i "s/^#\?PermitRootLogin .*/PermitRootLogin prohibit-password/" /etc/ssh/sshd_config
systemctl restart sshd

# ---------- 7. fail2ban ----------
echo "[7/8] fail2ban..."
cat > /etc/fail2ban/jail.local << EOF
[sshd]
enabled = true
port = $SSH_PORT
maxretry = 3
bantime = 86400
findtime = 600
EOF
systemctl enable --now fail2ban

# ---------- 8. SteamCMD ----------
echo "[8/8] 安装 SteamCMD..."
if [ ! -d /home/$GAME_USER/steamcmd ]; then
  mkdir -p /home/$GAME_USER/steamcmd
  cd /home/$GAME_USER/steamcmd
  wget -q https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
  tar -xzf steamcmd_linux.tar.gz
  chown -R $GAME_USER:$GAME_USER /home/$GAME_USER/steamcmd
fi

echo "========================================"
echo "环境配置完成!接下来:"
echo "1. 用 $GAME_USER 登录,装游戏服务端(见各游戏教程)"
echo "2. 配 systemd 托管,参考:"
echo "   https://z0w.cn/wiki/systemd-service-guide.html"
echo "3. 端口映射参考:"
echo "   https://z0w.cn/wiki/nat-port-forwarding-guide.html"
echo "========================================"

使用前必改的三个变量:SSH_PORT(必须改)、SWAP_SIZE(按内存定)、GAME_USER(随意)。


三、跑完脚本之后:装游戏四步

环境就绪,装任何 Steam 游戏都是同一个套路(以帕鲁为例):

# 1. 切到普通用户
su - gameserver

# 2. SteamCMD 装服务端(匿名登录,AppID 1623730 是帕鲁)
cd ~/steamcmd
./steamcmd.sh +login anonymous +app_update 1623730 validate +quit

# 3. 进服务端目录,改配置(端口、RCON 密码、玩家上限)
cd ~/Steam/steamapps/common/PalServer
vim PalWorldSettings.ini

# 4. systemd 托管,崩了自动拉起
# 完整教程:https://z0w.cn/wiki/systemd-service-guide.html

其他游戏的 AppID 和配置差异,见各游戏开服教程和SteamCMD 完全使用指南。


四、systemd 托管模板(游戏的通用骨架)

所有游戏服务端都可以套这个模板:

# /etc/systemd/system/game-server.service
[Unit]
Description=Game Server
After=network.target

[Service]
Type=simple
User=gameserver
WorkingDirectory=/home/gameserver/Steam/steamapps/common/PalServer
ExecStart=/home/gameserver/Steam/steamapps/common/PalServer/PalServer.sh
Restart=always
RestartSec=10
# 资源限额:保护同机其他服务
MemoryMax=12G
CPUQuota=300%
# 安全加固
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/home/gameserver/Steam/steamapps/common/PalServer

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now game-server
sudo systemctl status game-server   # 看状态
sudo journalctl -u game-server -f   # 看日志

五、备份脚本:和环境脚本配套

光有环境不够,备份也要一键:

#!/bin/bash
# 每日存档备份 + 异地同步
BACKUP_DIR=/backup
GAME_DIR=/home/gameserver/Steam/steamapps/common/PalServer/Pal/Saved
DATE=$(date +%F)

mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/save_$DATE.tar.gz" -C "$GAME_DIR" . 2>/dev/null

# 保留 14 天
find "$BACKUP_DIR" -name "save_*.tar.gz" -mtime +14 -delete

# 异地同步(配好 rclone 后启用)
# rclone copy "$BACKUP_DIR/save_$DATE.tar.gz" remote:gamesave/

挂 crontab 每天跑:

crontab -e
# 0 4 * * * /usr/local/bin/backup-save.sh

完整方案见crontab 计划任务完全指南和rsync 同步与定时备份实战。


六、脚本使用的三个注意

  1. SSH 端口改完后,当前连接不会断(sshd 重启不影响已建立连接),但下次连接要用新端口——先测试新端口能连,再关旧会话。
  2. 防火墙先放行 SSH 端口再 enable,脚本里的顺序就是对的,别手动打乱。
  3. 游戏端口别在脚本里预先放行——按你实际开的服加,端口表规划见端口速查表。

结语

一键脚本的价值不是「省十分钟」,是把「凭记忆操作」变成「标准化流程」——每台新机器环境一致,出问题有据可查,换机器重建只要十分钟。配合 systemd 托管和自动备份,你的开服工作流就完整了:环境一键 → 装服四步 → 托管常驻 → 备份自动。

想图形化管理不想敲命令?看游戏开服面板搭建指南;想多服同机,看多游戏共存一台服务器。

财富云计算 专注 NAT 型云服务器,无独立公网 IP、价格比独立 IP 机型省一半以上,重装系统后跑一遍本站脚本即可满血复活,30+ 游戏 AppID 与配置教程见端口速查表。

延伸阅读
  1. 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
  2. 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
  3. 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
  4. 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
  5. 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
  6. RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
  7. 短链接服务搭建:Shlink 自托管,链接数据自己掌握
  8. 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道
更多阅读
  1. 上一篇:Steam API Key 与 RCON 密码安全:游戏服最常泄露的两把钥匙
  2. 下一篇:top 命令高级用法:不止看内存占用,这么读才专业
发表评论 2