跳到主要内容

一体机容器

lani 一体机容器 包含了运行所需的各种服务,面向运行 linux/amd64 容器的 Docker 环境。

该容器启动时会执行数据库 migration,升级或重新启动前应自行备份数据库;它不执行维护者私有 CD 的快照和占用流程。

在此之前,你需要 安装 docker。

配置​

lani 需要在运行之前配置,这包括:

其余的配置并非必要,可以根据需求自行决定。

完成配置之后,你需要将所有配置写进一个 YAML 文件,像:

postgresUrl: "postgres://user:pass@your_postgresql_server:5432/your_database"

downloadClient:
kind: qbittorrent
qbittorrent:
apiEndpoint: http://your_qbittorrent_server
username: qbt_user
password: qbt_password

jellyfin:
apiEndpoint: http://your_jellyfin_server
apiToken: your_api_token
dummyUserId: dummy_user_id

mediaPool:
root: /data/pool
painfullyAcceptCrossDeviceCopy: false

准备目录​

你需要找一个合适的地方存放挂载到容器内的文件,在 Linux 上这通常是 /srv 或者 /var,在这里创建一个目录,比如 /srv/lani,然后:

  1. 将上述配置文件放在 /srv/lani/config.yaml
  2. 创建空目录 /srv/lani/storage
  3. 在已有媒体卷内准备 pool、downloads 和 library 目录,将共同父目录挂载为 /data,并按路径映射配置下载器与 Jellyfin

启动一体机容器​

接着,用 docker 命令启动(将命令中的路径替换为实际路径):

sudo docker run --detach \
--publish 8080:8080 \
--name lani_all_in_one \
--restart always \
--volume /srv/lani/config.yaml:/config/config.yaml \
--volume /srv/lani/storage:/storage \
--volume /srv/media:/data \
ghcr.io/std4453/lani-all-in-one
提示

ghcr.io 是 GitHub 的容器服务,有时无法正常访问,你可能需要 配置网络代理。

启动后稍等片刻,访问 http://localhost:8080,你应当看到:

lani 截图

Enjoy!

升级与媒体回填​

首次升级时,备份数据库、配置及容器挂载清单,补充 mediaPool.root 并删除旧 lani.moveStrategy。按从旧文件结构迁移到媒体池检查现有目录和挂载,再停止旧容器,用新版镜像及调整后的配置正常启动。保留原持久化数据库和媒体卷,避免新旧容器同时写入。

一体机启动流程会先完成数据库迁移。lani 随后进行有超时边界的媒体池与 Jellyfin 库目录的权限、硬链接预检;失败会输出具体原因及迁移文档链接并退出,修正后重新启动。预检与中断操作恢复成功后即提供服务,并在后台自动登记历史媒体,无需维护容器、手工合并内部配置或回填 CLI。

后台登记期间已有播放与查询继续可用,无关剧集可正常下载和导入。尚未登记的历史剧集暂缓替换,其所在季度暂缓改名和删除;对应剧集登记后即可重试,无需等待全库完成。可通过日志中的 Media registration 或 GraphQL mediaRegistrationProgress { state completed total reason } 查看进度。中断后重新启动会接续已有登记;无法恢复的错误会明确记录并退出,修复日志指出的问题后再启动。

如果存在问题……​

如果完成上述步骤后,未能成功访问网页,你可以使用 docker logs 查看运行日志,像:

docker logs lani_all_in_one

请复制日志,停止容器,并提交 GitHub Issue。

高级配置​

这些配置可能会影响稳定性、破坏现有功能,甚至丢失数据。使用时你需要知道自己在做什么。

展开

环境变量​

启动容器时配置的环境变量传递到 lani 服务的各个部分上(即 api-server、data-server 和 gateway),比如 DATA_SERVER_DEBUG 会作为 data-server 的 DEBUG 变量传递到服务内部。

你可以在调试时使用这些变量,比如 data-server 使用 debug 输出日志,你可以配置 DEBUG=* 使其打印详细的全部日志。

请注意不要修改 PORT 变量,否则服务将无法启动。

配置 PM2​

一体机容器中使用 PM2 启动各个服务,你可以挂载并覆盖 /deploy/apps/all-in-one/ecosystem.config.js 文件来定制 PM2 行为。你可能需要原版文件上修改,以免破坏现有功能。

配置 nginx​

一体机容器中使用 Nginx 合并各个服务,你可以挂载到 /etc/nginx/nginx.conf 等位置来覆盖现有的 nginx 配置。

如果需要 HTTPS,建议在容器外再配置一层反向代理,而非配置容器内 Nginx。

暴露额外端口​

容器内的端口如下:

端口服务
8080Nginx
8081gateway
8082api-server
8083data-server
9000MinIO API
9001MinIO 后台

这些端口可以用于调试,但由于缺少鉴权,请勿将它们对外暴露。其中,MinIO 后台使用默认用户名 minioadmin 和密码 minioadmin。