拒绝折腾海报墙!Docker部署EcoHub,短剧、影视全采集,一键观影
熊猫在NAS上折腾过不少影音相关项目,有做海报墙的、有负责刮削的,也有专门负责播放的。但如果你的资源本身来自多个接口,时间久了还是会遇到一个很现实的问题:入口越来越多。
这个源搜不到换另一个,播放器里再塞几个订阅地址,能用是能用,就是怎么看都不像自己的影音库。
项目简介最近熊猫翻到一个开源项目EcoHub。它做的事情正好反过来,先把不同来源的数据统一采集、整理、归并,再做成一个完整的Web影视站,甚至还能继续给TVBox、影视仓等客户端提供接口。
EcoHub是干嘛的?
EcoHub官方给自己的定位是“自托管影视聚合系统”。
说简单点,它自己并不提供也不保存影视文件,需要用户配置相应的采集接口。EcoHub负责的是后面的整理工作,包括影片信息采集、多来源归并、播放线路聚合、搜索、分类、缓存以及Web展示。
这也是熊猫觉得它和普通“影视壳子”区别比较大的地方。
主站负责影片的基础数据、详情、分类以及搜索入口,附属站主要负责补充播放线路。跨站匹配时会优先利用豆瓣等身份信息,匹配不到再根据规范化后的片名处理,最后把同一部影片不同来源的线路归到一起。
首页EcoHub的Web目前已经包含首页、分类、搜索、影片详情以及播放页面,同时还有独立的登录页面和管理后台。
播放器播放器部分使用Artplayer和Hls.js。所以从产品形态来说,它更接近一个自己搭建的小型流媒体站,而不是单纯的接口管理工具。
短剧频道后台负责采集源、数据以及系统配置,前台则负责展示和播放。部署在NAS或服务器上以后,日常主要操作基本通过浏览器就能完成。
上面负责把各种来源的数据整理干净,下面再接网页、电视盒子或者App。这样思路一下就清晰多了,不用每个终端都重新折腾一遍数据源。
采集和前台分开
EcoHub在后台采集过程中会不断写入数据库,但前台并不会直接把这些正在变化的数据拿来展示。
采集后台等一轮采集完成以后,系统还会生成列表快照、筛选索引以及对应的读模型,前台、管理页面以及TVBox/MacCMS接口主要读取已经发布完成的结果。
采集计划后台有对应的采集管理和内容管理,针对采集你可以设置采集周期,例如今日、三天、七天等等,或者直接执行全量采集,而手动肯定是不方便的,于是在采集管理里还有个计划任务功能,通过它来实现每天定时进行采集,你只需关注前端的变化就行。
第一次把EcoHub部署好之后,打开首页很可能什么都没有。不是部署失败,而是还没有完成第一次全量采集。需要先进入后台配置采集源并执行采集,等数据处理和快照发布完成之后,影片才会正常显示。
内容管理内容管理则可以针对已经采集到的内容管理,一些不想展示的内容可以直接删除,针对家庭用户比较友好。
系统设置最后项目后台也支持多用户以及TG机器人通知,每天的采集任务完成可以通过机器人通知,需要触发那些内容也可以设置。
Docker部署
对于NAS用户来说,更重要的肯定还是Docker好不好装。
EcoHub在v2.0之后已经把原来的Web、Server双镜像收敛成一个All-in-One镜像,所有都放进同一个应用容器里面,除此之外还需要MySQL和Redis。
项目结构所以整个结构大概就是EcoHub+MySQL+Redis,这里就需要我们用到Compose来部署,会比较方便后续的升级和管理。
打开极空间的Docker,再点开Compose,官方原本的内容比较复杂,这里熊猫做了一下精简,直接复制就行。
services:
mysql:
container_name: Eco-mysql
image: mysql:8.4
restart: always
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD:-ecohub}
MYSQL_DATABASE: ${MYSQL_DBNAME:-eco}
MYSQL_USER: ${MYSQL_USER:-eco}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-ecohub}
volumes:
- ./data/mysql:/var/lib/mysql
networks:
- Eco-network
healthcheck:
test:
[
"CMD-SHELL",
"mysqladmin ping -h 127.0.0.1 -uroot -p$$MYSQL_ROOT_PASSWORD --silent",
]
interval: 10s
timeout: 5s
retries: 10
start_period: 30s
redis:
container_name: Eco-redis
image: redis:7.4-alpine
restart: always
environment:
REDIS_PASSWORD: ${REDIS_PASSWORD:-ecohub}
command: ["redis-server", "--requirepass", "${REDIS_PASSWORD:-ecohub}"]
volumes:
- ./data/redis:/data
networks:
- Eco-network
healthcheck:
test: ["CMD-SHELL", "redis-cli -a $${REDIS_PASSWORD} ping | grep PONG"]
interval: 10s
timeout: 5s
retries: 10
start_period: 10s
ecohub:
container_name: Eco-hub
image: ghcr.io/fe-spark/ecohub:latest
restart: always
environment:
PORT: ${SERVER_PORT:-8080}
JWT_SECRET: ${JWT_SECRET:-ecohub_2026!local@dev_secret$$001}
MYSQL_HOST: ${MYSQL_HOST:-mysql}
MYSQL_PORT: ${MYSQL_PORT:-3306}
MYSQL_USER: ${MYSQL_USER:-eco}
MYSQL_PASSWORD: ${MYSQL_PASSWORD:-ecohub}
MYSQL_DBNAME: ${MYSQL_DBNAME:-eco}
REDIS_HOST: ${REDIS_HOST:-redis}
REDIS_PORT: ${REDIS_PORT:-6379}
REDIS_PASSWORD: ${REDIS_PASSWORD:-ecohub}
REDIS_DB: ${REDIS_DB:-0}
# Telegram 专用代理(可选;通用代理 HTTPS_PROXY 等供采集等网络请求使用)
TG_PROXY: ${TG_PROXY:-}
HTTPS_PROXY: ${HTTPS_PROXY:-}
HTTP_PROXY: ${HTTP_PROXY:-}
ALL_PROXY: ${ALL_PROXY:-}
# 采集档位(可选;默认 auto 按容器 CPU 核数自动选档)
COLLECT_PROFILE: ${COLLECT_PROFILE:-auto}
ports:
- ${WEB_PUBLIC_PORT:-3000}:3000
- 0.0.0.0:${SERVER_PUBLIC_PORT:-18080}:${SERVER_PORT:-8080}
volumes:
- ./data/uploads:/app/static/upload
# 后台「立即升级」通过 socket 拉 latest 并重建本容器
- /var/run/docker.sock:/var/run/docker.sock
networks:
- Eco-network
extra_hosts:
- "host.docker.internal:host-gateway"
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
healthcheck:
test:
["CMD-SHELL", "wget -q -O /dev/null http://localhost:8080/api/health"]
interval: 10s
timeout: 5s
retries: 5
start_period: 30s
networks:
Eco-network:
driver: bridge
环境变量
除了Compose之外,我们还需要加载.env文件,极空间目前可以直接在创建Compose时选择添加,点击之后复制以下内容就行。
WEB_PORT=3000 # Web 前台与后台端口
SERVER_PORT=18080 # API 直连端口(可选,供 TVBox/播放器)
# ---- 业务配置(必填)----
JWT_SECRET='ecohub_2026!local@dev_secret$001'
# ---- MySQL(必填)----
MYSQL_ROOT_PASSWORD=ecohub
MYSQL_HOST=mysql
MYSQL_PORT=3306
MYSQL_USER=eco
MYSQL_PASSWORD=ecohub
MYSQL_DBNAME=eco
# ---- Redis(必填)----
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=ecohub
REDIS_DB=0
最后启动项目就行了,项目的默认用户名和密码均为admin,第一次进后台之后记得马上把密码改掉,这里要注意,后台地址并不是/admin,而是/manage。
远程访问同时极空间的远程访问,这时候就可以访问项目首页了,web端的容器名为Eco-hub,端口如果没有改过,那么就是默认的3000。
写在最后
EcoHub给熊猫的感觉并不是“又一个在线看电影网页”。单看网页播放器,其实现在类似项目已经不少了。
它真正有意思的地方,是把采集、整理、多线路归并、缓存、网页展示以及第三方播放器接口放到了一套系统里面。
特别是NAS用户,本来就有一台24小时开机的机器。如果自己手里刚好有多个合法可用的数据来源,与其在不同客户端之间反复切换,不如在中间加一层EcoHub,把这些东西先整理好。
以上便是本次分享的全部内容了。如果你觉得还算有趣或对你有所帮助,不妨点赞收藏,最后也希望能得到你的关注,咱们下期见!
结束图作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
