diff --git a/apps/pansou-api/README.md b/apps/pansou-api/README.md new file mode 100644 index 000000000..2b23dcffd --- /dev/null +++ b/apps/pansou-api/README.md @@ -0,0 +1,56 @@ +# 盘搜 API (PanSou API) + +PanSou是一个高性能的网盘资源搜索API服务,支持TG搜索和自定义插件搜索。系统设计以性能和可扩展性为核心,支持并发搜索、结果智能排序和网盘类型分类。 + +![PanSou](https://file.lifebus.top/imgs/pansou_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 说明 + +该服务仅提供API服务,不提供任何前端界面。 + +## 特性 + +### 高性能搜索 + +并发执行多个TG频道及异步插件搜索,显著提升搜索速度;工作池设计,高效管理并发任务 + +### 网盘类型分类 + +自动识别多种网盘链接,按类型归类展示 + +### 智能排序 + +基于插件等级、时间新鲜度和优先关键词的多维度综合排序算法 + +### 异步插件系统 + +支持通过插件扩展搜索来源,支持"尽快响应,持续处理"的异步搜索模式,解决了某些搜索源响应时间长的问题。详情参考插件开发指南 + +### 二级缓存 + +分片内存+分片磁盘缓存机制,大幅提升重复查询速度和并发性能 + +## 支持的网盘类型 + +| 网盘名称 | 标识符 | +|--------|--------| +| 百度网盘 | baidu | +| 阿里云盘 | aliyun | +| 夸克网盘 | quark | +| 天翼云盘 | tianyi | +| UC网盘 | uc | +| 移动云盘 | mobile | +| 115网盘 | 115 | +| PikPak | pikpak | +| 迅雷网盘 | xunlei | +| 123网盘 | 123 | +| 磁力链接 | magnet | +| 电驴链接 | ed2k | +| 其他 | others | + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) +![Ms Studio](https://analytics.lifebus.top/p/wJix5nI1W) diff --git a/apps/pansou-api/data.yml b/apps/pansou-api/data.yml new file mode 100644 index 000000000..6a04114c2 --- /dev/null +++ b/apps/pansou-api/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + key: pansou-api + name: 盘搜 API (PanSou API) + tags: + - WebSite + - Local + shortDescZh: 高性能的网盘资源搜索API服务 + shortDescEn: High-performance web disk resource search API service + type: website + crossVersionUpdate: true + limit: 0 + website: https://so.252035.xyz/ + github: https://github.com/fish2018/pansou/ + document: https://github.com/fish2018/pansou/ + architectures: + - amd64 + - arm64 diff --git a/apps/pansou-api/latest/data.yml b/apps/pansou-api/latest/data.yml new file mode 100644 index 000000000..d817bdbd1 --- /dev/null +++ b/apps/pansou-api/latest/data.yml @@ -0,0 +1,78 @@ +additionalProperties: + formFields: + - default: "/home/pansou" + edit: true + envKey: PANSOU_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8888 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "tgsearchers4,Aliyun_4K_Movies,bdbdndn11,yunpanx,bsbdbfjfjff,yp123pan,sbsbsnsqq,yunpanxunlei,tianyifc,BaiduCloudDisk,txtyzy,peccxinpd,gotopan,PanjClub,kkxlzy,baicaoZY,MCPH01,MCPH02,MCPH03,bdwpzhpd,ysxb48,jdjdn1111,yggpan,MCPH086,zaihuayun,Q66Share,ucwpzy,shareAliyun,alyp_1,dianyingshare,Quark_Movies,XiangxiuNBB,ydypzyfx,ucquark,xx123pan,yingshifenxiang123,zyfb123,tyypzhpd,tianyirigeng,cloudtianyi,hdhhd21,Lsp115,oneonefivewpfx,qixingzhenren,taoxgzy,Channel_Shares_115,tyysypzypd,vip115hot,wp123zy,yunpan139,yunpan189,yunpanuc,yydf_hzl,leoziyuan,pikpakpan,Q_dongman,yoyokuakeduanju,TG654TG,WFYSFX02,QukanMovie,yeqingjie_GJG666,movielover8888_film3,Baidu_netdisk,D_wusun,FLMdongtianfudi,KaiPanshare,QQZYDAPP,rjyxfx,PikPak_Share_Channel,btzhi,newproductsourcing,cctv1211,duan_ju,QuarkFree,yunpanNB,kkdj001,xxzlzn,pxyunpanxunlei,jxwpzy,kuakedongman,liangxingzhinan,xiangnikanj,solidsexydoll,guoman4K,zdqxm,kduanju,cilidianying,CBduanju,SharePanFilms,dzsgx,BooksRealm,Oscar_4Kmovies,douerpan,baidu_yppan,Q_jilupian,Netdisk_Movies,yunpanquark,ammmziyuan,ciliziyuanku,cili8888,jzmm_123pan" + edit: true + envKey: CHANNELS + labelZh: Telegram搜索频道 + labelEn: Telegram search channel + required: true + type: text + - default: "labi,zhizhen,shandian,duoduo,muou,wanou,hunhepan,jikepan,panwiki,pansearch,panta,qupansou,hdr4k,pan666,susu,thepiratebay,xuexizhinan,panyq,ouge,huban,cyg,erxiao,miaoso,fox4k,pianku,clmao,wuji,cldi,xiaozhang,libvio,leijing,xb6v,xys,ddys,hdmoli,yuhuage,u3c3,javdb,clxiong,jutoushe,sdso,xiaoji,xdyh,haisou,bixin,djgou,nyaa,xinjuc,aikanzy,qupanshe,xdpan,discourse,yunsou,qqpd,ahhhhfs,nsgame,gying,quark4k,quarksoo,sousou,ash" + edit: true + envKey: ENABLED_PLUGINS + labelZh: 启用插件 + labelEn: Enable plugins + required: true + type: text + - default: "" + edit: true + envKey: PROXY + labelZh: Sock5代理 + labelEn: Sock5 proxy + required: false + type: text + - default: "" + edit: true + envKey: HTTP_PROXY + labelZh: HTTP代理 + labelEn: HTTP proxy + required: false + type: text + - default: "false" + edit: true + envKey: AUTH_ENABLED + labelZh: 启用认证 + labelEn: Enable authentication + required: true + type: select + values: + - label: 启用 + value: "true" + - label: 禁用 + value: "false" + - default: "admin:pass,user:pass" + edit: true + envKey: AUTH_USERS + labelZh: 账户配置 + labelEn: Account configuration + required: true + type: text + - default: 24 + edit: true + envKey: AUTH_TOKEN_EXPIRY + labelZh: 认证有效期 (小时) + labelEn: Authentication validity period (hours) + required: true + type: number + - default: "" + edit: true + envKey: AUTH_JWT_SECRET + labelZh: JWT密钥 + labelEn: JWT secret + required: false + type: text diff --git a/apps/pansou-api/latest/docker-compose.yml b/apps/pansou-api/latest/docker-compose.yml new file mode 100644 index 000000000..b10e76613 --- /dev/null +++ b/apps/pansou-api/latest/docker-compose.yml @@ -0,0 +1,39 @@ +networks: + 1panel-network: + external: true + +services: + pansou: + image: ghcr.io/fish2018/pansou:latest + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8888 + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - ${PANSOU_ROOT_PATH}/cache:/app/cache + environment: + - TZ=Asia/Shanghai + - PORT=8888 + - CACHE_ENABLED=true + - CACHE_PATH=/app/cache + - CACHE_MAX_SIZE=100 + - CACHE_TTL=60 + - ASYNC_PLUGIN_ENABLED=true + - ASYNC_RESPONSE_TIMEOUT=4 + - ASYNC_MAX_BACKGROUND_WORKERS=20 + - ASYNC_MAX_BACKGROUND_TASKS=100 + - ASYNC_CACHE_TTL_HOURS=1 + - HTTPS_PROXY=${HTTP_PROXY:-} + healthcheck: + test: [ "CMD", "wget", "-q", "--spider", "http://localhost:8888/api/health" ] + interval: 30s + timeout: 5s + retries: 3 + start_period: 10s diff --git a/apps/pansou-api/latest/envs/default.env b/apps/pansou-api/latest/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/apps/pansou-api/latest/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/pansou-api/latest/envs/global.env b/apps/pansou-api/latest/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/apps/pansou-api/latest/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/pansou-api/latest/scripts/init.sh b/apps/pansou-api/latest/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/pansou-api/latest/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/pansou-api/latest/scripts/uninstall.sh b/apps/pansou-api/latest/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/pansou-api/latest/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/pansou-api/latest/scripts/upgrade.sh b/apps/pansou-api/latest/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/pansou-api/latest/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/pansou-api/logo.png b/apps/pansou-api/logo.png new file mode 100644 index 000000000..2512e2b9c Binary files /dev/null and b/apps/pansou-api/logo.png differ diff --git a/apps/pansou/latest/data.yml b/apps/pansou/latest/data.yml index d817bdbd1..d6ad1142a 100644 --- a/apps/pansou/latest/data.yml +++ b/apps/pansou/latest/data.yml @@ -7,7 +7,7 @@ additionalProperties: labelEn: Data persistence path required: true type: text - - default: 8888 + - default: 8080 edit: true envKey: PANEL_APP_PORT_HTTP labelZh: WebUI 端口 diff --git a/apps/pansou/latest/docker-compose.yml b/apps/pansou/latest/docker-compose.yml index b10e76613..21efe0c18 100644 --- a/apps/pansou/latest/docker-compose.yml +++ b/apps/pansou/latest/docker-compose.yml @@ -3,8 +3,8 @@ networks: external: true services: - pansou: - image: ghcr.io/fish2018/pansou:latest + pansou-web: + image: ghcr.io/fish2018/pansou-web:latest container_name: ${CONTAINER_NAME} labels: createdBy: "Apps" @@ -12,17 +12,20 @@ services: networks: - 1panel-network ports: - - ${PANEL_APP_PORT_HTTP}:8888 + - ${PANEL_APP_PORT_HTTP}:80 env_file: - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} - ${ENV_FILE:-/etc/1panel/envs/default.env} volumes: - - ${PANSOU_ROOT_PATH}/cache:/app/cache + - ${PANSOU_ROOT_PATH}/cache:/app/data/cache + - ${PANSOU_ROOT_PATH}/logs:/app/data/logs environment: - TZ=Asia/Shanghai - - PORT=8888 + - PANSOU_HOST=127.0.0.1 + - PANSOU_PORT=8888 + - CACHE_PATH=/app/data/cache + - LOG_PATH=/app/data/logs - CACHE_ENABLED=true - - CACHE_PATH=/app/cache - CACHE_MAX_SIZE=100 - CACHE_TTL=60 - ASYNC_PLUGIN_ENABLED=true