Skip to main content
Glama
spelech
by spelech

📦 APKPipe

Real-Debrid 언리스트릭팅, 헤드리스 JDownloader 폴백, Nextcloud 저장소 수집, Apprise 알림, 웹 대시보드 및 네이티브 MCP 서버를 결합한 자동화된 APK 및 RSS 릴리스 파이프라인.

CI Coverage Python Docker License


📖 목차


🌟 개요

Nextcloud 또는 로컬 네트워크 저장소에서 최신 상태로 유지되는 자체 호스팅 Android 애플리케이션 라이브러리를 관리하려면 전통적으로 지루한 수작업이 필요했습니다. 릴리스 포럼(예: Mobilism) 탐색, 버전 문자열 확인, 멀티 호스터 미러 링크(Rapidgator, Uploady, DropGalaxy) 우회, 아카이브 압축 해제, APK 이름 변경, 파일을 올바른 디렉터리로 이동, Nextcloud 파일 인덱싱 트리거, 릴리스 기록 추적 등이 그것입니다.

APKPipe는 이 수명 주기를 종단 간 완전히 자동화합니다:

  1. RSS 피드를 주기적으로 모니터링하여 새로운 애플리케이션 릴리스를 감지합니다.

  2. 정규식 패턴, 릴리서 화이트리스트([Balatan], [derrin], [RockMODS]) 및 SemVer 버전 게이팅으로 맞춤형 워치리스트와 릴리스를 매칭합니다.

  3. 3계층 전략(Real-Debrid API → JDownloader 2 → Playwright Scraper)으로 다운로드 링크를 리졸브합니다.

  4. 아카이브를 다운로드하고 압축을 풀어(.zip, .rar, .7z, .tar) APK 바이너리를 추출합니다.

  5. 바이너리를 깔끔하고 표준화된 디렉터리 구조({DOWNLOAD_DIR}/{AppName}/{AppName} v{Version} [{Releaser}].apk)로 정리합니다.

  6. Nextcloud OCC 스캔 명령(occ files:scan)을 실행하여 파일이 모바일 Nextcloud 앱에 즉시 표시되도록 합니다.

  7. Apprise를 통해 Discord, Telegram, Pushover 또는 Ntfy로 풍부한 상태 알림을 푸시합니다.

  8. 인간 관리 및 자율 AI 에이전트 운영을 위해 네이티브 MCP 서버 도구와 웹 대시보드를 제공합니다.

📐 아키텍처

flowchart TD
    subgraph Sources["Feeds & Control Interfaces"]
        RSS["Mobilism RSS Feeds\n(Apps, Games, Custom)"]
        WebUI["FastAPI Web Dashboard\n(Alpine.js + Tailwind)"]
        MCP["MCP Server Tools\n(AI Agents / mcp-router)"]
    end

    subgraph APKPipeCore["APKPipe Core Engine"]
        Scheduler["AsyncIO / Periodic Poller"]
        Parser["Feed & Post Parser"]
        Matcher["Watchlist Matcher\n(Regex, Releaser Filter, SemVer)"]
        DB[("SQLite Database\n(Watchlist, Feeds, Tasks, History)")]
        Resolver["Tiered Link Resolver"]
        Downloader["Stream Downloader & Extractor"]
        Organizer["File Organizer & Sanitizer"]
        Notifier["Apprise / Ntfy Client"]
    end

    subgraph Resolvers["Download Engines"]
        RD["Real-Debrid API (Tier 1)\n(/unrestrict/link)"]
        JD["Headless JDownloader 2 (Tier 2)\n(MyJDownloader API / Watch Dir)"]
        Scraper["playwright-csharp-scraper (Tier 3)\n(Captcha / Browser Evaluator)"]
    end

    subgraph StorageNotify["Homelab Storage & Alerts"]
        NextcloudFS["Nextcloud Storage\n(/downloads/{AppName}/...)"]
        AppriseAPI["Apprise API (8000) / Ntfy"]
        NextcloudOCC["Nextcloud OCC Scan\n(docker exec occ files:scan)"]
    end

    RSS --> Scheduler
    Scheduler --> Parser
    Parser --> Matcher
    Matcher <--> DB
    WebUI <--> DB
    MCP <--> DB
    Matcher --> Resolver

    Resolver -->|RD Supported Link| RD
    Resolver -->|RD Unsupported / Direct| JD
    Resolver -->|JS / Captcha Protected| Scraper

    RD --> Downloader
    JD --> Downloader
    Scraper --> Downloader
    Downloader --> Organizer
    Organizer --> NextcloudFS
    Organizer --> NextcloudOCC
    Organizer --> Notifier
    Notifier --> AppriseAPI

