feat: add feishin and pingap

Add Feishin and Pingap app definitions with source evidence, README guidance, strict adapter validation, env closure checks, and moelin/1panel:v2 smoke coverage.
This commit is contained in:
okxlin
2026-06-27 19:56:02 +08:00
committed by GitHub
parent d781a030a1
commit b60d5dbf4d
24 changed files with 542 additions and 0 deletions
+57
View File
@@ -0,0 +1,57 @@
# Feishin
## 产品介绍
Feishin 是现代化自托管音乐服务器 Web 播放器,可连接 Navidrome、Jellyfin 或 OpenSubsonic 兼容服务进行音乐浏览与播放。
## 主要功能
- 提供现代化 Web 音乐播放界面
- 支持 Navidrome、Jellyfin 和 OpenSubsonic 兼容服务器
- 支持通过环境变量预置服务器地址,并默认关闭 Umami analytics
## 访问说明
安装后通过 `http://<服务器 IP>:15078` 访问,实际端口以安装表单中的 `PANEL_APP_PORT_HTTP` 为准。
## Introduction
Feishin is a modern web music player for self-hosted Navidrome, Jellyfin and OpenSubsonic-compatible music servers.
## Features
- Modern web music player interface
- Supports Navidrome, Jellyfin and OpenSubsonic-compatible servers
- Optional server preconfiguration through environment variables, with Umami analytics disabled by default
## 部署说明
- 本应用使用官方 GitHub Container Registry 镜像 `ghcr.io/jeffvli/feishin` 部署。
- Feishin 是 Web 播放器,不自带音乐服务器;请先准备 Navidrome、Jellyfin 或 OpenSubsonic 兼容服务。
- 应用分类:多媒体。
- 支持架构:amd64、arm64。
- 可选版本:`latest`
## 端口
| 变量 | 说明 | 默认值 | 必填 |
| --- | --- | --- | --- |
| PANEL_APP_PORT_HTTP | Feishin Web 访问端口 | 15078 | 是 |
## 数据持久化
Feishin Docker Web 版本默认不需要挂载服务端数据目录;播放服务器和用户数据由你连接的 Navidrome、Jellyfin 或 OpenSubsonic 服务保存。
## 参数说明
| 变量 | 说明 | 默认值 | 必填 |
| --- | --- | --- | --- |
| ANALYTICS_DISABLED | 是否禁用 Umami analytics | true | 是 |
| SERVER_NAME | 预置音乐服务器名称 | 空 | 否 |
| SERVER_TYPE | 预置音乐服务器类型:jellyfin、navidrome、subsonic | 空 | 否 |
| SERVER_URL | 预置音乐服务器地址 | 空 | 否 |
| SERVER_LOCK | 是否锁定服务器配置 | false | 是 |
| REMOTE_URL | 单独的公网音乐服务器地址 | 空 | 否 |
| LEGACY_AUTHENTICATION | Subsonic/OpenSubsonic 传统认证开关 | false | 是 |
| TZ | 容器时区 | Asia/Shanghai | 是 |
## 使用说明
- 如果设置 `SERVER_LOCK=true`,请同时填写 `SERVER_NAME``SERVER_TYPE``SERVER_URL`
- 若音乐服务器在内网,请确认 Feishin 容器可以访问该地址。
- 如对公网开放访问,请同步检查防火墙、安全组、反向代理和 HTTPS 配置。
## 参考资料
- 项目仓库: <https://github.com/jeffvli/feishin>
- Docker 使用说明: <https://github.com/jeffvli/feishin#web-and-docker>
- Docker Compose 示例: <https://github.com/jeffvli/feishin#docker-compose>
+30
View File
@@ -0,0 +1,30 @@
name: Feishin
tags:
- Media
title: 现代化自托管音乐服务器 Web 播放器
description: 现代化自托管音乐服务器 Web 播放器
additionalProperties:
key: feishin
name: Feishin
tags:
- Media
shortDescZh: 现代化自托管音乐服务器 Web 播放器
shortDescEn: A modern web player for self-hosted music servers
description:
en: "A modern web music player for Navidrome, Jellyfin and OpenSubsonic-compatible servers."
zh: "面向 Navidrome、Jellyfin 和 OpenSubsonic 兼容服务器的现代化 Web 音乐播放器。"
zh-Hant: "面向 Navidrome、Jellyfin 和 OpenSubsonic 相容伺服器的現代化 Web 音樂播放器。"
ja: "Navidrome、Jellyfin、OpenSubsonic 互換サーバー向けのモダンな Web 音楽プレーヤーです。"
ko: "Navidrome, Jellyfin 및 OpenSubsonic 호환 서버를 위한 최신 웹 음악 플레이어입니다."
ru: "Современный веб-плеер для музыкальных серверов Navidrome, Jellyfin и совместимых с OpenSubsonic."
ms: "Pemain muzik web moden untuk pelayan Navidrome, Jellyfin dan serasi OpenSubsonic."
pt-br: "Player web moderno para servidores de musica Navidrome, Jellyfin e compativeis com OpenSubsonic."
type: tool
crossVersionUpdate: true
limit: 0
website: https://feishin.vercel.app
github: https://github.com/jeffvli/feishin
document: https://github.com/jeffvli/feishin#web-and-docker
architectures:
- amd64
- arm64
+10
View File
@@ -0,0 +1,10 @@
CONTAINER_NAME=feishin
PANEL_APP_PORT_HTTP=15078
TZ=Asia/Shanghai
ANALYTICS_DISABLED=true
SERVER_NAME=
SERVER_TYPE=
SERVER_URL=
SERVER_LOCK=false
REMOTE_URL=
LEGACY_AUTHENTICATION=false
+171
View File
@@ -0,0 +1,171 @@
additionalProperties:
formFields:
- default: 15078
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Port
labelZh: 端口
label:
en: Port
zh: 端口
zh-Hant:
ja: ポート
ko: 포트
ru: Порт
ms: Port
pt-br: Porta
required: true
rule: paramPort
type: number
- default: Asia/Shanghai
edit: true
envKey: TZ
labelEn: Timezone
labelZh: 时区
label:
en: Timezone
zh: 时区
zh-Hant: 時區
ja: タイムゾーン
ko: 시간대
ru: Часовой пояс
ms: Zon waktu
pt-br: Fuso horário
required: true
type: text
- default: "true"
edit: true
envKey: ANALYTICS_DISABLED
labelEn: Disable Analytics
labelZh: 禁用统计分析
label:
en: Disable Analytics
zh: 禁用统计分析
zh-Hant: 停用統計分析
ja: 分析を無効化
ko: 분석 비활성화
ru: Отключить аналитику
ms: Lumpuhkan analitik
pt-br: Desativar analiticos
required: true
type: select
values:
- label: "true"
value: "true"
- label: "false"
value: "false"
- default: ""
edit: true
envKey: SERVER_NAME
labelEn: Server Name
labelZh: 服务器名称
label:
en: Server Name
zh: 服务器名称
zh-Hant: 伺服器名稱
ja: サーバー名
ko: 서버 이름
ru: Имя сервера
ms: Nama pelayan
pt-br: Nome do servidor
required: false
type: text
- default: ""
edit: true
envKey: SERVER_TYPE
labelEn: Server Type
labelZh: 服务器类型
label:
en: Server Type
zh: 服务器类型
zh-Hant: 伺服器類型
ja: サーバー種別
ko: 서버 유형
ru: Тип сервера
ms: Jenis pelayan
pt-br: Tipo de servidor
required: false
type: select
values:
- label: ""
value: ""
- label: jellyfin
value: jellyfin
- label: navidrome
value: navidrome
- label: subsonic
value: subsonic
- default: ""
edit: true
envKey: SERVER_URL
labelEn: Server URL
labelZh: 服务器 URL
label:
en: Server URL
zh: 服务器 URL
zh-Hant: 伺服器 URL
ja: サーバー URL
ko: 서버 URL
ru: URL сервера
ms: URL pelayan
pt-br: URL do servidor
required: false
type: text
- default: "false"
edit: true
envKey: SERVER_LOCK
labelEn: Lock Server Settings
labelZh: 锁定服务器设置
label:
en: Lock Server Settings
zh: 锁定服务器设置
zh-Hant: 鎖定伺服器設定
ja: サーバー設定をロック
ko: 서버 설정 잠금
ru: Заблокировать настройки сервера
ms: Kunci tetapan pelayan
pt-br: Bloquear configuracoes do servidor
required: true
type: select
values:
- label: "false"
value: "false"
- label: "true"
value: "true"
- default: ""
edit: true
envKey: REMOTE_URL
labelEn: Public Server URL
labelZh: 公网服务器 URL
label:
en: Public Server URL
zh: 公网服务器 URL
zh-Hant: 公網伺服器 URL
ja: 公開サーバー URL
ko: 공개 서버 URL
ru: Публичный URL сервера
ms: URL pelayan awam
pt-br: URL publico do servidor
required: false
type: text
- default: "false"
edit: true
envKey: LEGACY_AUTHENTICATION
labelEn: Legacy Authentication
labelZh: 传统认证
label:
en: Legacy Authentication
zh: 传统认证
zh-Hant: 傳統認證
ja: レガシー認証
ko: 레거시 인증
ru: Устаревшая аутентификация
ms: Pengesahan legasi
pt-br: Autenticacao legada
required: true
type: select
values:
- label: "false"
value: "false"
- label: "true"
value: "true"
View File
+24
View File
@@ -0,0 +1,24 @@
services:
feishin:
image: "ghcr.io/jeffvli/feishin:latest"
container_name: ${CONTAINER_NAME}
restart: always
networks:
- 1panel-network
ports:
- "${PANEL_APP_PORT_HTTP}:9180"
environment:
- TZ=${TZ}
- ANALYTICS_DISABLED=${ANALYTICS_DISABLED}
- SERVER_NAME=${SERVER_NAME}
- SERVER_TYPE=${SERVER_TYPE}
- SERVER_URL=${SERVER_URL}
- SERVER_LOCK=${SERVER_LOCK}
- REMOTE_URL=${REMOTE_URL}
- LEGACY_AUTHENTICATION=${LEGACY_AUTHENTICATION}
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true
+3
View File
@@ -0,0 +1,3 @@
#!/usr/bin/env bash
set -euo pipefail
exit 0
+2
View File
@@ -0,0 +1,2 @@
#!/bin/bash
docker-compose down --volumes
+3
View File
@@ -0,0 +1,3 @@
#!/usr/bin/env bash
set -euo pipefail
exit 0
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

