首次提交
This commit is contained in:
41
DockerFile/Dockerfile
Normal file
41
DockerFile/Dockerfile
Normal file
@@ -0,0 +1,41 @@
|
||||
# 使用Ubuntu 22.04作为基础镜像
|
||||
FROM ubuntu:22.04
|
||||
|
||||
ENV STEAMCMD_DIR=/opt/steamcmd
|
||||
ENV STEAMCMD_URL=https://steamcdn-a.akamaihd.net/client/installer/steamcmd_linux.tar.gz
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt-get update && apt-get install -y \
|
||||
wget \
|
||||
ca-certificates \
|
||||
lib32gcc-s1 \
|
||||
lib32stdc++6 \
|
||||
libc6-i386 \
|
||||
libcurl4 \
|
||||
libncurses5 \
|
||||
libsdl2-2.0-0 \
|
||||
libtinfo5 \
|
||||
libvorbisfile3 \
|
||||
lib32z1 \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
RUN mkdir -p ${STEAMCMD_DIR}
|
||||
|
||||
COPY install_dayz.sh /opt/install_dayz.sh
|
||||
COPY start.sh /opt/start.sh
|
||||
RUN chmod +x /opt/install_dayz.sh /opt/start.sh
|
||||
|
||||
RUN useradd -m -d /home/steam steam
|
||||
|
||||
RUN mkdir -p /opt/games
|
||||
|
||||
RUN chown -R steam:steam ${STEAMCMD_DIR} && \
|
||||
chown -R steam:steam /home/steam && \
|
||||
chown steam:steam /opt/install_dayz.sh && \
|
||||
chown steam:steam /opt/start.sh && \
|
||||
chown -R steam:steam /opt/games
|
||||
|
||||
WORKDIR ${STEAMCMD_DIR}
|
||||
|
||||
CMD ["/opt/start.sh"]
|
||||
37
DockerFile/install_dayz.sh
Normal file
37
DockerFile/install_dayz.sh
Normal file
@@ -0,0 +1,37 @@
|
||||
#!/bin/bash
|
||||
|
||||
# DayZ服务器安装脚本
|
||||
# 使用环境变量中的Steam用户名和密码
|
||||
|
||||
# 检查环境变量
|
||||
if [ -z "$STEAM_USERNAME" ] || [ -z "$STEAM_PASSWORD" ]; then
|
||||
echo "错误: 请设置 STEAM_USERNAME 和 STEAM_PASSWORD 环境变量"
|
||||
echo "在本目录下执行 vi .env 设置环境变量"
|
||||
echo "示例:"
|
||||
echo "export STEAM_USERNAME=your_username"
|
||||
echo "export STEAM_PASSWORD=your_password"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 切换到SteamCMD目录
|
||||
cd /opt/steamcmd
|
||||
|
||||
# 运行SteamCMD安装DayZ服务器
|
||||
echo "开始安装DayZ服务器..."
|
||||
./steamcmd.sh +login $STEAM_USERNAME $STEAM_PASSWORD +app_update 223350 validate +quit
|
||||
|
||||
# 检查安装结果
|
||||
if [ $? -eq 0 ]; then
|
||||
echo "DayZ服务器安装完成!"
|
||||
else
|
||||
echo "安装失败,请检查用户名和密码是否正确"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 初始化BERcon配置
|
||||
password=$(tr -dc 'A-Za-z0-9!@%^_=+?' < /dev/urandom | head -c 12)
|
||||
cat > /root/Steam/steamapps/common/DayZServer/battleye/beserver_x64.cfg << EOF
|
||||
RConPort 2314
|
||||
RConPassword $password
|
||||
RestrictRCon 0
|
||||
EOF
|
||||
132
DockerFile/start.sh
Normal file
132
DockerFile/start.sh
Normal file
@@ -0,0 +1,132 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -e # 遇到错误时退出
|
||||
|
||||
echo "=========================================="
|
||||
echo "SteamCMD容器启动中..."
|
||||
echo "时间: $(date)"
|
||||
echo "=========================================="
|
||||
|
||||
copy_files() {
|
||||
local mod_path=$1
|
||||
local parent_path=$2
|
||||
local lower_addons_path="${mod_path}/addons"
|
||||
local upper_addons_path="${mod_path}/Addons"
|
||||
local lower_keys_path="${mod_path}/keys"
|
||||
local upper_keys_path="${mod_path}/Keys"
|
||||
|
||||
# 处理addons目录
|
||||
if [ -d "$lower_addons_path" ]; then
|
||||
find "$lower_addons_path" -type f -name '*.bisign' -exec cp -dpf {} "$parent_path/addons/" \;
|
||||
elif [ -d "$upper_addons_path" ]; then
|
||||
find "$upper_addons_path" -type f -name '*.bisign' -exec cp -dpf {} "$parent_path/addons/" \;
|
||||
fi
|
||||
|
||||
# 处理keys目录
|
||||
if [ -d "$lower_keys_path" ]; then
|
||||
find "$lower_keys_path" -type f -name '*.bikey' -exec cp -dpf {} "$parent_path/keys/" \;
|
||||
elif [ -d "$upper_keys_path" ]; then
|
||||
find "$upper_keys_path" -type f -name '*.bikey' -exec cp -dpf {} "$parent_path/keys/" \;
|
||||
fi
|
||||
}
|
||||
|
||||
start_dayzserver() {
|
||||
cd /root/Steam/steamapps/common/DayZServer
|
||||
|
||||
# 初始化mod变量
|
||||
client_mods=""
|
||||
server_mods=""
|
||||
|
||||
while IFS= read -r -d $'\0' folder; do
|
||||
echo "处理客户端mod: $folder"
|
||||
copy_files "$folder" "."
|
||||
if [ -n "$client_mods" ]; then
|
||||
client_mods="${client_mods};"
|
||||
fi
|
||||
client_mods="${client_mods}${folder}"
|
||||
done < <(find "./client_mod" -type d -name '@*' -print0)
|
||||
|
||||
while IFS= read -r -d $'\0' folder; do
|
||||
echo "处理服务端mod: $folder"
|
||||
copy_files "$folder" "."
|
||||
if [ -n "$server_mods" ]; then
|
||||
server_mods="${server_mods};"
|
||||
fi
|
||||
server_mods="${server_mods}${folder}"
|
||||
done < <(find "./server_mod" -type d -name '@*' -print0)
|
||||
|
||||
# 崩溃检测和自动重启循环
|
||||
while true; do
|
||||
echo "=========================================="
|
||||
echo "启动DayZServer..."
|
||||
echo "时间: $(date)"
|
||||
echo "端口: ${DAYZ_SERVER_PORT}"
|
||||
echo "CPU核心数: ${DAYZ_CPU_COUNT}"
|
||||
echo "客户端mod: ${client_mods}"
|
||||
echo "服务端mod: ${server_mods}"
|
||||
echo "=========================================="
|
||||
|
||||
echo "执行命令: ./DayZServer -port=${DAYZ_SERVER_PORT} -cpuCount=${DAYZ_CPU_COUNT} -config=serverDZ.cfg -profiles=profiles -mission=./mpmissions/${DAYZ_MISSIONS} -mod=${client_mods} -servermod=${server_mods}"
|
||||
|
||||
# 启动DayZServer并捕获退出状态
|
||||
./DayZServer -port=${DAYZ_SERVER_PORT} -cpuCount=${DAYZ_CPU_COUNT} \
|
||||
"-config=serverDZ.cfg" "-profiles=profiles" \
|
||||
"-mission=./mpmissions/${DAYZ_MISSIONS}" \
|
||||
"-mod=${client_mods}" "-servermod=${server_mods}" &
|
||||
|
||||
# 保存进程ID
|
||||
DAYZ_PID=$!
|
||||
echo "DayZServer进程ID: $DAYZ_PID"
|
||||
|
||||
# 等待进程结束
|
||||
wait $DAYZ_PID
|
||||
EXIT_CODE=$?
|
||||
|
||||
echo "=========================================="
|
||||
echo "DayZServer已退出"
|
||||
echo "退出代码: $EXIT_CODE"
|
||||
echo "时间: $(date)"
|
||||
echo "=========================================="
|
||||
|
||||
# 检查是否正常退出(退出代码0通常表示正常退出)
|
||||
if [ $EXIT_CODE -eq 0 ]; then
|
||||
echo "DayZServer正常退出,将在5秒后重启..."
|
||||
sleep 5
|
||||
echo "重新启动DayZServer..."
|
||||
else
|
||||
echo "DayZServer异常退出,将在5秒后重启..."
|
||||
sleep 5
|
||||
echo "重新启动DayZServer..."
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
|
||||
# 检查并安装SteamCMD
|
||||
if [ ! -f "/opt/steamcmd/steamcmd.sh" ]; then
|
||||
echo "SteamCMD未安装,开始下载和安装..."
|
||||
echo "下载SteamCMD..."
|
||||
wget -O /opt/steamcmd/steamcmd_linux.tar.gz ${STEAMCMD_URL}
|
||||
echo "解压SteamCMD..."
|
||||
tar xvzf /opt/steamcmd/steamcmd_linux.tar.gz -C /opt/steamcmd
|
||||
echo "清理临时文件..."
|
||||
rm /opt/steamcmd/steamcmd_linux.tar.gz
|
||||
echo "设置执行权限..."
|
||||
chmod +x /opt/steamcmd/steamcmd.sh
|
||||
echo "SteamCMD安装完成!"
|
||||
else
|
||||
echo "SteamCMD已存在,跳过安装"
|
||||
fi
|
||||
|
||||
if [ ! -f "/root/Steam/steamapps/common/DayZServer/DayZServer" ]; then
|
||||
echo "DayZServer未安装,开始安装..."
|
||||
bash /opt/install_dayz.sh
|
||||
else
|
||||
echo "DayZServer已安装,检查更新"
|
||||
# 切换到SteamCMD目录
|
||||
cd /opt/steamcmd
|
||||
./steamcmd.sh +login $STEAM_USERNAME $STEAM_PASSWORD +app_update 223350 validate +quit
|
||||
echo "启动DayZServer..."
|
||||
cd /root/Steam/steamapps/common/DayZServer
|
||||
start_dayzserver
|
||||
fi
|
||||
Reference in New Issue
Block a user