✨ 주요 기능

  • 🔄 자율 피드 수집: 중복 제거와 함께 여러 RSS / ATOM 피드 소스를 주기적으로 폴링합니다.

  • 🎯 세밀한 매처: 이름 또는 정규식으로 특정 앱을 대상으로 지정하고, 최소 버전 임계값을 요구하며 신뢰할 수 있는 릴리서 태그로 필터링합니다.

  • 다중 계층 링크 언리스트릭팅:

    • Tier 1 (Real-Debrid): 50개 이상의 파일 호스터를 지원하는 직접 고속 API 언리스트릭팅.

    • Tier 2 (JDownloader 2): 헤드리스 MyJDownloader 클라우드 API 또는 로컬 폴더 링크그래버.

    • Tier 3 (Playwright Scraper): 동적 랜딩 페이지를 위한 헤드리스 브라우저 스크레이퍼 폴백.

  • 📦 자동 아카이브 추출: .zip, .rar, .7z, .tar.gz 아카이브를 투명하게 처리하여 중첩된 .apk 바이너리를 추출합니다.

  • 📂 Nextcloud OCC 통합: 자동 occ files:scan 호출과 함께 Nextcloud 사용자 디렉터리로 원활하게 배치합니다.

  • 🔔 다중 채널 홈랩 알림: 릴리스 메타데이터, 파일 크기, 다운로드 소요 시간과 함께 Apprise API 및 Ntfy를 통해 푸시 알림을 전송합니다.

  • 🤖 네이티브 Model Context Protocol(MCP): Claude Desktop, Cursor, mcp-router와 호환되는 8가지 기본 제공 도구.

  • 💻 반응형 웹 대시보드: Alpine.js와 Tailwind CSS로 구축된 깔끔한 다크/라이트 테마.

🚀 빠른 시작

Docker Compose 배포

프로덕션에서 APKPipe를 실행하는 권장 방법은 Docker Compose를 사용하는 것입니다.

  1. docker-compose.yaml 파일을 생성합니다:

services:
  apkpipe:
    image: ghcr.io/spelech/apkpipe:latest
    container_name: apkpipe
    restart: unless-stopped
    ports:
      - "8429:8000"
    environment:
      - APKPIPE_APP_NAME=APKPipe
      - APKPIPE_HOST=0.0.0.0
      - APKPIPE_PORT=8000
      - APKPIPE_DATABASE_URL=sqlite+aiosqlite:////data/apkpipe.db
      - APKPIPE_DOWNLOAD_DIR=/downloads
      - APKPIPE_STAGING_DIR=/data/staging
      - APKPIPE_POLL_INTERVAL_SECONDS=900
      - APKPIPE_REAL_DEBRID_API_TOKEN=your_real_debrid_token_here
      - APKPIPE_NEXTCLOUD_URL=http://nextcloud:80
      - APKPIPE_NEXTCLOUD_OCC_COMMAND=docker exec nextcloud-aio-nextcloud sudo -u www-data php /var/www/html/occ files:scan --path="{path}"
      - APKPIPE_APPRISE_URL=http://apprise:8000/notify/apprise
      - APKPIPE_NTFY_TOPIC=apkpipe-alerts
    volumes:
      - ./data:/data
      - /drives/storage/Nextcloud/APKs:/downloads
      - /var/run/docker.sock:/var/run/docker.sock:ro
    labels:
      - "caddy=apk.wileyriley.com"
      - "caddy.reverse_proxy={{upstreams 8000}}"
      - "caddy.import=tinyauth"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 15s
    networks:
      - default
      - caddy

