提交 6498ab57 authored 作者: Andy's avatar Andy

12

上级 15d6cfec
#!/bin/bash
install_dir="/home/bdlive"
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
}
# 函数:检查并安装 Git
check_install_git() {
echo_content "green" "🔍 检测 Git 是否已安装..."
if command -v git >/dev/null 2>&1; then
echo "✅ Git 已安装,版本:$(git --version)"
else
echo "❌ Git 未安装,正在安装 Git..."
sudo apt update
sudo apt install -y git
if command -v git >/dev/null 2>&1; then
echo "✅ Git 安装成功,版本:$(git --version)"
else
echo "❌ Git 安装失败,请检查网络或手动安装。"
exit 1
fi
fi
echo "🎉 Git 检测与安装完成!"
}
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 环境准备完成!"
}
check_install_unzip() {
if ! command -v unzip &>/dev/null; then
if command -v apt &>/dev/null; then
sudo apt update
sudo apt install -y unzip
elif command -v yum &>/dev/null; then
sudo yum install -y unzip
fi
fi
}
# 函数:检查并安装 Docker
check_install_docker() {
echo_content "green" "检查并安装 Docker..."
if ! [[ $(docker -v 2>/dev/null) ]]; then
sh <(curl -sL https://get.docker.com)
fi
if ! [[ $(docker -v 2>/dev/null) ]]; then
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
fi
if ! [[ $(docker -v 2>/dev/null) ]]; then
curl -sSL https://get.daocloud.io/docker | sh
fi
#!/bin/bash
if ! command -v docker-compose &>/dev/null; then
# 下载 docker-compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 设置执行权限
sudo chmod +x /usr/local/bin/docker-compose
# 检查是否安装成功
if ! command -v docker-compose &>/dev/null; then
echo "docker-compose 安装失败。"
exit 1
fi
fi
}
# 更新分支函数
update_branch() {
local repo_url=$1
local branch=$2
local target_dir=$3
echo "Updating branch '$branch' in '$target_dir'..."
cd "$target_dir" || return 1
git checkout "$branch" >/dev/null 2>&1
git fetch origin "$branch"
local_commit=$(git rev-parse "$branch")
remote_commit=$(git rev-parse "origin/$branch")
if [ "$local_commit" = "$remote_commit" ]; then
echo "✅ Branch '$branch' is up-to-date."
else
echo "⬇️ Branch '$branch' has updates. Pulling changes..."
RETRY=0
until git pull origin "$branch"; do
RETRY=$((RETRY + 1))
if [ "$RETRY" -ge "$MAX_RETRY" ]; then
echo "❌ Failed to update '$branch' after $MAX_RETRY attempts."
break
fi
echo "Retrying pull for '$branch' ($RETRY/$MAX_RETRY)..."
sleep 2
done
fi
cd - >/dev/null
}
# 克隆分支函数
clone_branch() {
local repo_url=$1
local branch=$2
local target_dir=$3
echo "Cloning branch '$branch' into '$target_dir'..."
RETRY=0
until git clone --branch "$branch" --single-branch "$repo_url" "$target_dir"; do
RETRY=$((RETRY + 1))
if [ "$RETRY" -ge "$MAX_RETRY" ]; then
echo "❌ Failed to clone '$branch' after $MAX_RETRY attempts."
break
fi
echo "Retrying clone for '$branch' ($RETRY/$MAX_RETRY)..."
sleep 2
done
}
fetch_git_svr() {
REPO_URL="git@git.wkwork.xyz:LaunchDemo/0000_BD_Demo_Live_Svr.git"
BASE_DIR="./svr"
MAX_RETRY=3 # 最大重试次数
BRANCHES=(
"docker-base"
"docker-game"
"docker-proxy"
"bdlive"
)
# 主循环
for BRANCH in "${BRANCHES[@]}"; do
TARGET_DIR="$BASE_DIR/$BRANCH"
if [ -d "$TARGET_DIR/.git" ]; then
update_branch "$REPO_URL" "$BRANCH" "$TARGET_DIR"
else
clone_branch "$REPO_URL" "$BRANCH" "$TARGET_DIR"
fi
done
}
fetch_git_web() {
REPO_URL="git@git.wkwork.xyz:LaunchDemo/0000_BD_Demo_Live_Web.git"
BASE_DIR="./web"
MAX_RETRY=3 # 最大重试次数
BRANCHES=(
"agent-admin"
"bank-client"
"bank-server"
"baow"
"down"
"main-admin"
"mobile"
"onlygame"
"packet1"
"video"
"webgame"
)
# 主循环
for BRANCH in "${BRANCHES[@]}"; do
TARGET_DIR="$BASE_DIR/$BRANCH"
if [ -d "$TARGET_DIR/.git" ]; then
update_branch "$REPO_URL" "$BRANCH" "$TARGET_DIR"
else
clone_branch "$REPO_URL" "$BRANCH" "$TARGET_DIR"
fi
done
}
check_git_account() {
# 1. 检查 id_rsa 文件是否存在
if [ ! -f /root/.ssh/id_rsa ]; then
mkdir -p /root/.ssh
chmod 700 /root/.ssh
cat >/root/.ssh/id_rsa <<'EOF'
-----BEGIN OPENSSH PRIVATE KEY-----
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
-----END OPENSSH PRIVATE KEY-----
EOF
chmod 600 /root/.ssh/id_rsa
echo "✅ id_rsa 写入成功"
else
echo "⚠️ /root/.ssh/id_rsa 已存在,未做修改"
fi
# 2. 检测 SSH 连接是否成功
# echo "🧪 正在测试 SSH 连接..."
# ssh -o StrictHostKeyChecking=no -T git@git.wkwork.xyz 2>&1 | grep "successfully authenticated" >/dev/null
# if [ $? -eq 0 ]; then
# echo "✅ SSH 连接成功 (已通过身份验证)"
# return 0
# else
# echo "❌ SSH 连接失败 (请检查私钥与服务器)"
# return 1
# fi
echo "🧪 测试 SSH 连接..."
RESULT=$(ssh -o StrictHostKeyChecking=no git@git.wkwork.xyz 2>&1)
echo "$RESULT"
if echo "$RESULT" | grep -q "Welcome to GitLab"; then
echo "✅ SSH 连接成功"
return 0
else
echo "❌ SSH 连接失败"
return 1
fi
# # 3. 测试 Git 仓库是否可以访问
# echo "🧪 正在测试 Git 仓库访问..."
# git ls-remote "$REPO_URL" &>/dev/null
# if [ $? -eq 0 ]; then
# echo "✅ Git 仓库连接成功"
# else
# echo "❌ Git 仓库连接失败 (请检查 REPO_URL 与权限)"
# exit 1
# fi
}
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/bdlive || exit
make export_env
make ffmpeg
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" "1) 检查环境"
echo_content "skyBlue" "2) 测试 Git 账户"
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
1)
check_install_git
check_install_NodeJs
check_install_PM2
check_install_unzip
check_install_docker
pause
;;
2)
if check_git_account; then
echo "✅ SSH 连接正常"
else
echo "❌ SSH 连接失败,请检查 SSH Key 或 Git 账户配置"
exit 1
fi
pause
;;
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
}
main
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论