commit a7d1a0741f386ed5962cbd9eb5fa2bf06528363f Author: Sphera Bot Date: Mon Aug 3 21:18:04 2026 +1000 Polish store and v2rayA app for release - Redesign store README as a minimal storefront - Refine app README and remove technical clutter - Update Sphera icon with refined vector styling - Use original v2rayA app icon - Use raw GitHub URL for v2rayA icon per Umbrel Community Store spec - Add custom v2rayA image build for UmbrelOS nf_tables iptables diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..af40d0c --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,56 @@ +name: Build and publish v2rayA image + +on: + push: + branches: [master] + paths: + - 'sphera-v2raya/Dockerfile' + - '.github/workflows/docker.yml' + workflow_dispatch: + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository_owner }}/sphera-v2raya + +jobs: + build: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=raw,value=v2.4.9-2 + + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: ./sphera-v2raya + file: ./sphera-v2raya/Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d7e7511 --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +# OS +.DS_Store +Thumbs.db + +# IDE +.idea/ +.vscode/ +*.iml + +# Umbrel runtime data (should not be committed) +**/data/* +!**/.gitkeep diff --git a/README.md b/README.md new file mode 100644 index 0000000..2323962 --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +

+ Sphera +

+ +

Sphera

+ +

+ Community App Store for UmbrelOS +

+ +

+ Umbrel Community Store + 1 app +

+ +

+ Curated tools that extend what your personal server can do. +

+ +--- + +## Install + +In UmbrelOS go to **App Store → Community App Stores → Add** and paste: + +``` +https://github.com/cheviiot/Sphera +``` + +--- + +## Apps + +| | Name | ID | Description | +|:---:|---|---|---| +| v2rayA | **v2rayA** | `sphera-v2raya` | Web GUI client for V2Ray / Xray. Transparent proxy via host networking. | + +--- + +

+ Made for the Umbrel community. +

\ No newline at end of file diff --git a/sphera-icon.svg b/sphera-icon.svg new file mode 100644 index 0000000..9c7e3c5 --- /dev/null +++ b/sphera-icon.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sphera-v2raya/Dockerfile b/sphera-v2raya/Dockerfile new file mode 100644 index 0000000..d8b3c15 --- /dev/null +++ b/sphera-v2raya/Dockerfile @@ -0,0 +1,67 @@ +FROM mzz2017/v2raya:v2.4.9@sha256:47f9acf99b23f19d804ab15303e8a7df7f66913d14c5ce0b39936d036dbb8500 + +USER root + +# v2rayA inside Docker hard-codes "iptables-legacy" and "ip6tables-legacy". +# UmbrelOS ships iptables 1.8.x with nf_tables backend, and v2rayA's redirect +# mode emits REDIRECT rules without a protocol (-p), which both backends reject. +# Replace the legacy binaries with small wrappers that forward to the modern +# iptables and patch the problematic REDIRECT rule on the fly. +RUN set -eux; \ + rm -f /sbin/iptables-legacy /usr/sbin/iptables-legacy \ + /sbin/ip6tables-legacy /usr/sbin/ip6tables-legacy; \ + printf '%s\n' \ + '#!/bin/sh' \ + 'has_redirect=0' \ + 'has_proto=0' \ + 'for arg in "$@"; do' \ + ' case "$arg" in' \ + ' -j) next_is_target=1 ;;' \ + ' REDIRECT) if [ "$next_is_target" = 1 ]; then has_redirect=1; fi; next_is_target=0 ;;' \ + ' -p) has_proto=1 ;;' \ + ' esac' \ + 'done' \ + 'if [ "$has_redirect" = 1 ] && [ "$has_proto" = 0 ]; then' \ + ' new_args=""' \ + ' inserted=0' \ + ' for arg in "$@"; do' \ + ' if [ "$inserted" = 0 ] && [ "$arg" = "-j" ]; then' \ + ' new_args="$new_args -p tcp"' \ + ' inserted=1' \ + ' fi' \ + ' new_args="$new_args $arg"' \ + ' done' \ + ' set -- $new_args' \ + 'fi' \ + 'exec iptables "$@"' \ + > /sbin/iptables-legacy; \ + printf '%s\n' \ + '#!/bin/sh' \ + 'has_redirect=0' \ + 'has_proto=0' \ + 'for arg in "$@"; do' \ + ' case "$arg" in' \ + ' -j) next_is_target=1 ;;' \ + ' REDIRECT) if [ "$next_is_target" = 1 ]; then has_redirect=1; fi; next_is_target=0 ;;' \ + ' -p) has_proto=1 ;;' \ + ' esac' \ + 'done' \ + 'if [ "$has_redirect" = 1 ] && [ "$has_proto" = 0 ]; then' \ + ' new_args=""' \ + ' inserted=0' \ + ' for arg in "$@"; do' \ + ' if [ "$inserted" = 0 ] && [ "$arg" = "-j" ]; then' \ + ' new_args="$new_args -p tcp"' \ + ' inserted=1' \ + ' fi' \ + ' new_args="$new_args $arg"' \ + ' done' \ + ' set -- $new_args' \ + 'fi' \ + 'exec ip6tables "$@"' \ + > /sbin/ip6tables-legacy; \ + chmod +x /sbin/iptables-legacy /sbin/ip6tables-legacy; \ + ln -s /sbin/iptables-legacy /usr/sbin/iptables-legacy 2>/dev/null || true; \ + ln -s /sbin/ip6tables-legacy /usr/sbin/ip6tables-legacy 2>/dev/null || true + +ENTRYPOINT ["v2raya"] diff --git a/sphera-v2raya/README.md b/sphera-v2raya/README.md new file mode 100644 index 0000000..67f6edd --- /dev/null +++ b/sphera-v2raya/README.md @@ -0,0 +1,49 @@ +