+5
View File
@@ -0,0 +1,5 @@
{
"repository": "https://github.com/jeffvli/feishin",
"dockerDocs": "https://github.com/jeffvli/feishin#web-and-docker",
"composeFile": "https://github.com/jeffvli/feishin#docker-compose"
}
+58
View File
@@ -0,0 +1,58 @@
# Pingap
## 产品介绍
Pingap 是基于 Cloudflare Pingora 的高性能反向代理和应用网关,支持 TOML 配置、热更新、Web 管理界面和多种网关插件。
## 主要功能
- 提供 HTTP/HTTPS 反向代理和应用网关能力
- 支持配置热更新,适合容器化部署
- 内置 Web 管理界面,可管理路由、上游和插件配置
## 访问说明
安装后通过 `http://<服务器 IP>:15079/pingap` 访问管理界面,实际 HTTP 端口以安装表单中的 `PANEL_APP_PORT_HTTP` 为准。
## Introduction
Pingap is a high-performance reverse proxy and application gateway powered by Cloudflare Pingora, with hot reload, TOML configuration and a web admin interface.
## Features
- HTTP/HTTPS reverse proxy and application gateway
- Hot reload for containerized configuration changes
- Web admin interface for routes, upstreams and plugins
## 部署说明
- 本应用使用官方 Docker 镜像 `vicanso/pingap` 部署。
- 默认按官方 Compose 示例启用 `pingap --autoreload`
- 应用分类:工具。
- 支持架构:amd64、arm64。
- 可选版本:`latest`
## 端口
| 变量 | 说明 | 默认值 | 必填 |
| --- | --- | --- | --- |
| PANEL_APP_PORT_HTTP | HTTP 与管理界面端口,容器内映射到 `80` | 15079 | 是 |
| PANEL_APP_PORT_HTTPS | HTTPS 代理端口,容器内映射到 `443` | 15443 | 是 |
## 数据持久化
| 变量 | 说明 | 默认值 | 必填 |
| --- | --- | --- | --- |
| APP_DATA_DIR | Pingap 配置和运行数据目录,挂载到容器 `/opt/pingap` | ./data | 是 |
升级、迁移或批量调整代理配置前,请先在 1Panel 中备份 `APP_DATA_DIR`
## 参数说明
| 变量 | 说明 | 默认值 | 必填 |
| --- | --- | --- | --- |
| PINGAP_ADMIN_USER | Web 管理界面用户名 | pingap | 是 |
| PINGAP_ADMIN_PASSWORD | Web 管理界面密码,安装时随机生成 | 随机生成 | 是 |
| TZ | 容器时区 | Asia/Shanghai | 是 |
## 使用说明
- 管理界面路径固定为 `/pingap`,请使用安装时生成的管理员用户名和密码登录。
- 这是反向代理/应用网关类应用,对公网开放前请先配置强密码、访问控制、防火墙、安全组、TLS 证书和路由规则。
- HTTPS 端口默认仅做端口映射;请在 Pingap 内正确配置证书、SNI 和路由后再对外开放。
- 若代理内网服务,请确认 Pingap 容器与目标服务网络可达。
## 参考资料
- 项目仓库: <https://github.com/vicanso/pingap>
- Docker Compose 快速开始: <https://github.com/vicanso/pingap#getting-started>
- 官方文档: <https://pingap.io/pingap-en/docs/getting_started>
+30
View File
@@ -0,0 +1,30 @@
name: Pingap
tags:
- Tool
title: 基于 Pingora 的高性能反向代理和应用网关
description: 基于 Pingora 的高性能反向代理和应用网关
additionalProperties:
key: pingap
name: Pingap
tags:
- Tool
shortDescZh: 基于 Pingora 的高性能反向代理和应用网关
shortDescEn: A high-performance reverse proxy and application gateway powered by Pingora
description:
en: "A high-performance reverse proxy and application gateway powered by Cloudflare Pingora, with hot reload and a web admin interface."
zh: "基于 Cloudflare Pingora 的高性能反向代理和应用网关,支持热更新和 Web 管理界面。"
zh-Hant: "基於 Cloudflare Pingora 的高效能反向代理和應用閘道,支援熱更新和 Web 管理介面。"
ja: "Cloudflare Pingora を利用した高性能リバースプロキシ兼アプリケーションゲートウェイです。ホットリロードと Web 管理画面に対応します。"
ko: "Cloudflare Pingora 기반의 고성능 리버스 프록시 및 애플리케이션 게이트웨이로, 핫 리로드와 웹 관리 UI를 지원합니다."
ru: "Высокопроизводительный обратный прокси и шлюз приложений на Cloudflare Pingora с горячей перезагрузкой и веб-панелью управления."
ms: "Proksi songsang dan gerbang aplikasi berprestasi tinggi berasaskan Cloudflare Pingora dengan muat semula panas dan UI pentadbiran web."
pt-br: "Proxy reverso e gateway de aplicacao de alto desempenho baseado no Cloudflare Pingora, com hot reload e interface web de administracao."
type: tool
crossVersionUpdate: true
limit: 0
website: https://pingap.io
github: https://github.com/vicanso/pingap
document: https://pingap.io/pingap-en/docs/getting_started
architectures:
- amd64
- arm64
+7
View File
@@ -0,0 +1,7 @@
CONTAINER_NAME=pingap
PANEL_APP_PORT_HTTP=15079
PANEL_APP_PORT_HTTPS=15443
TZ=Asia/Shanghai
APP_DATA_DIR=./data
PINGAP_ADMIN_USER=pingap
PINGAP_ADMIN_PASSWORD=change-me-before-install
+101
View File
@@ -0,0 +1,101 @@
additionalProperties:
formFields:
- default: 15079
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: HTTP Port
labelZh: HTTP 端口
label:
en: HTTP Port
zh: HTTP 端口
zh-Hant: HTTP 埠
ja: HTTP ポート
ko: HTTP 포트
ru: HTTP-порт
ms: Port HTTP
pt-br: Porta HTTP
required: true
rule: paramPort
type: number
- default: 15443
edit: true
envKey: PANEL_APP_PORT_HTTPS
labelEn: HTTPS Port
labelZh: HTTPS 端口
label:
en: HTTPS Port
zh: HTTPS 端口
zh-Hant: HTTPS 埠
ja: HTTPS ポート
ko: HTTPS 포트
ru: HTTPS-порт
ms: Port HTTPS
pt-br: Porta HTTPS
required: true
rule: paramPort
type: number
- default: Asia/Shanghai
edit: true
envKey: TZ
labelEn: Timezone
labelZh: 时区
label:
en: Timezone
zh: 时区
zh-Hant: 時區
ja: タイムゾーン
ko: 시간대
ru: Часовой пояс
ms: Zon waktu
pt-br: Fuso horário
required: true
type: text
- default: ./data
edit: true
envKey: APP_DATA_DIR
labelEn: Data Directory
labelZh: 数据目录
label:
en: Data Directory
zh: 数据目录
zh-Hant: 資料目錄
ja: データディレクトリ
ko: 데이터 디렉터리
ru: Каталог данных
ms: Direktori data
pt-br: Diretório de dados
required: true
type: text
- default: pingap
edit: true
envKey: PINGAP_ADMIN_USER
labelEn: Admin Username
labelZh: 管理员用户名
label:
en: Admin Username
zh: 管理员用户名
zh-Hant: 管理員使用者名稱
ja: 管理者ユーザー名
ko: 관리자 사용자 이름
ru: Имя администратора
ms: Nama pengguna pentadbir
pt-br: Usuario administrador
required: true
type: text
- edit: true
envKey: PINGAP_ADMIN_PASSWORD
labelEn: Admin Password
labelZh: 管理员密码
label:
en: Admin Password
zh: 管理员密码
zh-Hant: 管理員密碼
ja: 管理者パスワード
ko: 관리자 비밀번호
ru: Пароль администратора
ms: Kata laluan pentadbir
pt-br: Senha do administrador
random: true
required: true
rule: paramComplexity
type: password
View File
+27
View File
@@ -0,0 +1,27 @@
services:
pingap:
image: "vicanso/pingap:latest"
container_name: ${CONTAINER_NAME}
restart: always
networks:
- 1panel-network
ports:
- "${PANEL_APP_PORT_HTTP}:80"
- "${PANEL_APP_PORT_HTTPS}:443"
environment:
- TZ=${TZ}
- PINGAP_CONF=/opt/pingap/conf
- PINGAP_ADMIN_ADDR=0.0.0.0:80/pingap
- PINGAP_ADMIN_USER=${PINGAP_ADMIN_USER}
- PINGAP_ADMIN_PASSWORD=${PINGAP_ADMIN_PASSWORD}
command:
- pingap
- --autoreload
volumes:
- "${APP_DATA_DIR}:/opt/pingap"
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true
View File
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
set -euo pipefail
DATA_DIR="${APP_DATA_DIR:-./data}"
mkdir -p "$DATA_DIR"
+2
View File
@@ -0,0 +1,2 @@
#!/bin/bash
docker-compose down --volumes
+3
View File
@@ -0,0 +1,3 @@
#!/usr/bin/env bash
set -euo pipefail
exit 0
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

+5
View File
@@ -0,0 +1,5 @@
{
"repository": "https://github.com/vicanso/pingap",
"dockerDocs": "https://github.com/vicanso/pingap#getting-started",
"composeFile": "https://github.com/vicanso/pingap#getting-started"
}