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
This commit is contained in:
Sphera Bot
2026-08-03 22:13:53 +10:00
commit a7d1a0741f
11 changed files with 355 additions and 0 deletions
+67
View File
@@ -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"]
+49
View File
@@ -0,0 +1,49 @@
<p align="center">
<img src="icon.png" width="96" height="96" alt="v2rayA">
</p>
<h1 align="center">v2rayA</h1>
<p align="center">
Web GUI for Project V — <em>V2Ray · Xray · Shadowsocks · Trojan</em>
</p>
<p align="center">
<a href="https://github.com/v2rayA/v2rayA/releases"><img src="https://img.shields.io/badge/version-v2.4.9-blue?style=for-the-badge" alt="Version"></a>
<a href="https://hub.docker.com/r/mzz2017/v2raya"><img src="https://img.shields.io/badge/docker-mzz2017/v2raya-2496ED?style=for-the-badge&logo=docker" alt="Docker"></a>
</p>
---
## 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` |
---
<p align="center">
Part of <a href="../"><b>Sphera Community App Store</b></a>
</p>
View File
+31
View File
@@ -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
Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

+35
View File
@@ -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: []