提交 f1ebc0e0 authored 作者: Andy's avatar Andy

12

上级 91cd0d5a
#!/bin/bash
install_dir="/home/bdgame"
if [ ! -d "$install_dir" ]; then
mkdir -p "$install_dir"
fi
cd $install_dir
# 输出函数
echo_content() {
ECHO_TYPE="echo -e"
case $1 in
"red")
${ECHO_TYPE} "\033[31m$2\033[0m"
;;
"green")
${ECHO_TYPE} "\033[32m$2\033[0m"
;;
"yellow")
${ECHO_TYPE} "\033[33m$2\033[0m"
;;
"blue")
${ECHO_TYPE} "\033[34m$2\033[0m"
;;
"purple")
${ECHO_TYPE} "\033[35m$2\033[0m"
;;
"skyBlue")
${ECHO_TYPE} "\033[36m$2\033[0m"
;;
"white")
${ECHO_TYPE} "\033[37m$2\033[0m"
;;
esac
}
# ======= 工具检查 =======
# jq
# curl
# docker
# make
# unzip
# nodejs
# npm
# pm2
check_install_dependencies() {
for cmd in jq curl docker make unzip nodejs npm pm2; do
if ! command -v "$cmd" &>/dev/null; then
echo "❌ 缺少依赖:$cmd"
echo "请先安装:sudo apt install $cmd -y"
sudo apt install $cmd -y
# exit 1
fi
done
}
check_install_NodeJs() {
echo_content "green" "🔍 正在检测 Node.js 是否已安装..."
if command -v node >/dev/null 2>&1; then
echo "✅ Node.js 已安装,版本:$(node -v)"
else
echo "❌ 未检测到 Node.js,正在安装 Node.js 20.x..."
# 更新系统包索引
sudo apt update
# 下载并执行 NodeSource 安装脚本
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
# 安装 Node.js
sudo apt install -y nodejs
# 检查安装是否成功
if command -v node >/dev/null 2>&1; then
echo "✅ Node.js 安装成功,版本:$(node -v)"
else
echo "❌ Node.js 安装失败,请检查网络或手动安装。"
exit 1
fi
fi
# 检测 npm 是否安装
if command -v npm >/dev/null 2>&1; then
echo "✅ npm 已安装,版本:$(npm -v)"
else
echo "❌ npm 未安装,尝试重新安装 Node.js 可能修复此问题。"
fi
}
check_install_PM2() {
echo_content "green" "🔍 检测 Node.js & PM2 是否已安装..."
echo_content "blue" " 🔍 检测 Node.js 是否已安装..."
if command -v node >/dev/null 2>&1; then
echo "✅ Node.js 已安装,版本:$(node -v)"
else
echo "❌ Node.js 未安装,正在安装 Node.js 20.x..."
sudo apt update
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
if command -v node >/dev/null 2>&1; then
echo "✅ Node.js 安装成功,版本:$(node -v)"
else
echo "❌ Node.js 安装失败,请检查网络。"
exit 1
fi
fi
echo_content "blue" " 🔍 检测 npm 是否已安装..."
if command -v npm >/dev/null 2>&1; then
echo "✅ npm 已安装,版本:$(npm -v)"
else
echo "❌ npm 未安装,尝试重新安装 Node.js 或手动安装 npm。"
exit 1
fi
echo_content "blue" " 🔍 检测 PM2 是否已安装..."
if command -v pm2 >/dev/null 2>&1; then
echo "✅ PM2 已安装,版本:$(pm2 -v)"
else
echo "❌ PM2 未安装,正在全局安装 PM2..."
sudo npm install -g pm2
if command -v pm2 >/dev/null 2>&1; then
echo "✅ PM2 安装成功,版本:$(pm2 -v)"
else
echo "❌ PM2 安装失败,请检查 npm 环境。"
exit 1
fi
fi
echo "🎉 Node.js & PM2 环境准备完成!"
}
# ========== 克隆函数 ==========
clone_branch() {
local tmp_repo_url="$1"
local tmp_branch="$2"
local tmp_target_dir="$3"
local tmp_max_retry="${4:-3}"
echo "⬇️ 克隆分支:$tmp_branch$tmp_target_dir"
tmp_retry=0
echo "git clone --branch "$tmp_branch" --depth=1 "$tmp_repo_url" "$tmp_target_dir""
until git clone --branch "$tmp_branch" --depth=1 "$tmp_repo_url" "$tmp_target_dir"; do
tmp_retry=$((tmp_retry + 1))
if [ "$tmp_retry" -ge "$tmp_max_retry" ]; then
echo_content "red" "❌ 克隆分支 $tmp_branch 失败,多次重试无效。"
return 1
fi
echo "重试克隆 ($tmp_retry/$tmp_max_retry)..."
sleep 2
done
echo_content "green" "✅ 分支 $tmp_branch 克隆完成。"
}
# ========== 更新函数 ==========
update_branch() {
local tmp_repo_url="$1"
local tmp_branch="$2"
local tmp_target_dir="$3"
if [ ! -d "$tmp_target_dir/.git" ]; then
echo_content "red" "⚠️ 目录 $tmp_target_dir 不是 Git 仓库,无法更新。"
return 1
fi
echo "🔄 更新分支:$tmp_branch$tmp_target_dir"
cd "$tmp_target_dir" || return 1
# 允许被删除的远程分支同步
git fetch origin "$tmp_branch" --depth=1
git checkout "$tmp_branch" || git checkout -b "$tmp_branch" origin/"$tmp_branch"
git pull origin "$tmp_branch"
cd - >/dev/null
echo_content "green" "✅ 分支 $tmp_branch 更新完成。"
}
Git_Token=QFF_7BNyjHsq_Zvfsfut # 私有仓库需要填 Token,公有仓库留空即可
# ========== 主函数:管理全部分支 ==========
fetch_git_svr() {
echo_content "green" "📦 获取服务器端分支(支持 Token + git pull)..."
# --- 配置区 ---
Git_User="LaunchDeploy" # GitHub 用户名或组织名
Git_Repo_Name="wk_gameplat_svr"
BASE_DIR="./svr"
GitHub_Repo_Branchs=(
"1031_Game_JinSha"
)
# Token HTTPS 地址
Repo_Url="https://${Git_Token}@git.wkwork.xyz/${Git_User}/${Git_Repo_Name}.git"
mkdir -p "$BASE_DIR"
for Branch in "${GitHub_Repo_Branchs[@]}"; do
tmp_target_dir="$BASE_DIR/$Branch"
echo_content "skyBlue" "🌀 分支:$Branch"
if [ -d "$tmp_target_dir/.git" ]; then
update_branch "$Repo_Url" "$Branch" "$tmp_target_dir"
else
clone_branch "$Repo_Url" "$Branch" "$tmp_target_dir"
fi
done
echo_content "green" "🎉 所有 Svr 分支同步完成!"
}
fetch_git_web() {
echo_content "green" "📦 获取服务器端分支(支持 Token + git pull)..."
# --- 配置区 ---
Git_User="LaunchDeploy" # GitHub 用户名或组织名
Git_Repo_Name="wk_gameplat_web"
BASE_DIR="./web"
GitHub_Repo_Branchs=(
"1031_Game_JinSha"
)
# Token HTTPS 地址
Repo_Url="https://${Git_Token}@git.wkwork.xyz/${Git_User}/${Git_Repo_Name}.git"
mkdir -p "$BASE_DIR"
for Branch in "${GitHub_Repo_Branchs[@]}"; do
tmp_target_dir="$BASE_DIR/$Branch"
echo_content "skyBlue" "🌀 分支:$Branch"
if [ -d "$tmp_target_dir/.git" ]; then
update_branch "$Repo_Url" "$Branch" "$tmp_target_dir"
else
clone_branch "$Repo_Url" "$Branch" "$tmp_target_dir"
fi
done
echo_content "green" "🎉 所有 Svr 分支同步完成!"
}
run_docker() {
cd ./svr/docker-base || exit
make addnet
make up
chmod 777 ../tmp/base/etcd/data
chmod 777 ../tmp/base/zookeeper/data
make up
cd ../..
cd ./svr/docker-game || exit
make up
cd ../..
cd ./svr/docker-proxy || exit
make up
cd ../..
}
run_service() {
cd ./svr/bdgame || exit
make export_env
make start
cd ../..
}
# main
main() {
#!/bin/bash
pause() {
read -rp "按回车键继续..."
}
while true; do
clear
echo_content "skyBlue" "============================"
echo_content "skyBlue" " 主菜单 "
echo_content "skyBlue" "============================"
echo_content "skyBlue" "3) 获取 Svr"
echo_content "skyBlue" "4) 获取 Web"
echo_content "skyBlue" "5) 运行 Docker"
echo_content "skyBlue" "6) 运行 Game 服务"
echo_content "skyBlue" "0) 退出"
echo_content "skyBlue" "============================"
read -rp "请输入选项 [0-6]: " choice
case $choice in
3)
fetch_git_svr
pause
;;
4)
fetch_git_web
pause
;;
5)
run_docker
pause
;;
6)
run_service
pause
;;
0)
echo "👋 退出程序."
exit 0
;;
*)
echo "⚠️ 无效选项,请重新输入!"
sleep 1
;;
esac
done
}
# ======= 安装默认工具 =======
# check_install_dependencies
# ======= 启动程序 =======
main
......@@ -148,6 +148,7 @@ clone_branch() {
echo "⬇️ 克隆分支:$tmp_branch$tmp_target_dir"
tmp_retry=0
echo "git clone --branch "$tmp_branch" --depth=1 "$tmp_repo_url" "$tmp_target_dir""
until git clone --branch "$tmp_branch" --depth=1 "$tmp_repo_url" "$tmp_target_dir"; do
tmp_retry=$((tmp_retry + 1))
if [ "$tmp_retry" -ge "$tmp_max_retry" ]; then
......@@ -333,7 +334,7 @@ main() {
}
# ======= 安装默认工具 =======
check_install_dependencies
# check_install_dependencies
# ======= 启动程序 =======
main
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论