|
|
|
@ -0,0 +1,441 @@
|
|
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
|
|
#--------------------------------------------
|
|
|
|
|
# shell 用于启动docker应用
|
|
|
|
|
# author: djshen
|
|
|
|
|
# The script:
|
|
|
|
|
# - Requires `root` or `sudo` privileges to run.
|
|
|
|
|
# - 如果想添加新的docker-compose 请模仿脚本中example的语句,搜索example即可
|
|
|
|
|
#--------------------------------------------
|
|
|
|
|
|
|
|
|
|
# 检查当前用户是否为 root 用户
|
|
|
|
|
if [[ $EUID -eq 0 ]]; then
|
|
|
|
|
echo "当前脚本以 root 权限运行"
|
|
|
|
|
else
|
|
|
|
|
# 检查当前脚本是否使用了 sudo
|
|
|
|
|
if sudo -n true > /dev/null 2>&1; then
|
|
|
|
|
echo "当前脚本使用了 sudo"
|
|
|
|
|
else
|
|
|
|
|
echo "当前脚本没有 root 权限,且没有使用 sudo "
|
|
|
|
|
exitHandle
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# 检查docker-compose文件是否存在,不存在则创建 todo
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# 退出操作
|
|
|
|
|
function exitHandle() {
|
|
|
|
|
valid_choice=true
|
|
|
|
|
echo "下次见~"
|
|
|
|
|
}
|
|
|
|
|
# 开启全部Docker服务
|
|
|
|
|
function startAllDocker() {
|
|
|
|
|
dockerComposeServiceCheck "alist"
|
|
|
|
|
if [ "$?" = "0" ]; then
|
|
|
|
|
startDockerService "alist"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
dockerComposeServiceCheck "uptime-kuma"
|
|
|
|
|
if [ "$?" = "0" ]; then
|
|
|
|
|
startDockerService "uptime-kuma"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
dockerComposeServiceCheck "bitwatden"
|
|
|
|
|
if [ "$?" = "0" ]; then
|
|
|
|
|
startDockerService "bitwatden"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
dockerComposeServiceCheck "ddns"
|
|
|
|
|
if [ "$?" = "0" ]; then
|
|
|
|
|
startDockerService "ddns"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
dockerComposeServiceCheck "gitea"
|
|
|
|
|
if [ "$?" = "0" ]; then
|
|
|
|
|
startDockerService "gitea"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
dockerComposeServiceCheck "drone"
|
|
|
|
|
if [ "$?" = "0" ]; then
|
|
|
|
|
startDockerService "drone"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
dockerComposeServiceCheck "halo"
|
|
|
|
|
if [ "$?" = "0" ]; then
|
|
|
|
|
startDockerService "halo"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# dockerComposeServiceCheck "frpc"
|
|
|
|
|
# if [ "$?" = "0" ]; then
|
|
|
|
|
# startDockerService "frpc"
|
|
|
|
|
# fi
|
|
|
|
|
|
|
|
|
|
# dockerComposeServiceCheck "influxdb"
|
|
|
|
|
# if [ "$?" = "0" ]; then
|
|
|
|
|
# startDockerService "influxdb"
|
|
|
|
|
# fi
|
|
|
|
|
dockerComposeServiceCheck "tailchat"
|
|
|
|
|
if [ "$?" = "0" ]; then
|
|
|
|
|
startTailChat
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# example
|
|
|
|
|
# dockerComposeServiceCheck "服务名,例如halo,尽量和docker-compose.halo.yml的halo都后缀一样"
|
|
|
|
|
# if [ "$?" = "0" ]; then
|
|
|
|
|
# startDockerService "服务名,例如halo"
|
|
|
|
|
# fi
|
|
|
|
|
}
|
|
|
|
|
# 关闭全部Docker服务
|
|
|
|
|
function stopAllDocker() {
|
|
|
|
|
dockerComposeServiceCheck "alist"
|
|
|
|
|
if [ "$?" = "1" ]; then
|
|
|
|
|
stopDockerService "alist"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
dockerComposeServiceCheck "uptime-kuma"
|
|
|
|
|
if [ "$?" = "1" ]; then
|
|
|
|
|
stopDockerService "uptime-kuma"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
dockerComposeServiceCheck "bitwatden"
|
|
|
|
|
if [ "$?" = "1" ]; then
|
|
|
|
|
stopDockerService "bitwatden"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
dockerComposeServiceCheck "ddns"
|
|
|
|
|
if [ "$?" = "1" ]; then
|
|
|
|
|
stopDockerService "ddns"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
dockerComposeServiceCheck "gitea"
|
|
|
|
|
if [ "$?" = "1" ]; then
|
|
|
|
|
stopDockerService "gitea"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
dockerComposeServiceCheck "drone"
|
|
|
|
|
if [ "$?" = "1" ]; then
|
|
|
|
|
stopDockerService "drone"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
dockerComposeServiceCheck "halo"
|
|
|
|
|
if [ "$?" = "1" ]; then
|
|
|
|
|
stopDockerService "halo"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# dockerComposeServiceCheck "frpc"
|
|
|
|
|
# if [ "$?" = "1" ]; then
|
|
|
|
|
# stopDockerService "frpc"
|
|
|
|
|
# fi
|
|
|
|
|
|
|
|
|
|
# dockerComposeServiceCheck "influxdb"
|
|
|
|
|
# if [ "$?" = "1" ]; then
|
|
|
|
|
# stopDockerService "influxdb"
|
|
|
|
|
# fi
|
|
|
|
|
|
|
|
|
|
dockerComposeServiceCheck "tailchat"
|
|
|
|
|
if [ "$?" = "1" ]; then
|
|
|
|
|
stopDockerService "tailchat"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# example
|
|
|
|
|
# dockerComposeServiceCheck "服务名,例如halo,尽量和docker-compose.halo.yml的halo都后缀一样"
|
|
|
|
|
# if [ "$?" = "1" ]; then
|
|
|
|
|
# startDockerService "服务名,例如halo"
|
|
|
|
|
# fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 检查所有docker服务状态
|
|
|
|
|
function checkAllDockerState(){
|
|
|
|
|
dockerComposeServiceCheck "alist"
|
|
|
|
|
dockerComposeServiceCheck "uptime-kuma"
|
|
|
|
|
dockerComposeServiceCheck "bitwatden"
|
|
|
|
|
dockerComposeServiceCheck "ddns"
|
|
|
|
|
dockerComposeServiceCheck "gitea"
|
|
|
|
|
dockerComposeServiceCheck "drone"
|
|
|
|
|
dockerComposeServiceCheck "halo"
|
|
|
|
|
dockerComposeServiceCheck "frpc"
|
|
|
|
|
dockerComposeServiceCheck "influxdb"
|
|
|
|
|
dockerComposeServiceCheck "tailchat"
|
|
|
|
|
# example
|
|
|
|
|
# dockerComposeServiceCheck "服务名,例如halo,尽量和docker-compose.halo.yml的halo都后缀一样"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 操作服务 (开启 关闭 重启)
|
|
|
|
|
function operationService(){
|
|
|
|
|
echo "请选择你对'$1'服务的操作?(1.重启 2.开启 3.关闭 4.查看状态) 请输入:"
|
|
|
|
|
read operationChoice
|
|
|
|
|
operationWhile=false
|
|
|
|
|
while [ "$operationWhile" = false ]; do
|
|
|
|
|
if [ "$operationChoice" == "1" ]; then
|
|
|
|
|
operationWhile=true
|
|
|
|
|
restartDockerService "$1"
|
|
|
|
|
elif [ "$operationChoice" == "2" ]; then
|
|
|
|
|
operationWhile=true
|
|
|
|
|
if [ ["$1" == "tailchat"] ]; then
|
|
|
|
|
startTailChat
|
|
|
|
|
else
|
|
|
|
|
startDockerService "$1"
|
|
|
|
|
fi
|
|
|
|
|
elif [ "$operationChoice" == "3" ]; then
|
|
|
|
|
operationWhile=true
|
|
|
|
|
stopDockerService "$1"
|
|
|
|
|
elif [ "$operationChoice" == "4" ]; then
|
|
|
|
|
operationWhile=true
|
|
|
|
|
dockerComposeServiceCheck "$1"
|
|
|
|
|
else
|
|
|
|
|
echo "请重新输入:"
|
|
|
|
|
read operationChoice
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 开启 tailchat聊天应用
|
|
|
|
|
function startTailChat() {
|
|
|
|
|
echo "tailchat 启动中..."
|
|
|
|
|
checkDockerImages "moonrailgun/tailchat:1.8"
|
|
|
|
|
if [ "$?" == 0 ]; then
|
|
|
|
|
docker pull moonrailgun/tailchat:1.8
|
|
|
|
|
fi
|
|
|
|
|
checkDockerTag "moonrailgun/tailchat:1.8" "tailchat"
|
|
|
|
|
if [ "$?" == 0 ]; then
|
|
|
|
|
docker tag moonrailgun/tailchat tailchat
|
|
|
|
|
fi
|
|
|
|
|
docker-compose -f docker-compose.tailchat.yml --env-file docker-compose.tailchat.env -p tailchat up -d
|
|
|
|
|
echo "tailchat 启动成功!"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 安装docker
|
|
|
|
|
function installDocker(){
|
|
|
|
|
curl -fsSL https://get.docker.com | bash -s docker
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
# 安装dockerCompose
|
|
|
|
|
function installDockerCompose(){
|
|
|
|
|
curl -L https://github.com/docker/compose/releases/download/v2.16.0/docker-compose-linux-`uname -m` > ./docker-compose
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 开启Docker-compose 服务
|
|
|
|
|
function startDockerService () {
|
|
|
|
|
echo "$1 开启中..."
|
|
|
|
|
docker-compose -f docker-compose.$1.yml -p $1 up -d
|
|
|
|
|
echo "$1 开启成功!"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 关闭Docker-compose 服务
|
|
|
|
|
function stopDockerService () {
|
|
|
|
|
echo "$1 关闭中..."
|
|
|
|
|
docker-compose -f docker-compose.$1.yml -p $1 down
|
|
|
|
|
echo "$1 关闭成功!"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 重启Docker-compose 服务
|
|
|
|
|
function restartDockerService () {
|
|
|
|
|
echo "$1 重启中..."
|
|
|
|
|
docker-compose -f docker-compose.$1.yml -p $1 restart
|
|
|
|
|
echo "$1 重启成功!"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 服务是否启动检查
|
|
|
|
|
function dockerComposeServiceCheck(){
|
|
|
|
|
# 定义docker-compose文件和项目名称
|
|
|
|
|
compose_file="docker-compose.$1.yml"
|
|
|
|
|
project_name="$1"
|
|
|
|
|
service_name="$1"
|
|
|
|
|
# 检查服务是否已启动
|
|
|
|
|
container_id=$(docker-compose -f "$compose_file" -p "$project_name" ps -q "$service_name")
|
|
|
|
|
if [ -n "$container_id" ]; then
|
|
|
|
|
echo "$service_name已启动"
|
|
|
|
|
return 1
|
|
|
|
|
else
|
|
|
|
|
echo "$service_name未启动"
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 检查docker镜像是否存在
|
|
|
|
|
function checkDockerImages () {
|
|
|
|
|
if docker image inspect $1 >/dev/null 2>&1; then
|
|
|
|
|
echo "镜像 $1 存在"
|
|
|
|
|
return 1
|
|
|
|
|
else
|
|
|
|
|
echo "镜像 $1 不存在"
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 检查docker镜像标签是否存在
|
|
|
|
|
function checkDockerTag () {
|
|
|
|
|
if docker image inspect $1 -f '{{.RepoTags}}' | grep -q $2; then
|
|
|
|
|
echo "标签 '$2' 存在于镜像 '$1'"
|
|
|
|
|
return 1
|
|
|
|
|
else
|
|
|
|
|
echo "标签 '$2' 不存在于镜像 '$1'"
|
|
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# 选择操作
|
|
|
|
|
function echoOperate(){
|
|
|
|
|
echo "请选择以下操作:"
|
|
|
|
|
echo " 1. 开启 全部Docker服务"
|
|
|
|
|
echo " 2. 关闭 全部Docker服务 "
|
|
|
|
|
echo " 3. 检查 Docker服务运行情况"
|
|
|
|
|
echo " 4. 操作 alist 服务"
|
|
|
|
|
echo " 5. 操作 bitwatden 服务"
|
|
|
|
|
echo " 6. 操作 ddns 服务"
|
|
|
|
|
echo " 7. 操作 gitea 服务"
|
|
|
|
|
echo " 8. 操作 drone 服务"
|
|
|
|
|
echo " 9. 操作 halo 服务"
|
|
|
|
|
echo "10. 操作 frpc 服务"
|
|
|
|
|
echo "11. 操作 influxdb 服务"
|
|
|
|
|
echo "12. 操作 tailchat 服务"
|
|
|
|
|
echo "13. 操作 uptime-kuma 服务"
|
|
|
|
|
echo "14. 退出"
|
|
|
|
|
# example
|
|
|
|
|
# echo "99. 操作 xxx 服务"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
# =================================================== 上面全是函数========================================================
|
|
|
|
|
echo "脚本依赖基础环境检查开始"
|
|
|
|
|
|
|
|
|
|
# 判断docker是否安装过
|
|
|
|
|
if command -v docker >/dev/null 2>&1; then
|
|
|
|
|
echo "Docker已安装"
|
|
|
|
|
else
|
|
|
|
|
echo "Docker未安装"
|
|
|
|
|
echo "如果你想要安装docker? 请输入 yes/no :"
|
|
|
|
|
read isNeedInstallDocker
|
|
|
|
|
isNeedInstallDockerWhile=false
|
|
|
|
|
while [ [ "$isNeedInstallDockerWhile" = false ] ]; do
|
|
|
|
|
if [ "$isNeedInstallDocker" == "yes" ]; then
|
|
|
|
|
installDocker
|
|
|
|
|
if ! command -v docker >/dev/null 2>&1; then
|
|
|
|
|
echo "docker安装失败!"
|
|
|
|
|
exitHandle
|
|
|
|
|
fi
|
|
|
|
|
isNeedInstallDockerWhile=true
|
|
|
|
|
elif [ "$isNeedInstallDocker" == "no" ]; then
|
|
|
|
|
isNeedInstallDockerWhile=true
|
|
|
|
|
echo "本脚本需要安装docker作为基础支持~下次见~"
|
|
|
|
|
exitHandle
|
|
|
|
|
else
|
|
|
|
|
echo "请重新输入:"
|
|
|
|
|
read isNeedInstallDocker
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
fi
|
|
|
|
|
# 判断docker是否正常运行中
|
|
|
|
|
if systemctl is-active --quiet docker; then
|
|
|
|
|
echo "Docker 运行正常"
|
|
|
|
|
else
|
|
|
|
|
echo "Docker未运行,是否需要启动?请输入 yes/no :"
|
|
|
|
|
read isNeedStartDocker
|
|
|
|
|
isNeedStartDockerWhile=false
|
|
|
|
|
while [ [ "$isNeedStartDockerWhile" = false ] ]; do
|
|
|
|
|
if [ "$isNeedStartDocker" == "yes" ]; then
|
|
|
|
|
systemctl start docker
|
|
|
|
|
systemctl enable docker
|
|
|
|
|
if systemctl is-active --quiet docker; then
|
|
|
|
|
echo "Docker 启动失败!"
|
|
|
|
|
exitHandle
|
|
|
|
|
fi
|
|
|
|
|
isNeedStartDockerWhile=true
|
|
|
|
|
elif [ "$isNeedStartDocker" == "no" ]; then
|
|
|
|
|
isNeedStartDockerWhile=true
|
|
|
|
|
echo "本脚本需要安装docker作为基础支持~下次见~"
|
|
|
|
|
exitHandle
|
|
|
|
|
else
|
|
|
|
|
echo "请重新输入:"
|
|
|
|
|
read isNeedStartDocker
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# 判断docker compose是否安装
|
|
|
|
|
if which docker-compose >/dev/null 2>&1; then
|
|
|
|
|
echo "docker-compose 已安装"
|
|
|
|
|
else
|
|
|
|
|
echo "docker-compose 未安装"
|
|
|
|
|
echo "如果你想要安装docker-compose ? 请输入 yes/no :"
|
|
|
|
|
read isNeedInstallDockerCompose
|
|
|
|
|
isNeedInstallDockerComposeWhile=false
|
|
|
|
|
while [ [ "$isNeedInstallDockerComposeWhile" = false ] ]; do
|
|
|
|
|
if [ "$isNeedInstallDockerCompose" == "yes" ]; then
|
|
|
|
|
installDockerCompose
|
|
|
|
|
if ! which docker-compose >/dev/null 2>&1; then
|
|
|
|
|
echo "docker-compose安装失败!"
|
|
|
|
|
exitHandle
|
|
|
|
|
fi
|
|
|
|
|
isNeedInstallDockerComposeWhile=true
|
|
|
|
|
elif [ "$isNeedInstallDockerCompose" == "no" ]; then
|
|
|
|
|
isNeedInstallDockerComposeWhile=true
|
|
|
|
|
echo "本脚本需要安装docker-compose作为基础支持~下次见~"
|
|
|
|
|
exitHandle
|
|
|
|
|
else
|
|
|
|
|
echo "请重新输入:"
|
|
|
|
|
read isNeedInstallDockerCompose
|
|
|
|
|
fi
|
|
|
|
|
done
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo "脚本依赖基础环境检查结束"
|
|
|
|
|
|
|
|
|
|
echoOperate
|
|
|
|
|
|
|
|
|
|
# 判断操作是否有效
|
|
|
|
|
valid_choice=false
|
|
|
|
|
|
|
|
|
|
read choice
|
|
|
|
|
|
|
|
|
|
while [[ "$valid_choice" == false ]]; do
|
|
|
|
|
if [ "$choice" == "1" ]; then
|
|
|
|
|
startAllDocker
|
|
|
|
|
exitHandle
|
|
|
|
|
elif [ "$choice" == "2" ]; then
|
|
|
|
|
stopAllDocker
|
|
|
|
|
exitHandle
|
|
|
|
|
elif [ "$choice" == "3" ]; then
|
|
|
|
|
checkAllDockerState
|
|
|
|
|
exitHandle
|
|
|
|
|
elif [[ "$choice" == "4" ]]; then
|
|
|
|
|
operationService "alist"
|
|
|
|
|
exitHandle
|
|
|
|
|
elif [[ "$choice" == "5" ]]; then
|
|
|
|
|
operationService "bitwatden"
|
|
|
|
|
exitHandle
|
|
|
|
|
elif [[ "$choice" == "6" ]]; then
|
|
|
|
|
operationService "ddns"
|
|
|
|
|
exitHandle
|
|
|
|
|
elif [[ "$choice" == "7" ]]; then
|
|
|
|
|
operationService "gitea"
|
|
|
|
|
exitHandle
|
|
|
|
|
elif [[ "$choice" == "8" ]]; then
|
|
|
|
|
operationService "drone"
|
|
|
|
|
exitHandle
|
|
|
|
|
elif [[ "$choice" == "9" ]]; then
|
|
|
|
|
operationService "halo"
|
|
|
|
|
exitHandle
|
|
|
|
|
elif [[ "$choice" == "10" ]]; then
|
|
|
|
|
operationService "frpc"
|
|
|
|
|
exitHandle
|
|
|
|
|
elif [[ "$choice" == "11" ]]; then
|
|
|
|
|
operationService "influxdb"
|
|
|
|
|
exitHandle
|
|
|
|
|
elif [[ "$choice" == "12" ]]; then
|
|
|
|
|
operationService "tailchat"
|
|
|
|
|
exitHandle
|
|
|
|
|
elif [[ "$choice" == "13" ]]; then
|
|
|
|
|
operationService "uptime-kuma"
|
|
|
|
|
exitHandle
|
|
|
|
|
elif [[ "$choice" == "14" ]]; then
|
|
|
|
|
exitHandle
|
|
|
|
|
# example
|
|
|
|
|
# elif [[ "$choice" == "99" ]]; then
|
|
|
|
|
# 你的操作~
|
|
|
|
|
# exitHandle
|
|
|
|
|
else
|
|
|
|
|
echo "无效选项,请重新输入:"
|
|
|
|
|
read choice
|
|
|
|
|
fi
|
|
|
|
|
done
|