You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

442 lines
11 KiB
Bash

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/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