321 lines
7.8 KiB
Markdown
321 lines
7.8 KiB
Markdown
# 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. 克隆项目
|
||
|
||
```bash
|
||
git clone <repository-url> ./Docker_DayzServer
|
||
cd Docker_DayzServer
|
||
```
|
||
|
||
### 2. 设置环境变量
|
||
|
||
创建 `.env` 文件并配置您的Steam账户信息:
|
||
|
||
```bash
|
||
# 创建环境变量文件
|
||
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. 运行安装脚本
|
||
|
||
```bash
|
||
# 给安装脚本执行权限
|
||
chmod +x install.sh
|
||
|
||
# 运行安装脚本(需要root权限)
|
||
sudo ./install.sh
|
||
```
|
||
|
||
安装脚本将自动:
|
||
- 检测您的操作系统
|
||
- 安装Docker和Docker Compose
|
||
- 构建Docker镜像
|
||
- 启动DayZ服务器
|
||
|
||
### 4. 手动部署(可选)
|
||
|
||
如果您想手动部署,可以按以下步骤操作:
|
||
|
||
```bash
|
||
# 构建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/ # 地图文件
|
||
```
|
||
|
||
## 🎮 使用说明
|
||
|
||
### 启动服务器
|
||
|
||
```bash
|
||
# 启动所有服务
|
||
docker-compose up -d
|
||
|
||
# 查看运行状态
|
||
docker-compose ps
|
||
|
||
# 查看日志
|
||
docker-compose logs -f steamcmd
|
||
```
|
||
|
||
### 停止服务器
|
||
|
||
```bash
|
||
# 停止所有服务
|
||
docker-compose down
|
||
|
||
# 停止并删除数据卷(谨慎使用)
|
||
docker-compose down -v
|
||
```
|
||
|
||
### 重启服务器
|
||
|
||
```bash
|
||
# 重启服务
|
||
docker-compose restart steamcmd
|
||
```
|
||
|
||
### 更新服务器
|
||
|
||
```bash
|
||
# 重新构建镜像并启动
|
||
docker-compose build --no-cache
|
||
docker-compose up -d
|
||
```
|
||
|
||
## 🔧 Mod管理
|
||
|
||
### 自动Mod管理
|
||
|
||
项目现在支持自动Mod管理功能:
|
||
|
||
1. **配置Mod ID**: 在环境变量中设置 `MOD_IDS`,例如:
|
||
```bash
|
||
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
|
||
```
|
||
|
||
## 📊 监控和日志
|
||
|
||
### 查看实时日志
|
||
|
||
```bash
|
||
# 查看容器日志
|
||
docker-compose logs -f steamcmd
|
||
|
||
# 查看特定时间段的日志
|
||
docker-compose logs --since="2024-01-01T00:00:00" steamcmd
|
||
```
|
||
|
||
### 服务器状态检查
|
||
|
||
```bash
|
||
# 检查容器状态
|
||
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加载信息
|
||
|
||
### 调试命令
|
||
|
||
```bash
|
||
# 进入容器进行调试
|
||
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并提供详细的错误信息
|
||
|
||
---
|
||
|
||
**祝您游戏愉快!** 🎮 |