Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
D
demoinstall
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
图表
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
Administrator
demoinstall
Commits
19059fdb
提交
19059fdb
authored
8月 07, 2025
作者:
Andy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
12
上级
f374ce34
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
494 行增加
和
395 行删除
+494
-395
Clear_DS_Store.sh
Clear_DS_Store.sh
+7
-0
demo_game.sh
demo_game.sh
+487
-0
demo_video.sh
demo_video.sh
+0
-395
没有找到文件。
Clear_DS_Store.sh
0 → 100755
浏览文件 @
19059fdb
find
.
-name
.DS_Store
-print0
| xargs
-0
git
rm
-f
--ignore-unmatch
# 如何删除GIT中的.DS_Store
# (https://www.jianshu.com/p/fdaa8be7f6c3)
\ No newline at end of file
demo_game.sh
0 → 100755
浏览文件 @
19059fdb
#!/bin/bash
install_dir
=
"/home/bdvideo"
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
}
"
\0
33[31m
$2
\0
33[0m"
;;
"green"
)
${
ECHO_TYPE
}
"
\0
33[32m
$2
\0
33[0m"
;;
"yellow"
)
${
ECHO_TYPE
}
"
\0
33[33m
$2
\0
33[0m"
;;
"blue"
)
${
ECHO_TYPE
}
"
\0
33[34m
$2
\0
33[0m"
;;
"purple"
)
${
ECHO_TYPE
}
"
\0
33[35m
$2
\0
33[0m"
;;
"skyBlue"
)
${
ECHO_TYPE
}
"
\0
33[36m
$2
\0
33[0m"
;;
"white"
)
${
ECHO_TYPE
}
"
\0
33[37m
$2
\0
33[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_Video_Svr.git"
BASE_DIR
=
"./svr"
MAX_RETRY
=
3
# 最大重试次数
BRANCHES
=(
"docker-base"
"docker-game"
"docker-proxy"
"bdvideo"
)
# 主循环
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_Video_Web.git"
BASE_DIR
=
"./web"
MAX_RETRY
=
3
# 最大重试次数
BRANCHES
=(
"main-admin"
"agent-admin"
"mobile"
"webgame"
"bank-client"
"bank-server"
"down"
)
# 主循环
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-proxy
||
exit
make up
cd
../..
}
run_service
()
{
cd
./svr/bdvideo
||
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) 运行 Video 服务"
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
demo_video.sh
浏览文件 @
19059fdb
...
@@ -2,32 +2,12 @@
...
@@ -2,32 +2,12 @@
install_dir
=
"/home/bdvideo"
install_dir
=
"/home/bdvideo"
# production_run_dir="$install_dir/install_projects"
# production_run_repo="git.wkwork.xyz/root/install_projects.git"
# production_server_config_dir="$install_dir/production-server-config"
# production_server_config_repo="git.wkwork.xyz/tiktok/production-server-config.git"
# production_mysql_dir="$install_dir/production-mysql"
# production_mysql_repo="git.wkwork.xyz/tiktok/production-mysql.git"
# production_install_dir="$production_run_dir/production"
# projects=(
# # 项目名 项目仓库 项目保存目录
# "server git.wkwork.xyz/tiktok/production-server.git $install_dir/production-server"
# "client git.wkwork.xyz/tiktok/production-client.git $install_dir/production-client"
# )
if
[
!
-d
"
$install_dir
"
]
;
then
if
[
!
-d
"
$install_dir
"
]
;
then
mkdir
-p
"
$install_dir
"
mkdir
-p
"
$install_dir
"
fi
fi
cd
$install_dir
cd
$install_dir
# BRANCH_FILE_SUFFIX=".branch"
# CREDENTIALS_FILE="$HOME/.git_credentials"
# 输出函数
# 输出函数
echo_content
()
{
echo_content
()
{
ECHO_TYPE
=
"echo -e"
ECHO_TYPE
=
"echo -e"
...
@@ -204,381 +184,6 @@ check_install_docker() {
...
@@ -204,381 +184,6 @@ check_install_docker() {
}
}
# # 函数:解析项目信息
# get_project_info() {
# local project_info="$1"
# local index="$2"
# IFS=' ' read -r -a project_array <<<"$project_info"
# echo "${project_array[$index]}"
# }
# # 函数:获取所有项目名称
# get_project_names() {
# local names=()
# for project in "${projects[@]}"; do
# names+=("$(get_project_info "$project" 0)")
# done
# echo "${names[@]}"
# }
# set_branches() {
# repo_dir=$1
# repo_name=$2
# cd "$repo_dir" || exit 1
# # 获取当前分支
# current_branch=$(git branch --show-current)
# if [ -z "$current_branch" ]; then
# echo_content "red" "未能获取当前分支,可能项目没有被正确初始化为git仓库。"
# exit 1
# fi
# git fetch
# # 获取所有远程分支
# branches=$(git branch -r | sed 's/origin\///' | grep -v 'HEAD')
# #打印当前分支名称
# branch_count=$(echo "$branches" | wc -l)
# if [ "$branch_count" -gt 1 ]; then
# echo_content "yellow" "$repo_name 项目:分支选择 (如继续使用 '$current_branch' 直接回车):"
# # 显示分支列表
# i=1
# for branch in $branches; do
# echo "$i) $branch"
# i=$((i + 1))
# done
# # 提示用户选择
# read -p "请输入分支对应的数字 (回车保持当前分支: $current_branch): " input
# # 如果用户直接按回车,保持当前分支
# if [ -z "$input" ]; then
# echo_content "yellow" "继续使用当前分支: $current_branch"
# branch="$current_branch"
# else
# # 验证输入是否为有效的数字
# if [[ "$input" =~ ^[0-9]+$ ]] && ((input >= 1 && input <= branch_count)); then
# selected_branch=$(echo "$branches" | sed -n "${input}p" | xargs)
# echo_content "green" "你选择了分支: $selected_branch"
# # 切换到选定分支
# if git show-ref --verify --quiet "refs/heads/$selected_branch"; then
# git checkout "$selected_branch" # 切换到本地分支
# else
# git checkout -b "$selected_branch" "origin/$selected_branch" # 从远程分支创建并切换
# fi
# else
# echo_content "red" "无效的输入,请重新运行脚本。"
# exit 1
# fi
# fi
# fi
# }
# updata_project() {
# repo_dir=$1
# repo_name=$2
# set_branches $repo_dir $repo_name
# cd "$repo_dir" || exit 1
# # 检查工作区是否有未提交的更改
# if [[ -n $(git status --porcelain) ]]; then
# git add .
# git commit -m "Auto-commit: 保存当前变动"
# fi
# CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
# # git pull origin "$CURRENT_BRANCH"
# git pull --rebase -X theirs origin "$CURRENT_BRANCH"
# if [ $? -ne 0 ]; then
# echo_content "red" "更新代码失败,请手动检查冲突。"
# else
# echo_content "green" "代码更新完成。"
# fi
# }
# # 函数:拉取项目代码
# pull_project() {
# repo_url=$1
# repo_dir=$2
# repo_name=$3
# # 检查凭据是否存在
# if [ -f "$CREDENTIALS_FILE" ]; then
# source "$CREDENTIALS_FILE"
# else
# echo "请输入 Git 用户名:"
# read -r -p "用户名: " git_username
# echo "请输入 Git 密码:"
# read -s -p "密码: " git_password
# echo # 换行
# # 询问是否保存凭据
# echo "是否保存凭据到 $CREDENTIALS_FILE 以便下次使用?"
# read -p "请选择(y/n): " save_credentials
# echo # 换行
# if [ "$save_credentials" = "y" ]; then
# echo "git_username=\"$git_username\"" >"$CREDENTIALS_FILE"
# echo "git_password=\"$git_password\"" >>"$CREDENTIALS_FILE"
# chmod 600 "$CREDENTIALS_FILE" # 设置文件权限,仅用户可读写
# fi
# fi
# # 克隆私有仓库
# repo="https://$git_username:$git_password@$repo_url"
# echo_content "green" "克隆仓库 $repo ..."
# git clone $repo "$repo_dir"
# if [ $? -ne 0 ]; then
# rm $CREDENTIALS_FILE
# echo_content "red" "克隆仓库失败,请检查仓库地址和凭据"
# pull_project $repo_url $repo_dir $repo_name
# fi
# set_branches $repo_dir $repo_name
# }
# # 函数:卸载项目
# uninstall_project() {
# if [ -d "$install_dir" ]; then
# echo_content "yellow" "你确定要卸载项目吗?此操作将删除项目目录 '$install_dir' (y/n):"
# read -r confirm_uninstall
# if [ "$confirm_uninstall" = "y" ]; then
# echo_content "green" "正在卸载项目..."
# cd $production_install_dir
# docker-compose down
# docker network rm production_mall_network
# rm -rf "$install_dir" # 删除项目目录
# if [ $? -eq 0 ]; then
# echo_content "green" "项目已成功卸载。"
# else
# echo_content "red" "卸载失败。"
# fi
# else
# echo_content "yellow" "卸载操作已取消。"
# fi
# else
# echo_content "red" "项目目录不存在,无法卸载。"
# fi
# }
# # 函数:启动或重启项目
# start_project() {
# cd "$production_install_dir" || exit 1
# rm nginx/nginx.conf
# rm -rf nginx/nginx.conf
# cp nginx/nginx_clear_mysql.conf nginx/nginx.conf
# echo_content "green" "是否要启动/重启 项目?(y/n):"
# read -r restart
# if [ "$restart" = "y" ]; then
# if docker-compose ps | grep -q "Up"; then
# # 定义服务列表
# services=("mall-admin" "mall-api" "mall-data" "nginx" "mall-tools" "images_proxy")
# # 遍历服务列表
# for service in "${services[@]}"; do
# # 检查容器是否已创建
# if docker ps -a --format '{{.Names}}' | grep -Eq "(${service}|_[a-zA-Z0-9]+_${service})$"; then
# echo "docker-compose restart $service"
# docker-compose restart "$service"
# else
# echo "docker-compose up -d $service"
# docker-compose up -d "$service"
# fi
# done
# # docker-compose restart mall-admin mall-api mall-data nginx mall-tools go-nginx myiframe images_proxy proxy-mysql proxy-server
# echo "重启中 预计 60秒左右启动成功 ..."
# sleep 60
# else
# docker-compose up -d
# echo "第一次启动 预计 150 秒左右启动成功 ..."
# sleep 100
# docker-compose restart mall-admin mall-api mall-data
# echo "重启中 预计 60秒左右启动成功 ..."
# sleep 60
# fi
# fi
# }
# # 函数:选择要更新的项目
# select_project() {
# local project_names=($(get_project_names))
# # 判断项目数量
# if [ ${#project_names[@]} -eq 1 ]; then
# selected_project="${project_names[0]}"
# project_dir=$(get_project_info "${projects[0]}" 2)
# project_name=$(get_project_info "${projects[0]}" 0)
# else
# echo_content "yellow" "\n\n"
# echo_content "yellow" "请选择要更新的的项目\n"
# # 自定义 PS3 提示符
# PS3="请输入项目对应的数字:"
# select selected_project in "${project_names[@]}"; do
# if [ -n "$selected_project" ]; then
# for project in "${projects[@]}"; do
# if [ "$(get_project_info "$project" 0)" = "$selected_project" ]; then
# project_dir=$(get_project_info "$project" 2)
# project_name=$(get_project_info "$project" 0)
# break 2
# fi
# done
# else
# echo_content "red" "无效的选择,请重新选择。"
# continue
# fi
# done
# fi
# updata_project "$project_dir" "$project_name"
# }
# # 函数:选择要执行的操作
# select_operation() {
# echo_content "yellow" "请选择要执行的操作:"
# PS3="请输入操作对应的数字:"
# select operation in "更新项目" "启动/重启【项目】" "启动/重启【mysql】" "对外开放【mysql】" "重置容器" "卸载" "退出"; do
# case $REPLY in
# 1)
# echo_content "green" "你选择了操作: 更新项目"
# select_project
# start_project
# break
# ;;
# 2)
# echo_content "green" "你选择了操作: 商城(启动/重启)"
# start_project
# break
# ;;
# 3)
# echo_content "green" "你选择了操作: 重启mysql"
# cd "$production_install_dir" || exit 1
# docker-compose restart mysql
# break
# ;;
# 4)
# echo_content "green" "对外开放【mysql】"
# cd "$production_install_dir" || exit 1
# rm nginx/nginx.conf
# rm -rf nginx/nginx.conf
# cp nginx/nginx_open_mysql.conf nginx/nginx.conf
# docker-compose rm -sf nginx
# docker-compose up -d nginx
# break
# ;;
# 5)
# echo_content "green" "你选择了操作: 重置容器"
# echo_content "green" "是否要启动/重启 项目?(y/n):"
# read -r restart
# if [ "$restart" = "y" ]; then
# docker rm -f $(docker ps -aq)
# echo_content "green" "容器全部删除成功 请重启服务"
# start_project
# fi
# exit
# ;;
# 6)
# echo_content "green" "你选择了操作: 卸载"
# uninstall_project
# exit
# ;;
# 7)
# echo_content "green" "你选择了操作: 退出"
# exit
# ;;
# *)
# echo_content "red" "无效的选择"
# continue
# ;;
# esac
# done
# }
# # 函数: 初始化脚本 检查环境
# init_environment_check() {
# if [ ! -d "$production_run_dir/.git" ]; then
# # 运行相关逻辑,找到匹配项后可立即处理
# echo_content "green" "拉取项目: production_run"
# echo_content "green" "项目仓库: $production_run_repo"
# echo_content "green" "项目目录: $production_run_dir"
# pull_project "$production_run_repo" "$production_run_dir" "production_run"
# else
# echo_content "green" "更新项目: production_run"
# echo_content "green" "项目仓库: $production_run_repo"
# echo_content "green" "项目目录: $production_run_dir"
# updata_project "$production_run_dir" "production_run"
# fi
# if [ ! -d "$production_mysql_dir/.git" ]; then
# # 运行相关逻辑,找到匹配项后可立即处理
# echo_content "green" "拉取项目: production_mysql"
# echo_content "green" "项目仓库: $production_mysql_repo"
# echo_content "green" "项目目录: $production_mysql_dir"
# pull_project "$production_mysql_repo" "$production_mysql_dir" "服务端配置"
# cd "$production_mysql_dir/mysql"
# unzip data.zip
# # else
# # echo_content "green" "更新项目: production_mysql"
# # echo_content "green" "项目仓库: $production_mysql_repo"
# # echo_content "green" "项目目录: $production_mysql_dir"
# # updata_project "$production_mysql_dir" "production_mysql"
# fi
# if [ ! -d "$production_server_config_dir/.git" ]; then
# # 运行相关逻辑,找到匹配项后可立即处理
# echo_content "green" "拉取项目: 服务端配置文件"
# echo_content "green" "项目仓库: $production_server_config_repo"
# echo_content "green" "项目目录: $production_server_config_dir"
# pull_project "$production_server_config_repo" "$production_server_config_dir" "服务端配置"
# else
# echo_content "green" "更新项目: 服务端配置文件"
# echo_content "green" "项目仓库: $production_server_config_repo"
# echo_content "green" "项目目录: $production_server_config_dir"
# updata_project "$production_server_config_dir" "服务端配置文件"
# fi
# get_project_names
# for project in "${projects[@]}"; do
# # 获取项目信息
# project_name=$(get_project_info "$project" 0)
# project_repo=$(get_project_info "$project" 1)
# project_dir=$(get_project_info "$project" 2)
# # 检查项目目录中是否存在 .git 目录(即项目是否已拉取)
# if [ ! -d "$project_dir/.git" ]; then
# # 如果项目未被拉取,执行拉取操作
# echo_content "green" "拉取项目: $project_name"
# echo_content "green" "项目仓库: $project_repo"
# echo_content "green" "项目目录: $project_dir"
# # 调用 pull_project 函数进行项目拉取
# pull_project "$project_repo" "$project_dir" "$project_name"
# fi
# # rm -rf "$production_run_dir/tomallmcat/"
# # ln -s "$project_dir/$project_name" "$production_run_dir/$project_name"
# done
# }
# 更新分支函数
# 更新分支函数
update_branch
()
{
update_branch
()
{
local
repo_url
=
$1
local
repo_url
=
$1
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论