+ v2rayA +

+ +

v2rayA

+ +

+ Web GUI for Project V — V2Ray · Xray · Shadowsocks · Trojan +

+ +

+ Version + Docker +

+ +--- + +## Features + +- **Transparent proxy** out of the box (host network mode) +- **Web GUI** for servers, subscriptions and routing rules +- **Multi-protocol**: VMess, VLESS, Shadowsocks, SSR, Trojan, Tuic, Juicity +- **SOCKS5** (`10808`) and **HTTP** (`10809`) proxies exposed on the host + +--- + +## First run + +1. Open v2rayA from Umbrel Home. +2. Create an admin account on first login. +3. Add servers via **Subscriptions** or **Servers → Import**. +4. Select a server and click **Connect**. +5. Enable **Transparent Proxy / System Proxy** if needed. + +--- + +## Ports + +| Service | Port | +|---|---| +| Web GUI | `2017` | +| SOCKS5 | `10808` | +| HTTP | `10809` | + +--- + +

+ Part of Sphera Community App Store +

\ No newline at end of file diff --git a/sphera-v2raya/data/.gitkeep b/sphera-v2raya/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/sphera-v2raya/docker-compose.yml b/sphera-v2raya/docker-compose.yml new file mode 100644 index 0000000..4ea3245 --- /dev/null +++ b/sphera-v2raya/docker-compose.yml @@ -0,0 +1,31 @@ +version: "3.7" + +services: + app_proxy: + environment: + # v2rayA работает в host-network; app_proxy достукивается через хост + APP_HOST: host.docker.internal + APP_PORT: 20177 + # v2rayA имеет собственную авторизацию; двойная auth ломает UX + PROXY_AUTH_ADD: "false" + extra_hosts: + - "host.docker.internal:host-gateway" + + server: + image: ghcr.io/cheviiot/sphera-v2raya:v2.4.9-2@sha256:518c168f67e7c588d7eb7e860a18fb7ddeb47c8f0564309ba8daca35dc056024 + network_mode: host + restart: on-failure + volumes: + # Персистентные данные v2rayA (конфигурация, подписки) + - ${APP_DATA_DIR}/data:/etc/v2raya + environment: + # Слушаем на хосте, но на порту 20177, чтобы не конфликтовать с app_proxy + V2RAYA_ADDRESS: "0.0.0.0:20177" + # Подробное логирование для отладки + V2RAYA_VERBOSE: "true" + cap_add: + # Необходимо для управления iptables и создания VPN-интерфейсов + - NET_ADMIN + - SYS_MODULE + devices: + - /dev/net/tun diff --git a/sphera-v2raya/icon.png b/sphera-v2raya/icon.png new file mode 100644 index 0000000..202a363 Binary files /dev/null and b/sphera-v2raya/icon.png differ diff --git a/sphera-v2raya/umbrel-app.yml b/sphera-v2raya/umbrel-app.yml new file mode 100644 index 0000000..4626f72 --- /dev/null +++ b/sphera-v2raya/umbrel-app.yml @@ -0,0 +1,35 @@ +manifestVersion: 1 +id: sphera-v2raya +category: networking +name: v2rayA +version: "v2.4.9-2" +tagline: Web GUI клиент для V2Ray, Xray, Shadowsocks, SSR и Trojan +description: >- + v2rayA — это веб-интерфейс для управления прокси-клиентами Project V. + Поддерживает протоколы V2Ray, Xray, Shadowsocks, SSR, Trojan и PingTunnel. + + После установки откройте приложение через Umbrel и настройте подключение + через веб-GUI. Transparent proxy и TUN работают автоматически на уровне + хоста благодаря host-network режиму. + + По умолчанию SOCKS5-прокси доступен на порту 10808, HTTP-прокси на 10809. + +releaseNotes: >- + Исправлен запуск transparent proxy на UmbrelOS: кастомный образ + патчит iptables-legacy команды v2rayA для совместимости с nf_tables. + +developer: v2rayA +website: https://v2raya.org +submitter: Sphera +submission: https://github.com/cheviiot/Sphera +repo: https://github.com/v2rayA/v2rayA +support: https://github.com/v2rayA/v2rayA/issues + +port: 2017 +gallery: [] +path: "" +icon: https://raw.githubusercontent.com/cheviiot/Sphera/master/sphera-v2raya/icon.png + +defaultUsername: "" +defaultPassword: "" +dependencies: [] diff --git a/umbrel-app-store.yml b/umbrel-app-store.yml new file mode 100644 index 0000000..8b8ae0c --- /dev/null +++ b/umbrel-app-store.yml @@ -0,0 +1,2 @@ +id: sphera +name: Sphera