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