使用ubuntu 24安装docker
#更新软件源
sudo apt-get update
#docker io
apt-get install docker.io
#检查docker是否安装成功
docker version
#cd到根目录并创建docker文件夹附加权限
cd /
mkdir docker
chmod -R 777 docker
#检查权限
ls -ld /docker /docker/*ls -ld /docker /docker/*
#可选不重要 是否安装docker面板
#安装文档:https://docs.portainer.io/start/install-ce/server/docker/linux
#docker地址:https://hub.docker.com/r/portainer/portainer-ce
docker run -d \
--name portainer \
--restart=always \
-p 9000:9000 \
-p 8000:8000 \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /docker/portainer/data:/data \
6053537/portainer-ce
参数说明:
--name portainer → 容器名称
--restart=always → 开机自启
-p 9000:9000 → Web 面板访问端口
-p 8000:8000 → Edge agent 端口
-v /var/run/docker.sock:/var/run/docker.sock → 让 Portainer 管理宿主机 Docker
-v /docker/portainer/data:/data → 数据持久化
访问地址:ip+9000
docker安装emby
#docker地址:https://hub.docker.com/r/amilys/embyserver
#这个目录-v /home/video:/video\ 软连接目录
docker run -d \
--name emby \
--restart=always \
--privileged \
--network host \
-v /docker/emby/config:/config \
-v /docker/emby/cache:/cache \
-v /home/video:/home/video \#strm本地软连接
-v /home/openlist:/home/openlist:rslave \#tianyi 挂载点
-v /docker/emby/ssl:/ssl \
amilys/embyserver:latest
#赋权
chmod -R 777 /home/video
#ip+8096 进入emby 进入设置,把https端口8920 :rslave
#本地和公网全改为443外域设置为你的域名,并关闭转码后重启
#如果不想使用8096 可以到 /docker/emby/config/system.xml 修改为一下内容并重启emby
<PublicPort>0</PublicPort>
<HttpServerPortNumber>0</HttpServerPortNumber>
<EnableHttps>true</EnableHttps>
Emby Docker 自动续签 SSL 脚本使用方法
1️⃣ 准备工作
确认域名解析
域名 xxx.baby
必须解析到你 VPS 的公网 IP。
在浏览器或本地 ping xxx.baby
能正确解析到 VPS。
VPS 必须允许 80 端口访问
Standalone 模式会临时启动 80 端口来验证域名。
确保防火墙或云厂商安全组放行端口 80。
安装 Docker 并运行 Emby
Emby 容器已挂载 SSL 卷
示例 -v /docker/emby/ssl:/ssl \
一键脚本续签证书并生成pfx并重启emby
稍后我会出一个不占用443端口的反代,可能会用到宝塔面板
使用一键脚本自动申请续签证书 并重启emby
保存为emby-cert-renew.sh 放到/docker/emby/ssl 目录
#!/usr/bin/env bash
# ==========================================
# Emby Docker 自动续签 SSL 脚本(支持 PFX)
# 仅在证书剩余有效期少于30天时续签
# 域名: xxxx.baby
# 证书目录: /docker/emby/ssl
# 使用 acme.sh 申请/续签证书并生成 PFX
# ==========================================
# ========== 配置参数 ==========
DOMAIN="xxxx.baby" # 域名
EMAIL="2226561507@qq.cm" # 用于注册证书的邮箱
CERT_DIR="/docker/emby/ssl" # 证书存放目录(Docker 容器挂载卷)
CONTAINER_NAME="emby" # Emby 容器名
PFX_PASS="123456" # Emby 自定义证书密码
# ========== 检查并安装依赖 ==========
echo "[INFO] 检查 socat 是否安装..."
if ! command -v socat &>/dev/null; then
echo "[INFO] 安装 socat..."
apt-get update
apt-get install -y socat
fi
echo "[INFO] 检查 acme.sh 是否安装..."
if ! command -v acme.sh &>/dev/null; then
echo "[INFO] 安装 acme.sh..."
curl https://get.acme.sh | sh -s email=$EMAIL
source ~/.bashrc
fi
# ========== 检查证书是否存在并计算剩余有效期 ==========
if [ -f "$CERT_DIR/fullchain.pem" ]; then
EXPIRY_DAYS=$(openssl x509 -enddate -noout -in "$CERT_DIR/fullchain.pem" | cut -d= -f2)
EXPIRY_TIMESTAMP=$(date -d "$EXPIRY_DAYS" +%s)
NOW_TIMESTAMP=$(date +%s)
DAYS_LEFT=$(( (EXPIRY_TIMESTAMP - NOW_TIMESTAMP) / 86400 ))
echo "[INFO] 当前证书剩余有效期: $DAYS_LEFT 天"
else
DAYS_LEFT=0
echo "[INFO] 未找到现有证书,将强制申请新证书"
fi
# ========== 判断是否需要续签 ==========
if [ "$DAYS_LEFT" -le 30 ]; then
echo "[INFO] 证书剩余有效期少于30天,开始续签..."
# 停止 Emby 容器以释放 80 端口
echo "[INFO] 停止 Emby 容器..."
docker stop $CONTAINER_NAME
# 申请/续签证书
echo "[INFO] 正在为 $DOMAIN 申请/更新证书..."
~/.acme.sh/acme.sh --issue -d $DOMAIN --standalone --force
# 安装 PEM 证书
mkdir -p "$CERT_DIR"
~/.acme.sh/acme.sh --install-cert -d $DOMAIN \
--key-file $CERT_DIR/privkey.pem \
--fullchain-file $CERT_DIR/fullchain.pem
# 生成 PFX
echo "[INFO] 生成 PFX 文件..."
openssl pkcs12 -export \
-out "$CERT_DIR/emby.pfx" \
-inkey "$CERT_DIR/privkey.pem" \
-in "$CERT_DIR/fullchain.pem" \
-passout pass:$PFX_PASS
# 设置权限
chmod 600 $CERT_DIR/privkey.pem $CERT_DIR/fullchain.pem $CERT_DIR/emby.pfx
chown root:root $CERT_DIR/privkey.pem $CERT_DIR/fullchain.pem $CERT_DIR/emby.pfx
# 重启 Emby
echo "[INFO] 重启 Emby 容器应用新证书..."
docker start $CONTAINER_NAME
echo "[INFO] 证书续签完成,PFX 文件已生成:$CERT_DIR/emby.pfx"
echo "[INFO] Emby 使用的 PFX 密码:$PFX_PASS"
else
echo "[INFO] 证书有效期充足(>$DAYS_LEFT 天),无需续签。"
fi
#给文件赋权
chmod +x /docker/emby/ssl/emby-cert-renew.sh
#使用bash运行脚本
bash /docker/emby/ssl/emby-cert-renew.sh
如果报错 No such file or directory
#安装dos2unix
apt-get update && apt-get install -y dos2unix
#转换换行符
dos2unix /docker/emby/ssl/emby-cert-renew.sh
#使用bash运行脚本
bash /docker/emby/ssl/emby-cert-renew.sh
添加 cron 定时任务
实现每天执行一次脚本
#这里输入1比较好用
Select an editor. To change later, run 'select-editor'.
1. /usr/bin/vim.basic
2. /usr/bin/vim.tiny
3. /bin/ed
Choose 1-3 [1]: 1
#之后就会进入 vim 编辑器界面,按i 粘贴以下内容[大致每天凌晨三点运行一次脚本.并生成日志]
#按Esc输入:wq 保存
0 3 * * * /docker/emby/ssl/emby-cert-renew.sh >> /docker/emby/ssl/emby-cert-renew.log 2>&1
#验证cron是否有效 看看是否有 0 3 * * * /docker/emby/ssl/emby-cert-renew.sh >>......
crontab -l
加入cloudflare 进行代理 稍后会截图
安装openlist
这里提供两种安装方式一键脚本和docker镜像
1.一键脚本安装openlist 推荐简单
curl -fsSL https://res.oplist.org/script/v4.sh > install-openlist-v4.sh && sudo bash install-openlist-v4.sh
2.docker安装openlist
#项目github地址https://github.com/OpenListTeam/OpenList
#项目docker镜像地址https://hub.docker.com/r/openlistteam/openlist
#项目文档地址https://doc.openlist.team/guide/installation/docker
#安装openlist
mkdir -p /docker/openlist
chmod -R 777 /docker/openlist
docker run \
--network host \
--user $(id -u):$(id -g) \
-d \
--restart=unless-stopped \
-v /docker/openlist:/opt/openlist/data \
-e UMASK=022 \
--name="openlist" \
openlistteam/openlist:latest
#使用说明ip+5244
#默认密码查看docker日志 docker logs openlist
#给管理员用户admin勾选 WebDAV 管理
#如果你怕权限太高可以新建一个用户只给webdav读取
#挂载好云盘选择把302改为本地代理
安装rclone
#docker.脚本等安装地址:https://rclone.org/install/
#github地址:https://github.com/rclone/rclone
#dockerhub地址:https://hub.docker.com/r/rclone/rclone
提供两种方法 脚本和docker
如果提示没有压缩软件输入一下命令仅限ubuntu
apt install unzip
安装 FUSE 3:
sudo apt update
sudo apt install fuse3
确认安装成功:
fusermount3 --version
一键脚本 推荐脚本 比较简单
sudo -v ; curl https://rclone.org/install.sh | sudo bash
新建配置
rclone config
输入n 新建配置 New remote
name输入openlist
#选择webdav
58 / WebDAV
#输入url
http://127.0.0.1:5244/dav
#vendor选择8 Other
vendor> Other
#user等于openlist用户名
user> admin
#password 按y输入两边密码 xxx为你openlist密码
password:xxx
Confirm the password::xxx
#这个空格跳过 bearer_token
#是否进入高级设置 Edit advanced config? n跳过
最后两步 按Y保存 按Q退出
#新建文件夹并挂载openlist
mkdir /home/openlist
rclone mount openlist: /home/openlist \
--config=/root/.config/rclone/rclone.conf \
--allow-other \
--umask 000 \
--vfs-cache-mode writes \
--cache-dir=/home/rclonecache \
--buffer-size 16M \
--vfs-read-ahead 16M \
--vfs-read-chunk-size 8M \
--vfs-read-chunk-size-limit 64M \
--vfs-cache-max-size 512M \
--vfs-cache-max-age 30m \
--transfers 2 \
--checkers 2 \
--attr-timeout 1s \
--no-modtime \
--log-level INFO \
--log-file /root/rclone-mount.log
# 检查是否挂载成功
ls /home/openlist
#卸载挂载云盘
fusermount -uz /home/openlist
推荐配置示例(多用户 Emby 高并发)
适合多用户
#创建缓存文件夹并赋权
mkdir /home/rclonecache
chmod -R 777 /home/rclonecache
rclone mount openlist: /home/openlist \
--config=/root/.config/rclone/rclone.conf \
--allow-other \
--umask 000 \
--vfs-cache-mode full \
--cache-dir=/home/rclonecache \
--buffer-size 64M \
--vfs-read-ahead 64M \
--vfs-read-chunk-size 64M \
--vfs-read-chunk-size-limit 1G \
--vfs-cache-max-size 10G \
--vfs-cache-max-age 2h \
--transfers 6 \
--checkers 16 \
--attr-timeout 2s \
--no-modtime \
--log-level INFO \
--log-file /root/rclone-mount.log
#测试
rclone mount openlist: /home/openlist \
--config=/root/.config/rclone/rclone.conf \
--allow-other \
--umask 000 \
--vfs-cache-mode full \
--cache-dir=/home/rclonecache \
--buffer-size 64M \
--vfs-read-ahead 128M \
--vfs-read-chunk-size 64M \
--vfs-read-chunk-size-limit 512M \
--vfs-cache-max-size 20G \
--vfs-cache-max-age 4h \
--transfers 4 \
--checkers 8 \
--dir-cache-time 5m \
--poll-interval 1m \
--attr-timeout 5s \
--no-modtime \
--log-level INFO \
--log-file /root/rclone-mount.log
#查询是否缓存,边播放边输入命令
du -sh /home/rclonecache
稍后还会有CD2的挂载方法据说比rclone效果好
如果想开机就自动挂载 等我整理完教程在写
docker方法暂时不提供
安装smartstrm
docker run -d \
--name smartstrm \
--restart unless-stopped \
--network host \
-v /docker/smartstrm/config:/app/config \
-v /docker/smartstrm/logs:/app/logs \
-v /docker/smartstrm/strm:/strm \
-e PORT=8024 \
-e ADMIN_USERNAME=admin \
-e ADMIN_PASSWORD=admin123 \
-e LICENSE= \
cp0204/smartstrm:latest
#登录网页 ip+8024
https://github.com/shenxianmq/Auto_Symlink
docker run -d \
--name auto_symlink \
-e TZ=Asia/Shanghai \
-v /home/openlist:/home/openlist:rslave \#云盘挂载目录
-v /home/video:/home/video \ #Emby扫描目录(软链接目标)
-v /docker/auto_symlink/config:/app/config \
-p 8095:8095 \
--user 0:0 \
--restart unless-stopped \
shenxianmq/auto_symlink:latest
docker run -d \
--name auto_symlink \
-e TZ=Asia/Shanghai \
-v /home/openlist:/home/openlist:rslave \
-v /home/video:/home/video \
-v /docker/auto_symlink/config:/app/config \
-p 8095:8095 \
--user 0:0 \
--restart unless-stopped \
shenxianmq/auto_symlink:latest
#详细信息
Docker运行指令详解
-v /your/cloud/path:/cloudpath:rslave: 将你的云盘路径(/your/cloud/path)映射到容器内的路径(/your/cloud/path)。rslave表示使用相对于对应机的从属挂载模式。请确保左右路径保持一致,否则生成的软链接不是指向真实路径,导入emby中的会导致无法观看。(简单来说,这里需要填写你映射的云盘路径,且两边都填写一模一样的路径即可。)
-v /your/media/path:/media:您将创建软连接的位置映射到容器内的/media目录。
-p 8095:8095:映射8095端口,可方便的查看日志以及管理服务。
-v /path/to/auto_symlink/config:/app/config: 将auto_symlink的配置目录映射到容器内部的/app/config。这样可以使容器中的auto_symlink使用外部的配置文件。
--restart unless-stopped:设置容器在退出时自动重启。
注意:
映射云盘路径时必须使用绝对路径(虽然此处是本工具的docker运行说明,但EMBY也应使用同样的绝对路径,否则软连接会指向错误的位置,从而导致无法播放),以保证软连接正确指向原始文件或目录可以。
根据您的实际路径和需求调整-v选项中的路径。
群晖请使用控制台创建docker,因为群晖的Docker GUI界面无法选择rslave模式
网页界面访问和账户信息
账号密码
默认账号:admin
默认密码:password
在首次登录时,您可以使用这些凭据进行登录。为了安全起见,建议登录后立即更改密码。
网页界面说明
通过映射端口8095,用户可以方便地访问Auto_Symlink的Web界面。在任何支持的浏览器中输入http://[你的服务器地址]:8095即可访问。
cloudsaver
云盘自动转存搜索软件 https://github.com/jiangrui1994/CloudSaver
docker run -d \
-p 8008:8008 \
-v /docker/cloud-saver/data:/app/data \
-v /docker/cloud-saver/config:/app/config \
--name cloud-saver \
jiangrui1994/cloudsaver:latest
注意事项
- 资源搜索需要配置代理环境
- 默认注册码
- 管理员:230713
- 普通用户:9527
导入搜索频道 地址 https://www.yuque.com/xiaoruihenbangde/ggogn3/ga6gaaiy5fsyw62l
emby2alist
docker run -d \
--name MediaLinker \
-p 8091:8091 \
-v /docker/emby2alist/:/opt/ \
thsrite/medialinker:latest
version: '3'
services:
medialinker:
restart: always
volumes:
- '/volume1/docker/medialinker/:/opt/'
environment:
- AUTO_UPDATE=false
- SERVER=emby
- NGINX_PORT=8091
- NGINX_SSL_PORT=8095
container_name: medialinker
image: 'thsrite/medialinker:latest'
network_mode: "host"
Comments NOTHING