【项目分享】Panelio|多 Emby 用户管理面板,支持订阅、求片、播放统计与 PWA

各位佬好,给大家分享一下自己的项目:Panelio,一款支持多台 Emby 服务器的用户管理与运营面板。

维护 Emby 时,除了服务器和媒体库,日常还要处理账号绑定、套餐与到期管理、订单核对、求片、用户反馈等事情。

Panelio 将这些功能集中到一个 Web 面板中,提供用户端和管理后台,方便用户自助操作,也方便管理员统一维护。

主要功能

1. 多服务器管理

支持添加多台 Emby,集中管理各服务器的账号与线路。一个网站账号可以绑定多台 Emby,套餐、订阅、订单和播放数据保留对应的服务器归属。

2. 用户与订阅管理

查看用户的套餐、有效期、Emby 绑定和最近活跃情况,支持搜索、排序、筛选、分页及批量操作,并提供套餐购买、兑换码和到期管理功能。

3. 订单与钱包

集中管理套餐、支付订单、用户钱包、优惠券和邀请奖励,保留钱包账本与资金来源,方便核对余额变动。

4. 求片管理

支持搜索、提交、审核、处理和入库通知。用户可以查看求片进度,管理员集中处理请求,入库后可通过 Telegram 通知用户。

5. 播放监控与统计

查看用户观看时长排行、客户端与设备分布、热门电影和剧集,以及今日播放概览。支持按服务器筛选,并查看今天、最近 7 天和最近 30 天的数据。

6. 设备与操作记录

提供设备管理、黑名单和审计日志,方便查看记录、排查问题。

7. 运营仪表盘与工单

集中展示总用户数、本月收入、收入趋势、待处理工单、媒体请求和今日播放,进入后台就能看到整体情况及待办事项。

特色功能

  • 一个账号管理多服权益: 用户可以在同一个网站账号下查看不同服务器的订阅、到期时间和访问线路。
  • PWA 主屏幕访问: 支持添加到手机主屏幕,以独立窗口打开,方便随时查看账号和订阅。
  • 播放器一键导入: 支持 CapyPlayer、SenPlayer、Rex 等播放器,减少手动填写线路的步骤。
  • Telegram 通知与 Mini App: 可以通过 Telegram 访问面板并接收相关通知。
  • 私有化部署: 部署在自己的服务器上,支持 Docker Compose,也可以通过 1Panel 编排管理。

官网与演示

官网: https://panelio.org/

演示站: https://demo.fylera.org/

  • 演示账号:demo_admin
  • 演示密码:demo_admin

简单部署教程

部署前准备好 Docker、MySQL 数据库、部署域名和软件授权码,以下两种方式任选一种。

先创建数据目录:

mkdir -p /root/Panelio/instance /root/Panelio/logs /root/Panelio/backups

方式一:1Panel 编排部署

先在 /root/Panelio 目录下新建 .env 文件,填写:

TZ=Asia/Shanghai
SESSION_COOKIE_SECURE=false

# 软件授权码
LICENSE_CODE=你的软件授权码

# 至少32位随机字符串,可用 openssl rand -hex 32 生成
SECRET_KEY=填写随机字符串

# 首次启动管理员
INITIAL_ADMIN_USERNAME=admin
INITIAL_ADMIN_PASSWORD=填写强密码

# 后台入口路径
ADMIN_SECRET_PATH=admin-console

# GeoIP
GEOIP_CITY_DB=/app/instance/GeoLite2-City.mmdb
GEOIP_ONLINE_FALLBACK=true

# 面板主访问地址
PUBLIC_BASE_URL=https://panel.example.com

# MySQL数据库连接
DB_HOST=你的MySQL地址
DB_PORT=3306
DB_USER=你的数据库用户名
DB_PASSWORD=你的数据库密码
DB_NAME=你的数据库名称

然后进入 1Panel → 容器 → 编排 → 创建编排,选择编辑方式,名称填写 panelio,粘贴下面的配置并启动:

services:
  emby-request:
    image: gongjuren8856/panelio:latest
    container_name: Panelio
    restart: unless-stopped
    ports:
      - "5100:5000"
    env_file:
      - /root/Panelio/.env
    volumes:
      - /root/Panelio/instance:/app/instance
      - /root/Panelio/logs:/app/logs
      - /root/Panelio/backups:/app/backups
      - /etc/machine-id:/etc/machine-id:ro
    extra_hosts:
      - "host.docker.internal:host-gateway"
    networks:
      - emby-network

networks:
  emby-network:
    driver: bridge

注意先创建并填写 .env,再启动编排。

方式二:宝塔 / Docker Compose 部署

在 /root/Panelio 目录下创建 docker-compose.yml,填写:

services:
  emby-request:
    image: gongjuren8856/panelio:latest
    container_name: Panelio
    restart: unless-stopped
    ports:
      - "5100:5000"
    volumes:
      - /root/Panelio/instance:/app/instance
      - /root/Panelio/logs:/app/logs
      - /root/Panelio/backups:/app/backups
      - /etc/machine-id:/etc/machine-id:ro
    extra_hosts:
      - "host.docker.internal:host-gateway"
    env_file:
      - .env
    environment:
      - TZ=Asia/Shanghai
      - SESSION_COOKIE_SECURE=false
      - GEOIP_CITY_DB=/app/instance/GeoLite2-City.mmdb
      - GEOIP_ONLINE_FALLBACK=true
    networks:
      - emby-network

networks:
  emby-network:
    driver: bridge

然后在同一目录创建 .env,填写:

LICENSE_CODE=你的软件授权码
PUBLIC_BASE_URL=https://panel.example.com
SECRET_KEY=填写至少32位随机字符串
INITIAL_ADMIN_USERNAME=admin
INITIAL_ADMIN_PASSWORD=填写强密码
ADMIN_SECRET_PATH=admin-console

DB_HOST=你的MySQL地址
DB_PORT=3306
DB_USER=你的数据库用户名
DB_PASSWORD=你的数据库密码
DB_NAME=你的数据库名称

替换配置中的授权码、域名、密钥和数据库信息后,在宝塔终端或 SSH 中执行:

cd /root/Panelio
docker compose up -d

查看运行日志:

docker logs --tail 100 Panelio

部署后的设置

将部署域名反向代理到服务器的 5100 端口,配置 HTTPS,并确保 PUBLIC_BASE_URL 与最终访问地址一致。

正式使用 HTTPS 后,将 SESSION_COOKIE_SECURE 改为 true:1Panel 方式修改 .env,Docker Compose 方式修改 YAML 中的 environment,然后重新创建容器使配置生效。

数据库在宿主机上时,可按实际网络情况使用 host.docker.internal;数据库需允许 Panelio 容器连接。

诚邀各位佬体验

如果你想在自己的服务器上部署体验,可以私聊我,或在下方评论区留下准备部署的域名,我来为你开通体验授权。

欢迎大家体验后分享感受,无论是遇到的问题、功能建议,还是操作上不顺手的地方,都可以反馈给我,帮助 Panelio 继续完善。