networks:
  default:
    name: apkpipe_net
  caddy:
    external: true
  1. 스택을 시작합니다:

docker compose up -d
  1. 브라우저에서 http://localhost:8429(또는 Caddy를 통해 라우팅되는 경우 https://apk.wileyriley.com)을 엽니다.

환경 변수

변수

기본값

설명

APKPIPE_DATABASE_URL

sqlite+aiosqlite:///apkpipe.db

비동기 SQLAlchemy SQLite 데이터베이스 연결 문자열

APKPIPE_DOWNLOAD_DIR

/downloads

정리된 APK 라이브러리의 기본 대상 경로

APKPIPE_STAGING_DIR

/data/staging

진행 중인 스트림 및 추출을 위한 임시 작업 폴더

APKPIPE_POLL_INTERVAL_SECONDS

900

피드 폴러 주기(초) (기본값: 15분)

APKPIPE_REAL_DEBRID_API_TOKEN

""

Real-Debrid API 토큰 (real-debrid.com/apitoken에서 발급)

APKPIPE_JDOWNLOADER_EMAIL

""

MyJDownloader 계정 이메일 (선택 사항, Tier 2)

APKPIPE_JDOWNLOADER_PASSWORD

""

MyJDownloader 계정 비밀번호

APKPIPE_JDOWNLOADER_DEVICE_NAME

""

MyJDownloader 대상 기기 이름

APKPIPE_JDOWNLOADER_WATCH_DIR

""

헤드리스 JDownloader .crawljob 파일용 감시 디렉터리

APKPIPE_SCRAPER_URL

http://scraper:8080

Playwright 헤드리스 스크레이퍼 서비스 URL

APKPIPE_NEXTCLOUD_URL

""

Nextcloud 서버 기본 URL

APKPIPE_NEXTCLOUD_TOKEN

""

Nextcloud WebDAV / API 인증 토큰

APKPIPE_NEXTCLOUD_OCC_COMMAND

""

OCC 스캔 명령 템플릿 ({path}가 치환됨)

APKPIPE_APPRISE_URL

""

Apprise API 알림 엔드포인트

APKPIPE_NTFY_TOPIC

""

푸시 알림용 Ntfy 토픽 식별자

⚡ 다운로드 엔진 및 리졸버

Tier 1: Real-Debrid API

APKPipe는 Real-Debrid의 REST API /unrestrict/link로 네이티브 인증을 수행합니다. 포럼 게시물에 미러(Rapidgator, Uploady, DropGalaxy, Mega, Katfile 등)가 포함된 경우, Real-Debrid는 링크를 언리스트릭트하여 고속 직접 CDN URL로 변환합니다.

Real-Debrid 구성 방법:

  1. real-debrid.com/apitoken에서 API 토큰을 생성합니다.

  2. 환경 변수 또는 웹 UI 설정 탭에서 APKPIPE_REAL_DEBRID_API_TOKEN=your_token을 설정합니다.

Tier 2: Headless JDownloader 2

Real-Debrid가 지원하지 않거나 특수 디크립터가 필요한 호스터의 경우, APKPipe는 헤드리스 JDownloader 2 인스턴스에 다음을 통해 연결합니다:

  • MyJDownloader 클라우드 API: 연결된 기기에 다운로드 패키지를 직접 제출합니다.

  • Linkgrabber 감시 디렉터리: 공유 폴더에 .crawljob 지침을 배치합니다.

