在linux系统中使用docker来构建一个dayzserver容器

Dcr 34c2e6dd05 新增自动Mod管理功能,支持通过环境变量配置Mod ID,自动下载和更新Mod,并优化软链接创建逻辑。 1 月之前
DockerFile 34c2e6dd05 新增自动Mod管理功能,支持通过环境变量配置Mod ID,自动下载和更新Mod,并优化软链接创建逻辑。 1 月之前
.dockerignore 9f993b7793 首次提交 1 月之前
.env 1dd3ec77b7 变更默认安装mod 1 月之前
README.md 34c2e6dd05 新增自动Mod管理功能,支持通过环境变量配置Mod ID,自动下载和更新Mod,并优化软链接创建逻辑。 1 月之前
docker-compose.yml a5fea9ccae update: 添加自动更新mod脚本 1 月之前
install.sh 1876944786 添加国内docker源 1 月之前

README.md

DayZ服务器 Docker 部署项目

这是一个用于快速部署DayZ服务器的Docker化解决方案。通过Docker容器化技术,您可以轻松地在任何支持Docker的系统上运行DayZ服务器,无需复杂的本地环境配置。

🎯 项目特性

  • 一键部署: 使用Docker Compose实现一键部署DayZ服务器
  • 自动安装: 自动下载并安装SteamCMD和DayZ服务器
  • Mod支持: 支持客户端和服务端Mod的自动加载
  • 崩溃恢复: 内置崩溃检测和自动重启机制
  • 跨平台: 支持Linux、Windows、macOS等操作系统
  • 环境隔离: 使用Docker容器确保环境隔离和一致性
  • 配置灵活: 支持通过环境变量自定义服务器配置

📋 系统要求

  • Docker 20.10+
  • Docker Compose 2.0+
  • 至少4GB可用内存
  • 至少10GB可用磁盘空间
  • 稳定的网络连接(用于下载SteamCMD和DayZ服务器)

🚀 快速开始

1. 克隆项目

git clone <repository-url> ./Docker_DayzServer
cd Docker_DayzServer

2. 设置环境变量

创建 .env 文件并配置您的Steam账户信息:

# 创建环境变量文件
cat > .env << EOF
STEAM_USERNAME=your_steam_username
STEAM_PASSWORD=your_steam_password
DAYZ_MISSIONS=dayzOffline.chernarusplus
DAYZ_SERVER_PORT=2302
DAYZ_CPU_COUNT=4
EOF

重要: 请确保使用有效的Steam账户,该账户 不需要 拥有DayZ游戏。

3. 运行安装脚本

# 给安装脚本执行权限
chmod +x install.sh

# 运行安装脚本(需要root权限)
sudo ./install.sh

安装脚本将自动:

  • 检测您的操作系统
  • 安装Docker和Docker Compose
  • 构建Docker镜像
  • 启动DayZ服务器

4. 手动部署(可选)

如果您想手动部署,可以按以下步骤操作:

# 构建Docker镜像, 如果仓库有更新, 都需要重新 build 一次, 更新不需要 --no-cache
docker-compose build --no-cache

# 运行steamcmd容器进行初始安装
docker-compose run --rm steamcmd

# 启动所有服务
docker-compose up -d

⚙️ 配置说明

环境变量

变量名 默认值 说明
STEAM_USERNAME - Steam用户名(必需)
STEAM_PASSWORD - Steam密码(必需)
DAYZ_MISSIONS dayzOffline.chernarusplus 服务器地图
DAYZ_SERVER_PORT 2302 服务器端口
DAYZ_CPU_COUNT 4 使用的CPU核心数
MOD_IDS - Mod ID列表,用逗号分隔
ENABLE_AUTO_UPDATE true 是否启用自动更新
UPDATE_INTERVAL 15 自动更新间隔(分钟)

端口映射

容器端口 主机端口 说明
2302/udp 2302/udp DayZ游戏端口
2305/udp 2305/udp DayZ查询端口
2314/udp 2314/udp BattlEye RCon端口

目录结构

Docker_DayzServer/
├── docker-compose.yml          # Docker Compose配置文件
├── DockerFile/                 # Docker构建文件
│   ├── Dockerfile             # Docker镜像定义
│   ├── install_dayz.sh        # DayZ安装脚本
│   └── start.sh               # 启动脚本
├── install.sh                  # 一键安装脚本
└── dayz/                      # 数据目录(自动创建)
    ├── .steamcmd/             # SteamCMD数据
    ├── .dayz_server/          # DayZ服务器文件
    ├── client_mod/            # 客户端Mod
    ├── server_mod/            # 服务端Mod
    ├── battleye/              # BattlEye配置
    ├── profiles/              # 服务器配置文件
    └── mpmissions/            # 地图文件

