跳到正文

Docker 部署 ​

当前 Docker 交付为本地候选,尚无正式镜像下载或镜像仓库地址。以下步骤适用于部署维护者已准备好本地镜像和应用管理员账号的验证环境。leelaa-strm:local 只引用该本地候选,不会从镜像仓库拉取。

普通用户的 fnOS 安装见安装与升级。正式 Docker 镜像分发与首次账号交付入口就绪后,本页再补充对应安装步骤。

需要 Docker Engine、Compose v2 或更新版本。当前本地候选已验证 linux/arm64;请由部署维护者确认镜像与目标架构一致。运行宿主需有有效的 Linux /etc/machine-id;使用 Linux 虚拟机时,该身份属于虚拟机。

1. 准备部署目录 ​

确认本地镜像与管理员账号已就绪后,在 Docker 宿主准备部署目录:

bash
mkdir -p "$HOME/leelaa-strm"
cd "$HOME/leelaa-strm"
mkdir -p data media
printf 'PUID=%s\nPGID=%s\n' "$(id -u)" "$(id -g)" > .env

PUID、PGID 应对应这两个目录的属主。使用普通用户执行上述命令即可保持一致;已有 NAS 共享目录请填写其实际 UID/GID,不要给所有用户开放写权限。

挂载路径必须存在于 Docker 引擎所在的宿主。若通过远程 Docker 或未共享此目录的虚拟机运行,请先在该宿主创建目录,再在 .env 中将 STRM_DATA_DIR、STRM_OUTPUT_DIR 设置为其绝对路径;docker run 则在命令前设置这些环境变量。设备身份路径同样属于引擎宿主。参见 Docker 挂载说明。

2. 使用 Compose ​

把下方配置保存为部署目录中的 compose.yml,也可下载 compose.yml后放入该目录:

yaml
name: leelaa-strm
services:
  strm:
    image: leelaa-strm:local
    pull_policy: never
    container_name: ${STRM_CONTAINER_NAME:-leelaa-strm}
    user: "${PUID:-10001}:${PGID:-10001}"
    restart: unless-stopped
    ports:
      - "${STRM_BIND_ADDRESS:-127.0.0.1}:${STRM_HTTP_PORT:-8690}:8690"
    volumes:
      - type: bind
        source: ${STRM_DATA_DIR:-./data}
        target: /data
        bind:
          create_host_path: false
      - type: bind
        source: ${STRM_OUTPUT_DIR:-./media}
        target: /media
        bind:
          create_host_path: false
      - type: bind
        source: ${STRM_MACHINE_ID_FILE:-/etc/machine-id}
        target: /run/host/machine-id
        read_only: true
        bind:
          create_host_path: false
    read_only: true
    tmpfs:
      - /tmp:rw,noexec,nosuid,size=16m
    cap_drop:
      - ALL
    security_opt:
      - no-new-privileges:true
    stop_grace_period: 20s

在部署目录启动并检查:

bash
docker compose -f compose.yml up -d
docker compose -f compose.yml ps
docker compose -f compose.yml logs --tail=50

或:使用 docker run ​

准备好本地候选镜像后,在包含 data、media 的部署目录直接复制执行:

sh
#!/bin/sh
set -eu

docker run -d \
  --name "${STRM_CONTAINER_NAME:-leelaa-strm}" \
  --pull never \
  --restart unless-stopped \
  --user "${PUID:-$(id -u)}:${PGID:-$(id -g)}" \
  --network "${STRM_DOCKER_NETWORK:-bridge}" \
  --publish "${STRM_BIND_ADDRESS:-127.0.0.1}:${STRM_HTTP_PORT:-8690}:8690" \
  --mount "type=bind,source=${STRM_DATA_DIR:-$(pwd)/data},target=/data" \
  --mount "type=bind,source=${STRM_OUTPUT_DIR:-$(pwd)/media},target=/media" \
  --mount "type=bind,source=${STRM_MACHINE_ID_FILE:-/etc/machine-id},target=/run/host/machine-id,readonly" \
  --read-only \
  --tmpfs /tmp:rw,noexec,nosuid,size=16m \
  --cap-drop ALL \
  --security-opt no-new-privileges:true \
  --stop-timeout 20 \
  leelaa-strm:local

也可下载启动脚本。两种方式使用相同容器名和端口,请选择一种。

首次登录 ​

默认打开 http://127.0.0.1:8690。Docker 使用应用账号密码登录,不显示 NAS 登录入口。

使用部署维护者交付的应用管理员账号登录,按提示完成首次改密,再进入「应用授权」和网盘配置。若未收到账号,请联系部署维护者;当前 Docker 候选尚未提供面向普通用户的初始化账号交付入口。成员由应用管理员创建,NAS 管理员身份不会在 Docker 中授予应用权限。

局域网与播放地址 ​

默认只允许宿主本机访问。需要从局域网访问时,在 Compose 的 .env 中增加以下配置,再用原 Compose 命令重建容器:

dotenv
STRM_BIND_ADDRESS=0.0.0.0
STRM_HTTP_PORT=8690

使用 docker run 时,在启动命令前设置相同环境变量。随后通过 http://你的NAS局域网地址:8690 打开;只在可信局域网使用,公网访问需另行配置 HTTPS 与访问控制。

在 设置 → 播放服务地址 保存播放器能访问的地址,例如 http://你的NAS局域网地址:8690。局域网播放器不能使用 127.0.0.1。独立播放器的专用通道仍按播放授权配置;开启额外端口时还需显式增加对应 Docker 端口映射。

数据、升级与授权保留 ​

挂载用途
./data → /data完整应用状态:账号、网盘凭据、目标、记录、实例和授权资料
./media → /media生成的 STRM 与元数据,交给下游应用只读扫描
宿主 /etc/machine-id → /run/host/machine-id只读设备身份,供统一授权 SDK 识别当前宿主

下游应用只读访问 media,使用能读取生成文件的相同 UID 或由管理员授予读取权限;不要把 data 目录交给播放器。

升级前停止容器,成套备份 data、media 和部署配置。部署维护者准备好同架构的新候选镜像后,回到原部署目录运行:

bash
docker compose -f compose.yml up -d --force-recreate

保留原目录、UID/GID 和宿主身份映射,重建会继续使用原账号与应用实例。授权仍受有效期、撤销及平台规则约束;换 NAS/重建虚拟机需按官方恢复流程处理,不能仅凭设备 ID 自动领回授权。

启动失败 ​

  • 提示 machine-id:确认 Docker 宿主存在有效文件,并以只读方式挂载;自定义位置可在 .env 设置 STRM_MACHINE_ID_FILE。容器不会生成替代设备身份。
  • 提示目录缺失或无写权限:确认部署目录有 data、media,且 PUID/PGID 与属主一致;不要清空数据重试。
  • 提示端口占用:保留现有服务,将 STRM_HTTP_PORT 改为空闲端口,并同步修改播放服务地址。
  • 需要停止:使用原部署目录的 docker compose -f compose.yml stop;停止容器不会删除挂载数据或 115 原文件。