From b0d2492b476f97b1967e1b7e9c1c17eabfd740c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=82=9F=E7=A9=BA=E7=9A=84=E6=97=A5=E5=B8=B8=E9=95=9C?= =?UTF-8?q?=E5=83=8F=E4=BB=93=E5=BA=93?= Date: Wed, 5 Jun 2024 16:13:11 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20xiaoya?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- xiaoya/xiaoya-all.sh | 252 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100644 xiaoya/xiaoya-all.sh diff --git a/xiaoya/xiaoya-all.sh b/xiaoya/xiaoya-all.sh new file mode 100644 index 0000000..e9d4993 --- /dev/null +++ b/xiaoya/xiaoya-all.sh @@ -0,0 +1,252 @@ +#!/bin/bash + +set -eu + +sedsh() { + if [[ "$(uname -o)" = "Darwin" ]]; then + # macOS + sed -i '' "$@" + else + # Linux + sed -i "$@" + fi +} + +# 格式https://xxx.com/ +GH_PROXY="${GH_PROXY:=}" +# 格式xxx.com +IMAGE_PROXY="${IMAGE_PROXY:=}" + +# 服务镜像 +IMAGE_TAG="${VERSION:-latest}" +# 服务下载地址 +DOWNLOAD_URL="${GH_PROXY}https://raw.githubusercontent.com/monlor/docker-xiaoya/${VERSION:-main}" + +# 欢迎信息 +echo "欢迎使用xiaoya服务部署脚本" +echo "项目地址:https://github.com/monlor/docker-xiaoya" +echo "作者:monlor (https://link.monlor.com)" +echo + +# 检查docker服务是否存在,不存在则询问用户是否安装,不安装退出脚本 +if ! command -v docker &> /dev/null; then + if [ "$(uname -o)" = "Darwin" ]; then + echo "Docker 未安装,请安装docker后再运行脚本,推荐OrbStack:https://orbstack.dev/" + exit 1 + fi + read -rp "Docker 未安装,是否安装?(y/n): " install + if [ "$install" = "y" ]; then + echo "安装docker..." + curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun + systemctl enable docker + systemctl start docker + else + echo "退出安装" + exit 1 + fi +fi + +DOCKER_COMPOSE="docker compose" + +# 检查是否安装了compose插件,docker compose 命令 +if ! docker compose &> /dev/null && ! which docker-compose &> /dev/null; then + read -rp "Docker Compose 未安装,是否安装?(y/n): " install + if [ "$install" = "y" ]; then + echo "安装docker compose..." + # 判断系统是x86还是arm,arm有很多种类,都要判断 + if [ "$(uname -m)" = "aarch64" ]; then + file=docker-compose-linux-aarch64 + elif [ "$(uname -m)" = "x86_64" ]; then + file=docker-compose-linux-x86_64 + else + echo "不支持的系统架构$(uname -m), 请自行安装docker compose(https://docs.docker.com/compose/install/linux/#install-using-the-repository)" + exit 1 + fi + curl -SL "${GH_PROXY}https://github.com/docker/compose/releases/download/v2.27.1/$file" -o /usr/local/bin/docker-compose + chmod +x /usr/local/bin/docker-compose + else + echo "退出安装" + exit 1 + fi +fi + +if ! docker compose &> /dev/null; then + DOCKER_COMPOSE="docker-compose" +fi + +# 让用户输入服务部署目录,默认/opt/xiaoya +read -rp "请输入服务部署目录(默认/opt/xiaoya): " install_path +install_path=${install_path:=/opt/xiaoya} + +# 检查服务是否已经运行 +echo "检查服务是否已经存在..." +if [ -f "$install_path/docker-compose.yml" ]; then + # 询问用户是否要更新服务 + read -rp "检查到服务已存在,是否更新服务?(y/n): " update + if [ "${update}" != "y" ]; then + echo "退出安装" + exit 1 + fi +fi + +token="" +open_token="" +folder_id="" + +# 如果是更新服务,则从原有的compose配置中获取token等信息 +if [ "${update:-}" = "y" ]; then + token=$(grep ALIYUN_TOKEN "$install_path/env" 2> /dev/null | awk -F '=' '{print $2}') + open_token=$(grep ALIYUN_OPEN_TOKEN "$install_path/env" 2> /dev/null | awk -F '=' '{print $2}') + folder_id=$(grep ALIYUN_FOLDER_ID "$install_path/env" 2> /dev/null | awk -F '=' '{print $2}') +fi + +# 让用户输入阿里云盘TOKEN,token获取方式教程:https://alist.nn.ci/zh/guide/drivers/aliyundrive.html +echo +echo "阿里云盘token获取方式教程:https://alist.nn.ci/zh/guide/drivers/aliyundrive.html" +read -rp "请输入阿里云盘TOKEN(默认为$token): " res +token=${res:=$token} +if [ ${#token} -ne 32 ]; then + echo "长度不对,阿里云盘 Token是32位" + exit 1 +fi + +# 让用户输入阿里云盘OpenTOKEN,token获取方式教程:https://alist.nn.ci/zh/guide/drivers/aliyundrive_open.html +echo +echo "阿里云盘Open token获取方式教程:https://alist.nn.ci/zh/guide/drivers/aliyundrive_open.html" +read -rp "请输入阿里云盘Open TOKEN(默认为$open_token): " res +open_token=${res:=$open_token} +if [ ${#open_token} -le 334 ]; then + echo "长度不对,阿里云盘 Open Token是335位" + exit 1 +fi + +# 让用户输入阿里云盘转存目录folder_id,folder_id获取方式教程:https://www.aliyundrive.com/s/rP9gP3h9asE +echo +echo "进入阿里云盘网页版,创建一个文件夹,点击文件夹,复制浏览器阿里云盘地址末尾的文件夹ID(最后一个斜杠/后面的一串字符串)" +read -rp "请输入阿里云盘缓存目录ID(默认为$folder_id): " res +folder_id=${res:=$folder_id} +if [ ${#folder_id} -ne 40 ]; then + echo "长度不对,阿里云盘 folder id是40位" + exit 1 +fi + +# 选择部署服务类型,alist + emby (默认), alist, alist + jellyfin, alist + emby + jellyfin +echo +echo "部署类型:" +echo "1. alist + emby (默认)" +echo "2. alist" +echo "3. alist + jellyfin" +echo "4. alist + emby + jellyfin" +read -rp "请选择部署服务类型: " service_type +case $service_type in + 1) + service_type="" + ;; + 2) + service_type="-alist" + ;; + 3) + service_type="-jellyfin" + ;; + 4) + service_type="-all" + ;; + *) + service_type="" + ;; +esac + + +# 检查目录是否存在,不存在则创建 +if [ ! -d "$install_path" ]; then + mkdir -p "$install_path" +fi + +cd "$install_path" + +echo "开始生成配置文件docker-compose${service_type}.yml..." +curl -#Lo "$install_path/docker-compose.yml" "${DOWNLOAD_URL}/docker-compose${service_type}.yml" +if [ ! -f "$install_path/env" ]; then + curl -#Lo "$install_path/env" "${DOWNLOAD_URL}/env" +fi +sedsh "s#ALIYUN_TOKEN=.*#ALIYUN_TOKEN=$token#g" env +sedsh "s#ALIYUN_OPEN_TOKEN=.*#ALIYUN_OPEN_TOKEN=$open_token#g" env +sedsh "s#ALIYUN_FOLDER_ID=.*#ALIYUN_FOLDER_ID=$folder_id#g" env + +if [ -n "$IMAGE_PROXY" ]; then + sedsh -E "s#image: [^/]+#image: ${IMAGE_PROXY}#g" docker-compose.yml +fi + +# 修改镜像版本 +sedsh "s#:latest#:$IMAGE_TAG#g" docker-compose.yml + +echo "开始部署服务..." +$DOCKER_COMPOSE -f docker-compose.yml up --remove-orphans --pull=always -d + +echo "服务开始部署,如果部署emby/jellyfin,下载并解压60G元数据需要一段时间,请耐心等待..." +echo "脚本执行完成不代表服务启动完成,请执行下面的命令查看日志来检查部署情况." + +echo +echo "> 服务管理(请牢记以下命令)" +# 提示用户compose如何查看日志,启动,重启,停止服务 +echo "查看日志:$install_path/manage.sh logs" +# 更新服务 +echo "启动服务:$install_path/manage.sh start" +echo "停止服务:$install_path/manage.sh stop" +echo "重启服务:$install_path/manage.sh restart" +echo "加载配置:$install_path/manage.sh reload" +echo "高级用户自定义配置:$install_path/env" +echo "修改env或者compose配置后,需要执行上面的加载配置reload命令生效!" + +# 获取当前服务器ip +ip=$(curl -s ip.3322.net 2> /dev/null) +# 内网ip +local_ip="" +if [[ "$(uname -o)" = "Darwin" ]]; then + interface="$(route -n get default | grep interface | awk -F ':' '{print$2}' | awk '{$1=$1};1')" + local_ip="$(ifconfig "${interface}" | grep 'inet ' | awk '{print$2}')" +else + interface="$(ip route | grep default | awk '{print$5}')" + local_ip="$(ip -o -4 addr show "${interface}" | awk '{print $4}' | cut -d/ -f1)" +fi + +echo +echo "> 服务正在部署,请查看日志等待部署成功后,尝试访问下面的地址" +echo "alist:https://api.linkopenai.com/topup地址: http://$local_ip:5678, http://$ip:5678" +echo "webdav: http://$local_ip:5678/dav, http://$ip:5678/dav, 默认用户密码: guest/guest_Api789" +echo "tvbox: http://$local_ip:5678/tvbox/my_ext.json, http://$ip:5678/tvbox/my_ext.json" +echo "emby: http://$local_ip:6908, http://$ip:6908, 默认用户密码: xiaoya/1234" +echo "jellyfin: http://$local_ip:8096, http://$ip:8096,默认用户密码:ailg/5678" + +echo +echo "还没有部署完,执行这个命令查看日志:$install_path/manage.sh logs" +# 添加管理脚本,启动,停止,查看日志 +cat > "$install_path/manage.sh" <<-EOF +#!/bin/bash + +set -e + +case \$1 in + start) + $DOCKER_COMPOSE -f "$install_path/docker-compose.yml" start + ;; + stop) + $DOCKER_COMPOSE -f "$install_path/docker-compose.yml" stop + ;; + restart) + $DOCKER_COMPOSE -f "$install_path/docker-compose.yml" restart + ;; + reload) + $DOCKER_COMPOSE -f "$install_path/docker-compose.yml" up --remove-orphans -d + ;; + logs) + $DOCKER_COMPOSE -f "$install_path/docker-compose.yml" logs -f + ;; + *) + echo "Usage: \$0 {start|stop|restart|reload|logs}" + exit 1 + ;; +esac +EOF + +chmod +x "$install_path/manage.sh"