Jellyseerr 源码构建实操:从编译到生产环境
【免费下载链接】seerrOpen-source media request and discovery manager for Jellyfin, Plex, and Emby.项目地址: https://gitcode.com/GitHub_Trending/je/seerr
想在生产环境里自己掌控配置,或要跑还没进发行版的新特性?这篇直接讲 Jellyseerr 源码构建:拉代码、编译、起服务,外加三个平台各自容易卡住的点。
动手前先过一遍清单
先对一下号,别为不需要的事折腾:
- 只是装起来给几个人用、Docker 镜像就能满足——直接跑镜像,源码构建用不上。
- 要改代码、追未发布的特性,或者要 7×24 跑生产、日志和端口全自己定——这种才值得走源码。
- 只是想把版本升一升?容器换个 tag 重启就行,源码路线是给"要攥在自己手里"的人准备的。
硬性依赖一张表说清:
| 依赖 | 版本要求 | 备注 |
|---|---|---|
| Node.js | 22.x(推荐 LTS) | 主版本不对,编译直接挂 |
| pnpm | 9.x | 仓库锁文件按 pnpm 生成,拿 npm/yarn 代装会对不上 |
| Git | 任意新版 | 只负责拉代码,没有其他要求 |
所有平台都一样的三步
三个平台共用的流程就下面三条,差异全部挪到下一节集中讲。
拉取代码并切到主分支:
git clone https://gitcode.com/GitHub_Trending/je/seerr jellyseerr cd jellyseerr git checkout main安装依赖。CYPRESS_INSTALL_BINARY=0负责跳过 Cypress 的浏览器二进制下载,能省掉一大截时间(Windows 下这个变量怎么换写法,见下一节):
CYPRESS_INSTALL_BINARY=0 pnpm install --frozen-lockfile这一步是整个流程里最耗时的,中途断网也别慌,重跑同一条命令能接着装。
编译前端和服务端,产物最终落在dist/目录:
pnpm build平台差异集中对照
Jellyseerr 环境变量写法差异
同一个变量,bash 和 PowerShell 的注入方式完全不同:
| 场景 | Linux / macOS | Windows |
|---|---|---|
| 装依赖时临时跳过 Cypress | CYPRESS_INSTALL_BINARY=0 pnpm install --frozen-lockfile | set CYPRESS_INSTALL_BINARY=0 && pnpm install --frozen-lockfile |
| 常驻配置 | 写入/etc/jellyseerr/jellyseerr.conf,服务文件里用EnvironmentFile指过去 | 放部署目录的.env文件,或用nssm set Jellyseerr AppEnvironmentExtra注入 |
服务真正要用的变量就两个:PORT(默认 5055)和NODE_ENV=production。systemd 的 conf 里就是裸的KEY=VALUE两行,launchd 塞进 plist 的EnvironmentVariables字典,NSSM 走AppEnvironmentExtra。
Jellyseerr 路径与权限差异
| 事项 | Linux | macOS | Windows |
|---|---|---|---|
| 部署目录 | /opt/jellyseerr(sudo mkdir创建) | /opt/jellyseerr | C:\jellyseerr(普通mkdir即可) |
| node 可执行文件 | /usr/bin/node(先which node确认) | /usr/local/bin/node | C:\Program Files\nodejs\node.exe |
| 服务定义位置 | /etc/systemd/system/jellyseerr.service | ~/Library/LaunchAgents/com.jellyseerr.plist | 无文件,NSSM 写进注册表 |
| 权限要求 | systemctl操作要 sudo | launchctl操作要 sudo | nssm install要管理员终端 |
Jellyseerr 依赖安装的坑
- ⚠️ 最容易卡住的一步:Windows 上先
npm install -g win-node-env把 node-gyp 的编译工具链备齐,bcrypt、sqlite3 这类原生模块要本地编译,缺了它 install 必挂。 - 两个平台装依赖前都要带上
CYPRESS_INSTALL_BINARY=0,否则白下一个用不上的浏览器二进制。 - 装完直接报编译错,九成是 Node 主版本不对:
node -v确认 22.x,再pnpm -v确认 9.x。
编译完之后怎么跑
先在前台起一次,确认能正常响应再谈常驻:
pnpm start另开一个终端打一下默认端口,能拿到 HTTP 响应头就算起来了:
curl -I http://localhost:5055首次访问会走初始化流程,按提示设置登录方式和元数据源就行,端口默认监听 5055。确认一切正常后,按平台把 Jellyseerr 部署成常驻服务,核心配置要点只列关键行:
| systemd(Linux) | launchd(macOS) | NSSM(Windows) |
|---|---|---|
服务文件建在/etc/systemd/system/jellyseerr.service | plist 放~/Library/LaunchAgents/com.jellyseerr.plist | 无配置文件,nssm install Jellyseerr直接注册 |
EnvironmentFile=/etc/jellyseerr/jellyseerr.conf(conf 里写PORT=5055) | EnvironmentVariables字典放NODE_ENV/PORT | nssm set Jellyseerr AppEnvironmentExtra NODE_ENV=production |
WorkingDirectory=/opt/jellyseerr,ExecStart=/usr/bin/node dist/index.js | WorkingDirectory指向/opt/jellyseerr,ProgramArguments填 node 加dist/index.js | nssm set Jellyseerr AppDirectory "C:\jellyseerr" |
Restart=on-failure保证挂了自动拉起 | RunAtLoad与KeepAlive都置 true | 注册完用nssm start Jellyseerr拉起 |
systemctl enable jellyseerr && systemctl start jellyseerr | launchctl load后launchctl start com.jellyseerr | 同上,nssm start Jellyseerr |
服务起不来时别猜,直接翻日志:systemd 用journalctl -u jellyseerr,NSSM 看安装时指定的日志文件,报错基本都会写明缺了哪个文件或变量。
日后维护速查
| 操作 | 命令 | 说明 |
|---|---|---|
| 更新 Jellyseerr | git pull && pnpm install --frozen-lockfile && pnpm build | 拉新码、重装依赖、重新编译,重启服务即完成 Jellyseerr 更新 |
| 回滚 | git checkout <old-tag> | 退回上一版本,再走一遍上面的更新流程 |
| 看日志 | journalctl -u jellyseerr -f | systemd 专用;macOS 查 launchd 日志,Windows 查 NSSM 的输出文件 |
| 改端口 | 环境文件里把PORT改成<your-port>后重启 | 端口冲突就靠它,改完必须重启才生效 |
重启命令按平台取:systemctl restart jellyseerr、launchctl stop com.jellyseerr && launchctl start com.jellyseerr、nssm restart Jellyseerr。实例多了或者想要进程级守护,可以顺手加一层 PM2 做管理。
Jellyseerr 生产环境配置还有两件值得接着做的事:给 5055 端口挂反向代理和 TLS(docs/extending-seerr/reverse-proxy.mdx 有现成方案),以及把数据库换成 Postgres(参考 docs/extending-seerr/database-config.mdx 与 compose.postgres.yaml)。
【免费下载链接】seerrOpen-source media request and discovery manager for Jellyfin, Plex, and Emby.项目地址: https://gitcode.com/GitHub_Trending/je/seerr
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考