一体机容器
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,然后:
- 将上述配置文件放在
/srv/lani/config.yaml - 创建空目录
/srv/lani/storage - 在已有媒体卷内准备
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,你应当看到:

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。
暴露额外端口
容器内的端口如下:
| 端口 | 服务 |
|---|---|
| 8080 | Nginx |
| 8081 | gateway |
| 8082 | api-server |
| 8083 | data-server |
| 9000 | MinIO API |
| 9001 | MinIO 后台 |
这些端口可以用于调试,但由于缺少鉴权,请勿将它们对外暴露。其中,MinIO 后台使用默认用户名 minioadmin 和密码 minioadmin。