#!/bin/bash set -eu sedsh() { if [[ "$(uname -o)" = "Darwin" ]]; then # macOS sed -i '' "$@" else # Linux sed -i "$@" fi } # 格式xxx.com IMAGE_PROXY="${IMAGE_PROXY:=}" # 服务镜像 IMAGE_TAG="${VERSION:-latest}" # 欢迎信息 echo "欢迎使用xiaoya服务部署脚本" echo "项目地址:https://github.com/monlor/docker-xiaoya" echo "原作者:monlor (https://link.monlor.com)" echo # 让用户输入服务部署目录,默认/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 + jellyfin" echo "3. alist + emby + jellyfin" read -rp "请选择部署服务类型: " service_type case $service_type in 1) service_type="" ;; 2) service_type="-jellyfin" ;; 3) 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" "https://cafe.cpolar.cn/wkdaily/zero3/raw/branch/main/xiaoya/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="docker compose" $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" echo "webdav: http://$local_ip:5678/dav, 默认用户密码: guest/guest_Api789" echo "tvbox: http://$local_ip:5678/tvbox/my_ext.json" echo "emby: http://$local_ip:6908, 默认用户密码: xiaoya/1234" echo "jellyfin: http://$local_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"