🎮 使用说明

启动服务器

# 启动所有服务
docker-compose up -d

# 查看运行状态
docker-compose ps

# 查看日志
docker-compose logs -f steamcmd

停止服务器

# 停止所有服务
docker-compose down

# 停止并删除数据卷(谨慎使用)
docker-compose down -v

重启服务器

# 重启服务
docker-compose restart steamcmd

更新服务器

# 重新构建镜像并启动
docker-compose build --no-cache
docker-compose up -d

🔧 Mod管理

自动Mod管理

项目现在支持自动Mod管理功能:

  1. 配置Mod ID: 在环境变量中设置 MOD_IDS,例如:

    MOD_IDS=123456789,987654321,456789123
    
  2. 自动更新: 系统会自动下载和更新指定的Mod

  3. 自动软链接: 系统会根据Mod ID自动创建软链接到 client_mod 目录

  4. 智能命名: 优先使用Mod的 meta.cpp 中的名称,如果没有则使用Mod ID

手动Mod管理

如果您想手动管理Mod:

  1. 将Mod文件放入 dayz/client_mod/ 目录
  2. Mod文件夹应以 @ 开头
  3. 重启服务器以加载新Mod

更新Mod

自动更新

  • 启用自动更新: 设置 ENABLE_AUTO_UPDATE=true(默认启用)
  • 更新间隔: 通过 UPDATE_INTERVAL 设置(默认15分钟)
  • 查看更新日志: docker-compose exec steamcmd cat /var/log/updatemod.log

手动更新

  1. 需要先停止容器运行 docker compose down
  2. 然后运行更新命令 docker compose run --rm steamcmd updatemod
  3. 更新完毕后启动docker容器即可

Mod配置示例

dayz/
├── client_mod/
│   ├── @CF                    # 自动创建的软链接
│   ├── @DayZExpansion         # 自动创建的软链接
│   └── @CustomMod            # 手动添加的Mod
└── server_mod/
    └── @DayZExpansionServer  # 服务端Mod

📊 监控和日志

查看实时日志

# 查看容器日志
docker-compose logs -f steamcmd

# 查看特定时间段的日志
docker-compose logs --since="2024-01-01T00:00:00" steamcmd

服务器状态检查

# 检查容器状态
docker-compose ps

# 检查资源使用情况
docker stats steamcmd

🔒 安全配置

BattlEye配置

BattlEye配置文件位于 dayz/battleye/beserver_x64.cfg,包含:

  • RCon端口:2314
  • 自动生成的RCon密码
  • 远程管理设置

防火墙配置

确保以下端口在防火墙中开放:

  • UDP 2302 (游戏端口)
  • UDP 2305 (查询端口)
  • UDP 2314 (RCon端口)

🛠️ 故障排除

常见问题

  1. Steam登录失败

    • 检查Steam用户名和密码是否正确
    • 检查网络连接
  2. 服务器无法启动

    • 检查端口是否被占用
    • 查看容器日志:docker-compose logs steamcmd
    • 确保有足够的磁盘空间
  3. Mod加载失败

    • 检查Mod文件夹名称是否正确(以@开头)
    • 确保Mod文件完整
    • 查看启动日志中的Mod加载信息

调试命令

# 进入容器进行调试
docker-compose exec steamcmd bash

# 查看容器资源使用情况
docker stats steamcmd

# 检查网络连接
docker-compose exec steamcmd netstat -tulpn

📝 更新日志

v1.1.0

  • 新增自动Mod管理功能
  • 支持通过MOD_IDS环境变量配置Mod
  • 自动下载和更新Mod
  • 智能软链接创建(优先使用meta.cpp中的名称)
  • 新增自动更新功能(cron定时任务)
  • 优化Mod加载逻辑

v1.0.0

  • 初始版本发布
  • 支持基本的DayZ服务器部署
  • 集成SteamCMD自动安装
  • 支持Mod加载
  • 内置崩溃恢复机制

🤝 贡献

欢迎提交Issue和Pull Request来改进这个项目!

📄 许可证

本项目采用MIT许可证。详见LICENSE文件。

⚠️ 免责声明

  • 本项目仅供学习和研究使用
  • 请确保遵守DayZ和Steam的服务条款
  • 使用本项目的风险由用户自行承担
  • 建议在测试环境中先进行验证

📞 支持

如果您在使用过程中遇到问题,请:

  1. 查看本文档的故障排除部分
  2. 检查项目的Issue页面
  3. 提交新的Issue并提供详细的错误信息

祝您游戏愉快! 🎮