手机搭建emby服务
分三部分搭建,第一步安装openlist并生成本地strm文件;第二步安装emby服务并添加媒体库;第三部分内外穿透实现公网访问。
步骤一
1. Termux中删除alist
1.1 如果Termux中原安装了alist先删除
1.2 停止 AList 后台进程
pkill -9 alist1.3 查找并删除文件
通常文件夹名就叫 alist。你可以输入 ls 查看当前目录下的文件夹。
rm -rf ~/alist你可以现在去 Termux 里执行这几条命令试试。
如果在执行 netstat 或者 pgrep 时依然有输出,说明还有残留进程。
1.4 检查是否还有残留的快捷命令:
which alist- 如果返回空行(直接跳到下一行),说明很干净。
- 如果返回了路径(比如 /data/.../bin/alist),请执行 rm 加上那个路径,例如:rm /data/data/com.termux/files/usr/bin/alist。
- 最后确认:
输入 ls 查看当前目录,确认没有 alist 相关的文件夹了。
1.5 输入which alist后输出:/data/data/com.termux/files/usr/bin/which: this version of which' is deprecated; use command -v' in scripts instead.
/data/data/com.termux/files/usr/bin/alist
看来 AList 还没“搬家”干净,它现在正躲在你的系统指令路径里。
那个输出告诉你了两件事:
AList 在哪: 它位于 /data/data/com.termux/files/usr/bin/alist。
小插曲: which 命令在 Termux 里有点老了,建议以后用 command -v,但这不影响咱们现在的操作。
1.6 继续清理
删除系统路径下的 AList:
rm /data/data/com.termux/files/usr/bin/alist再次确认:
command -v alist如果这次没有任何输出(直接跳回新的一行),那么恭喜你,AList 已经从你的 Termux 里彻底消失了!
2. Termux中安装openlist
2.1 你想把 OpenList 安装在哪个文件夹里? 通常建议建一个专门的文件夹,方便以后管理。你可以直接运行下面这串命令来创建目录并进入:
mkdir -p ~/openlist && cd ~/openlist2.2 更新并升级所有软件包
pkg update && pkg upgrade -y2.3 使用curl下载(换个更稳的方法)
curl -L -O https://github.com/OpenListTeam/OpenList/releases/latest/download/openlist-android-arm64.tar.gz2.4 解压并运行
tar -zxvf openlist-android-arm64.tar.gz && chmod +x openlist2.5 如果下载实在太慢可直接浏览器下载
2.5.1 掐断当前下载:
在手机键盘上按下 Ctrl(Termux 工具栏上的按钮)然后按 C。你会看到光标回到了 ~/openlist $。
2.5.2 清理残余:
为了防止文件损坏,先把刚才下载了一半的文件删掉:
rm openlist-android-arm64.tar.gz2.5.3 点击这个链接直接下载到手机:https://github.com/OpenListTeam/OpenList/releases/latest/download/openlist-android-arm64.tar.gz(或者把这个链接贴进你的手机浏览器)。
2.5.4 下载完成后,在 Termux 里输入以下命令把文件从手机下载目录移动过来:
termux-setup-storage
# 弹出权限请求时点“允许”
cp /sdcard/Download/openlist-android-arm64.tar.gz ~/openlist/2.5.5 验证下载是否成功
不管是哪个方法,下载完后输入:
ls -lh2.5.6 解压文件
tar -zxvf openlist-android-arm64.tar.gz2.5.7 授予运行权限
chmod +x openlist2.5.8 启动 OpenList 服务器
./openlist server2.5.9 获取管理员密码
运行命令后,屏幕会飞快地滚动很多日志信息。请在这些信息中仔细寻找下面这一行:
Successfully create admin user, username: admin, password: XXXXXXXX
那个 XXXXXXXX 就是你的随机初始密码。
如果你错过了这一行,或者没记住,别担心:
按 Ctrl + C 停止程序。
输入命令:./openlist admin set 123456(这会把密码强行改为 123456)。
重新输入 ./openlist server 启动。
2.5.10 扫尾工作
既然已经解压成功,那个 47MB 的压缩包就没用了,可以删掉它省点空间:
rm openlist-android-arm64.tar.gz3.开启 Termux 的 Wake Lock(唤醒锁)
这是最简单也最直接的方法。它会告诉系统:“哪怕锁屏了,也请给我的 CPU 留一口气”。
操作方法: 下拉你的手机通知栏,找到 Termux 的通知。
点击: 点击通知上的 Acquire Wake Lock。
或者在命令行输入:
termux-wake-lock4. 创建本地strm存放目录
# 建立一个在手机下载目录里可见的文件夹
mkdir -p ~/storage/downloads/strm_files5. 登陆openlsit,创建strm存储
6. 索引搜索
第一次需全面索引一次
7. 全局勾选
第二步
emby服务端安装
第三步
内外穿透,使用Cloudflare Tunnel方式安装
1. Termux 官方库里已经自带了 cloudflared(Tunnel 的核心程序),所以安装极其简单,不需要折腾脚本。
在 Termux 里执行:
pkg update -y && pkg install cloudflared -y2. 让 Tunnel 认领你的域名
装好之后,我们需要让这台手机和你的 Cloudflare 账号绑定,这样它才能接管你的 363689.xyz。
在 Termux 里输入这行命令:
cloudflared tunnel login这个时候,Termux 屏幕上会弹出一长串网址(URL)。 ---
你现在的任务:把 Termux 里弹出的那串网址复制下来,丢到你手机或电脑的浏览器里打开。 网页会让你登录 Cloudflare,你选择你的 363689.xyz 域名点授权就行。
3. 创建一条隧道
直接在 Termux 里输入并回车:
cloudflared tunnel create emby_tunnel把你的域名绑到隧道上
这一步会自动去 Cloudflare 把 emby.363689.xyz 的解析改成隧道的专用地址,瞬间顶替掉原来那些乱七八糟的IP
cloudflared tunnel route dns emby_tunnel emby.363689.xyz给 openlist 绑一个新域名
cloudflared tunnel route dns emby_tunnel olist.363689.xyz4. 生成配置文件
现在我们要让这条隧道同时干两份活:既转发 Emby,又转发 openlist。
假设你 openlist 的端口是默认的 5244(如果不是,请把下面代码里的 5244 改成你的实际端口)
CRED_FILE=$(ls ~/.cloudflared/*.json | head -n 1)
cat <<EOF > ~/.cloudflared/config.yml
tunnel: emby_tunnel
credentials-file: ${CRED_FILE}
ingress:
- hostname: emby.363689.xyz
service: http://127.0.0.1:8096
- hostname: olist.363689.xyz
service: http://127.0.0.1:5244
- service: http_status:404
EOF5. 启动隧道
cloudflared tunnel run emby_tunnel6.静默启动服务
nohup cloudflared tunnel run emby_tunnel >/dev/null 2>&1 &或强行让隧道走传统的 TCP 协议(HTTP2),UDP 容易被系统掐断。
nohup cloudflared tunnel --protocol http2 --config ~/.cloudflared/config.yml run emby_tunnel > ~/tunnel.log 2>&1 &cd ~/openlistnohup ./openlist server >/dev/null 2>&1 &jobs附录
一、 Aria2
1.Aria2 终极完美安装脚本
# 1. 杀掉可能在后台带病运行的旧进程,清空旧配置
pkill aria2c
rm -rf ~/.config/aria2
# 2. 重新安装并创建必要的文件夹和文件
pkg install aria2 -y
mkdir -p ~/.config/aria2
mkdir -p /storage/emulated/0/Movies
touch ~/.config/aria2/aria2.session
# 3. 写入完美无瑕的配置文件 (修复了 input-file 错误)
cat > ~/.config/aria2/aria2.conf << "EOF"
# --- 基础设置 ---
dir=/storage/emulated/0/Movies
continue=true
disk-cache=32M
# --- 断点续传与进度保存 ---
input-file=/data/data/com.termux/files/home/.config/aria2/aria2.session
save-session=/data/data/com.termux/files/home/.config/aria2/aria2.session
save-session-interval=60
# --- RPC 控制设置 (给 openlist 用的接口) ---
enable-rpc=true
rpc-listen-all=true
rpc-allow-origin-all=true
rpc-listen-port=6800
rpc-secret=xxsky1127
# --- 核心下载提速优化 ---
max-concurrent-downloads=5
max-connection-per-server=16
split=16
min-split-size=10M
# --- BT/磁力链接专属优化 ---
bt-enable-lpd=true
enable-dht=true
enable-peer-exchange=true
bt-seed-unverified=true
bt-save-metadata=true
EOF
# 4. 启动 Aria2 (以太静默守护模式运行)
aria2c --conf-path=$HOME/.config/aria2/aria2.conf -D
echo "✅ Aria2 完美配置完毕并已在后台稳定运行!"2.在后台绑定 Aria2 (建立通讯)
2.1在你的主力机浏览器里,输入服务器的地址进入 openlist 后台(例如:http://192.168.0.117:5244),并点击底部登录管理后台。
2.2在左侧菜单栏,点击 设置 (Settings)。
2.3在顶部的选项卡里,找到并点击 其他 (Other) 标签页。
2.4往下划,找到关于 Aria2 的设置框,对照着填:
- Aria2 URI:填 http://127.0.0.1:6800/jsonrpc (这代表让它找住在自己这台手机里的 Aria2)。
- Aria2 密钥:填 xxsky1127 (咱们刚才在代码里写好的暗号)。
2.5填完后,一定要点击底部的 保存 (Save)。
(现在,openlist 已经成功连上底层的 Aria2 苦力了!)
3.把手机本地的“电影放映室”挂载出来
虽然 Aria2 知道要把电影下到 /storage/emulated/0/Movies 这个文件夹里,但咱们还得让 openlist 把这个文件夹显示在网页上,你才能看到。
3.1还在 openlist 的管理后台,点击左侧菜单的 存储 (Storage)。
3.2点击 添加 (Add)。
3.3驱动 选择:本机存储 (Local)。
3.4在弹出的设置页面,填这两个最关键的:
- 挂载路径:填 /本地高清影院 (或者随便你起个好听的名字,这是在首页显示的文件夹名)。
- 根文件夹路径:填 /storage/emulated/0/Movies (这是 Aria2 的真实下载老巢,一字不差地复制过去)。
3.5其他的什么都不用管,直接划到最下面点击 添加 (Save)。
4.见证奇迹的终极下载测试!
所有管道都已打通,现在咱们来体验一把“全自动遥控下载”的爽快感:
4.1退出管理后台,回到 openlist 的主页 (Home)。
4.2你会看到首页多了一个名叫 “本地高清影院” 的文件夹,点进去。
4.3在这个文件夹的右下角,你会看到一个 离线下载 (Offline Download) 的按钮(或者类似云朵/箭头的图标)。
4.4点开它,把你在网上找好的任意一个磁力链接(magnet:?xt=...)粘贴进去,点击确定!
接下来会发生什么?
openlist 会立刻把这个链接顺着刚才的暗号发给后台的 Aria2。Aria2 会开始满速疯狂下载。下载完成后,电影文件会自动出现在这个“本地高清影院”的文件夹里!
二、定时任务
1.安装定时任务服务
pkg install cronie -y2.脚本
cat > ~/refresh.sh << "EOF"
#!/bin/bash
# 你的真实管理员 Token
TOKEN="openlist-4ba3bee7-2112-42bd-92e7-6f3a7c67a83a7CIOwhmfYpB9Hi8HX1NYfRJUn1iWvyPnyuoOUPC5Fqn5FGxTwNuKHwRSYCT6OZC2"
# 这里你直接写最外层的大目录就行了!不管里面嵌套多少层它都能找到
PATHS=(
"/177/177-电影"
"/177/177-动漫"
"/177/177-电视剧"
)
# 定义一个“无限深度探测”的核心引擎
scan_dir() {
local CURRENT_PATH="$1"
echo "🚀 正在刷新并探测: $CURRENT_PATH"
# 敲门获取当前目录内容
local JSON=$(curl -s -X POST "http://127.0.0.1:5244/api/fs/list" \
-H "Authorization: $TOKEN" \
-H "Content-Type: application/json" \
-d "{\"path\":\"$CURRENT_PATH\",\"password\":\"\",\"page\":1,\"per_page\":0,\"refresh\":true}")
# 找出当前目录下的所有子文件夹,存起来(完美解决名字带空格的问题)
local dirs=()
while IFS= read -r line; do
if [ -n "$line" ]; then
dirs+=("$line")
fi
done < <(echo "$JSON" | jq -r '.data.content[]? | select(.is_dir==true) | .name')
# 如果里面还有文件夹,就挨个钻进去继续挖!
for folder in "${dirs[@]}"; do
sleep 2 # 停顿2秒,防止请求过快被网盘拉黑封号
scan_dir "$CURRENT_PATH/$folder"
done
}
# 开始挨个巡逻你设置的最外层大目录
for ROOT_PATH in "${PATHS[@]}"; do
echo "==================================="
echo "🌟 开始执行总任务: $ROOT_PATH"
scan_dir "$ROOT_PATH"
done
echo "==================================="
echo "🎉 所有网盘的每一个角落都已彻底刷新完毕!"
EOF3.安装“解析眼” (jq)
pkg install jq -y4.赐予执行权限
chmod +x ~/refresh.sh5.定时服务在后台活着
crond6.手动测试
~/refresh.sh7.把脚本加入定时任务(这一步会打开一个文本编辑器)
crontab -e随后进入编辑模式粘贴以下代码:
0 * * * * /data/data/com.termux/files/home/refresh.sh按Ctrl+O 和 Ctrl+X保存退出。
或者直接盲写强插大法
echo "0 * * * * /data/data/com.termux/files/home/refresh.sh" > mycron.txt
crontab mycron.txt
rm mycron.txt(这三行代码的意思是:在外面建个文本把任务写好 -> 直接强行塞给 crontab 系统 -> 销毁临时文本。干净利落,全程不需要打开任何编辑器!)
8.检查写成功没
crontab -l如果屏幕上成功显示出 0 /data/data/com.termux/files/home/refresh.sh 这一行字,那就说明定时任务已经完美生效了!
9.定时分目录分时间扫描脚本
9.1 改造脚本
cat > ~/refresh.sh << "EOF"
#!/bin/bash
# 你的真实管理员 Token
TOKEN="openlist-4ba3bee7-2112-42bd-92e7-6f3a7c67a83a7CIOwhmfYpB9Hi8HX1NYfRJUn1iWvyPnyuoOUPC5Fqn5FGxTwNuKHwRSYCT6OZC2"
# 检查有没有告诉它要去哪(如果没有路径,就罢工报错)
if [ -z "$1" ]; then
echo "❌ 错误:请告诉我你要扫哪个目录!(例如: ~/refresh.sh \"/177/177-动漫\")"
exit 1
fi
TARGET_PATH="$1"
# 核心无限深挖引擎(和之前一样)
scan_dir() {
local CURRENT_PATH="$1"
echo "🚀 正在刷新并探测: $CURRENT_PATH"
local JSON=$(curl -s -X POST "http://127.0.0.1:5244/api/fs/list" \
-H "Authorization: $TOKEN" \
-H "Content-Type: application/json" \
-d "{\"path\":\"$CURRENT_PATH\",\"password\":\"\",\"page\":1,\"per_page\":0,\"refresh\":true}")
local dirs=()
while IFS= read -r line; do
if [ -n "$line" ]; then
dirs+=("$line")
fi
done < <(echo "$JSON" | jq -r '.data.content[]? | select(.is_dir==true) | .name')
for folder in "${dirs[@]}"; do
sleep 2
scan_dir "$CURRENT_PATH/$folder"
done
}
echo "==================================="
echo "🌟 接收到调度指令,开始执行: $TARGET_PATH"
scan_dir "$TARGET_PATH"
echo "🎉 专项目录任务已彻底完成!"
EOF9.2终极排班表
cat > mycron.txt << "EOF"
# 电影:每天 1 次 (凌晨 4 点)
0 4 * * * /data/data/com.termux/files/home/refresh.sh "/177/177-电影"
# 动漫:每天 3 次 (11:30、15:30、21:30)
30 11,15,21 * * * /data/data/com.termux/files/home/refresh.sh "/177/177-动漫"
# 电视剧:每天 3 次 (11:30、20:00、21:00)
0 11,20,21 * * * /data/data/com.termux/files/home/refresh.sh "/177/177-电视剧"
EOF
crontab mycron.txt
rm mycron.txt
crontab -l9.3立刻单独扫一下动漫
~/refresh.sh "/177/177-动漫"