Tier 3: Playwright Scraper Client

다운로드 랜딩 페이지가 JavaScript 리디렉션이나 클라우드 보호로 보호되는 경우, APKPipe는 페이지 평가 작업을 playwright-csharp-scraper(http://scraper:8080)에 전달합니다. 해당 서비스는 DOM을 평가하고 최종 직접 다운로드 미러를 추출합니다.

🔗 홈랩 통합

Nextcloud 저장소 및 OCC 자동 스캔

APKPipe는 파일을 정리하여 Nextcloud 저장소 디렉터리에 배치합니다:

/downloads/
├── Spotify/
│   └── Spotify v8.9.18.534 [Balatan].apk
└── Nova Launcher/
    └── Nova Launcher v8.0.18 [Prime].apk

Nextcloud 백그라운드 작업을 기다리지 않고 새로 다운로드된 파일을 Nextcloud에 알리기 위해 APKPipe는 occ files:scan을 실행합니다:

  • Docker Exec (권장): Docker 소켓 /var/run/docker.sock을 전달하고 다음을 설정합니다:

    APKPIPE_NEXTCLOUD_OCC_COMMAND=docker exec nextcloud-aio-nextcloud sudo -u www-data php /var/www/html/occ files:scan --path="{path}"
  • CLI / 호스트 실행: APKPipe가 호스트에서 직접 실행되는 경우 명령을 직접 호출합니다.

Apprise 및 Ntfy 푸시 알림

APKPipe는 다음 이벤트에 대해 구조화된 알림을 발송합니다:

  • 🔍 feed_matched: 워치리스트 규칙과 일치하는 릴리스가 발견됨.

  • ⬇️ download_started: 링크 언리스트릭트 및 스트리밍 다운로드 시작.

  • download_completed: 아카이브 추출 완료, 파일 배치 완료, OCC 스캔 완료.

  • download_failed: 오류 세부 정보 및 실패 원인.

지원되는 알림 엔드포인트:

  • Apprise API: http://apprise:8000/notify/apprise

  • Ntfy: https://ntfy.sh/your-topic 또는 자체 호스팅 Ntfy 서버.

🤖 Model Context Protocol(MCP) 서버

APKPipe는 네이티브 MCP 2024-11-05 서버를 제공하여 AI 어시스턴트(Claude Desktop, Cursor, Antigravity mcp-router)가 워치리스트를 관리하고, 피드를 검사하고, 폴링을 트리거하고, 릴리스를 자율적으로 다운로드할 수 있게 합니다.

사용 가능한 MCP 도구

도구 이름

설명

주요 매개변수

apkpipe__list_watchlist

워치리스트에서 모니터링 중인 앱 목록

enabled_only, category, query

apkpipe__add_to_watchlist

모니터링할 새 애플리케이션 추가

app_name, package_name, title_regex, min_version, releaser_whitelist

apkpipe__remove_from_watchlist

워치리스트 항목 비활성화 또는 삭제

watchlist_id, app_name, delete

apkpipe__search_feed

캐시된 또는 실시간 RSS 피드 검색

query, is_regex, feed_url, limit

apkpipe__trigger_poll

수동으로 피드 폴링 주기 실행

feed_id (선택 사항)

apkpipe__download_url

수동으로 다운로드 링크 제출

url, app_name, version, releaser

apkpipe__get_history

다운로드 기록 및 감사 로그 조회

limit, status, query

apkpipe__get_system_status

상태, 데이터베이스 통계, 저장소 사용량 조회

없음

AI 에이전트 구성

claude_desktop_config.json 또는 mcp-router에 APKPipe를 추가합니다:

{
  "mcpServers": {
    "apkpipe": {
      "command": "python",
      "args": ["-m", "apkpipe.mcp.server"],
      "env": {
        "APKPIPE_DATABASE_URL": "sqlite+aiosqlite:////data/apkpipe.db",
        "APKPIPE_DOWNLOAD_DIR": "/downloads"
      }
    }
  }
}

또는 Streamable HTTP / SSE 엔드포인트를 통해 연결합니다:

http://localhost:8429/mcp/sse

🌐 REST API 참조

대화형 OpenAPI / Swagger UI는 http://localhost:8429/docs에서 사용할 수 있습니다.

워치리스트 엔드포인트

  • GET /api/watchlist - 모든 워치리스트 항목을 선택적 검색/필터링과 함께 나열합니다.

  • POST /api/watchlist - 워치리스트에 새 애플리케이션을 추가합니다.

  • GET /api/watchlist/{id} - 특정 워치리스트 항목을 조회합니다.

  • PUT /api/watchlist/{id} - 워치리스트 항목을 업데이트합니다.

  • DELETE /api/watchlist/{id} - 워치리스트 항목을 제거합니다.

피드 소스 엔드포인트

  • GET /api/feeds - 구성된 모든 RSS 피드 소스를 나열합니다.

  • POST /api/feeds - 새 RSS 피드 소스를 추가합니다.

  • POST /api/feeds/{id}/poll - 특정 피드의 즉시 폴링을 트리거합니다.

  • POST /api/feeds/poll-all - 모든 활성 피드 소스에 대한 폴링을 트리거합니다.

다운로드 및 기록 엔드포인트

  • GET /api/downloads/queue - 다운로드 파이프라인의 활성 작업을 나열합니다.

  • GET /api/downloads/history - 완료, 실패 및 과거 다운로드를 나열합니다.

  • POST /api/downloads/manual - 직접/미러 URL에서 즉시 다운로드를 트리거합니다.

  • POST /api/downloads/{task_id}/retry - 실패한 다운로드 작업을 재시도합니다.

시스템 및 상태 엔드포인트

  • GET /health - 시스템 상태 확인 프로브.

  • GET /api/settings - 현재 애플리케이션 설정을 검색합니다.

  • POST /api/settings - 런타임 구성을 업데이트합니다.


🖥️ 웹 대시보드 UI

APKPipe에는 포트 8429에서 접근할 수 있는 내장 웹 UI가 포함되어 있습니다:

  • 대시보드 (/): 개요 메트릭, 활성 폴링 상태, 최근 다운로드 및 시스템 저장 공간.

  • 관심 목록 (/watchlist): 모니터링되는 애플리케이션을 추가, 편집, 필터링 및 제거합니다.

  • 피드 소스 (/feeds): RSS URL, 폴링 빈도를 관리하고 수동 동기화를 트리거합니다.

  • 기록 (/history): 완료된 다운로드, 실행 시간, 파일 크기 및 오류 추적에 대한 감사 기록.

  • 설정 (/settings): Real-Debrid 토큰, Nextcloud OCC 경로 및 알림 훅을 구성합니다.


🛠️ 개발 및 테스트

로컬 설정

# Clone repository
git clone https://github.com/spelech/apkpipe.git
cd apkpipe

# Create and activate Python virtual environment
python3 -m venv .venv
source .venv/bin/activate

# Install development dependencies and editable package
pip install -r requirements-dev.txt
pip install -e .

테스트 스위트 및 커버리지 실행

≥ 80% 라인 커버리지 적용:

# Run pytest with coverage report
pytest --cov=src/apkpipe --cov-report=term-missing tests/

로컬 서버 실행

# Start FastAPI application with live reloading
uvicorn apkpipe.main:app --host 0.0.0.0 --port 8000 --reload

📄 라이선스

이 프로젝트는 MIT 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE를 참조하세요.

-
license - not tested
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

  • MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.

  • Personal assistant MCP server with search, execute, packages, jobs, secrets, and integrations.

  • MCP server for Google Veo AI video generation

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/spelech/apkpipe'

If you have feedback or need assistance with the MCP directory API, please join our Discord server