---
title: "把 Jellyfin、Immich 等自托管应用分享给亲友"
description: "通过 Tailscale 分享已有媒体应用，为指定人员设置期限，或发送公开的浏览器访客链接。"
url: "https://tslink.md/zh/docs/share-media-apps"
locale: "zh"
product_version: "0.2.0"
source: "https://github.com/anydoor7/tslink/blob/v0.2.0/docs/apps.md"
---

> Documentation index: https://tslink.md/zh/llms.txt · Installed binary is authoritative: `tslink manifest`.

要把 Jellyfin 或 Immich 分享给亲友，可用 TSLink 注册运行中的应用、获取准确私有地址，再向每个人的 Tailscale 登录账户授予有期限的权限。私有访问者需要先安装 Tailscale。Tailnet 之外的人可接受一次 gateway 设备共享，访问多个路由应用。只用浏览器的访客则使用明确公开、有期限的访客链接；链接可转发，不能证明身份。

TSLink 代理已有应用。安装、配置、备份与安全仍由你负责，包括应用账户与认证。主机必须保持唤醒和联网。TSLink 是独立项目，并非由 Tailscale 制作或背书。

## Jellyfin

TSLink 的 `jellyfin` recipe 目标为 `http://127.0.0.1:8096`。Jellyfin 可选 HTTPS 端口 8920 不是该 recipe 的目标。在本地完成初始设置，保留用户登录，Base URL 留空，将实际 TSLink 来源 IP 加入 Jellyfin 的 Known Proxies。见[此版本的 recipe](https://github.com/anydoor7/tslink/blob/v0.2.0/docs/apps.md#jellyfin)。

[安装 TSLink](https://tslink.md/zh/docs/installation.md)，另行运行 Jellyfin，再预览并应用：

```bash
tslink apps share jellyfin --allow you@example.com
tslink apps share jellyfin --allow you@example.com --yes
tslink url jellyfin --wait
```

将 `you@example.com` 换成自己的实际 Tailscale 登录账户。若主机映射不同，在两条 recipe 命令中都加入 `--proxy 127.0.0.1:<host-port>`。按提示完成入网或管理员设备审批。注册不证明应用可用；邀请前先打开返回地址，测试应用。

## Immich

`immich` recipe 直接访问原生 HTTP：`http://127.0.0.1:2283`。在本地完成首个管理员设置，保留 Immich 登录。使用独立主机名的根路径，将 TSLink 返回的准确 URL 填入移动客户端的服务器地址。见[此版本的 recipe](https://github.com/anydoor7/tslink/blob/v0.2.0/docs/apps.md#immich)。

```bash
tslink apps share immich --allow you@example.com
tslink apps share immich --allow you@example.com --yes
tslink url immich --wait
```

Recipe 保留已有注册。两个 recipe 都保留规范外部 Host；请核对应用的主机名与 Origin 设置。Immich 上传仍受 TSLink 默认 32 MiB 请求体上限和 30 秒请求体无进展超时约束。大文件或慢速上传需选择合适的有限[请求限制](https://tslink.md/zh/docs/health-and-alerts.md#uploads-and-request-limits)；TSLink 不会备份照片库。

## 选择谁可以访问

### 自己的设备

1. 按上面的 recipe 注册应用并完成入网，保留自己的 `--allow` 登录账户。
2. 在手机、平板或其他访问设备安装 Tailscale，登录自己的 tailnet，完成所需审批并保持连接。Tailnet 策略必须允许访问应用。
3. 在浏览器打开 `tslink url jellyfin --wait` 或 `tslink url immich --wait` 返回的准确地址，或填入兼容客户端的服务器地址设置。按应用要求登录。

### 给指定的人设置期限

1. 对于已有的 tailnet 成员，使用其实际 Tailscale 登录账户：

   ```bash
   tslink people add alice@example.com --apps jellyfin,immich --for 7d
   ```

2. 发送准确应用地址。Alice 安装 Tailscale、使用获授权账户登录，再按 tailnet 网络策略打开地址。保留各应用自己的账户与登录。

3. 用 `tslink people list --json` 查看授权。提前结束访问可运行 `tslink people remove alice@example.com`。移除与到期拒绝新请求，无需停止应用或守护进程；已接受的流可能继续，已交付的数据无法收回。见[人员分享](https://tslink.md/zh/docs/people-sharing.md)。

首次人员授权会将所选应用设为按人限制；上面的 owner `--allow` 规则保留你的访问。未列出的调用者需要有效授权或明确的旧 allow 规则。

### 通过 gateway 模式邀请 tailnet 之外的人

1. 启用私有 portal，为已注册的应用添加路由：

   ```bash
   tslink portal enable --owner you@example.com --gateway
   tslink portal route add jellyfin
   tslink portal route add immich
   tslink portal route list --json
   tslink status --urls
   ```

2. 对于新访问者，授予权限并生成 gateway 邀请：

   ```bash
   tslink people add bob@example.com --apps jellyfin,immich --for 7d --invite --print-links --qr
   ```

   创建邀请需存储用户自己的 Tailscale API token；使用[标准输入登录方式](https://tslink.md/zh/docs/commands.md#tslink-login)。生成的消息由你发送。邀请链接属于持有即能使用的凭证，请私下发送。此处 `--qr` 输出的二维码指向 gateway 主页，不是邀请链接；邀请二维码需加 `--qr-invite @gateway`。已存在的人员使用 `people update`，不要重复 `people add`。

3. Bob 安装 Tailscale，以获授权账户登录，接受 gateway 设备共享，并保持连接。随后打开主页或 status 返回的准确路由 URL。每条路由使用 gateway 主机名上的独立 HTTPS 端口，不要猜地址。

4. 后续修改路由应用授权无需再次邀请。非路由应用仍需单独共享，默认逐应用分享也继续可用。入网、网络策略、失效邀请恢复和兼容限制见 [gateway 模式](https://tslink.md/zh/docs/portal-gateway.md)。

Gateway 各端口属于不同浏览器 origin，但共用 cookie，不能隔离应用 cookie。保留应用认证，验证每个应用的代理与 Origin 行为。TCP、Funnel 和访客链接应用不能成为 gateway 路由。

### 只用浏览器的访客链接

1. 选择一个**没有 gateway 路由**的 HTTP 代理应用。若已按上面的 gateway 路径配置，选择访客模式前先移除该应用路由；不要将两条路径组合使用。先验证应用认证与私有应用节点入网状态。
2. 明确创建有截止时间的公开链接：

   ```bash
   tslink guest create jellyfin --for 3d --public --print-link
   ```

   加 `--pin` 可通过隐藏终端输入 PIN，并另行发送。用 `status` 与 `doctor` 核实实际 Funnel 可用性；创建操作本身只保存配置。
3. 私下发送原始链接。访客只需浏览器；设置了 PIN 就输入 PIN。这是可转发的公开链接凭证，不能验证人的身份，也不承诺兼容原生客户端。
4. 用 `tslink guest list --json` 找到 ID，再用 `tslink guest revoke <id>` 结束访问。受跟踪流的取消及撤销边界见[访客链接](https://tslink.md/zh/docs/guest-links.md)。文件、文件夹与原始 TCP 不会通过 TSLink 公开。

## 分享前检查

HTTPS 应用名称会出现在公开证书日志中，请选择愿意让别人看到的名称。Tailscale 策略与应用认证仍然适用。先检查 `tslink status --json` 和 `tslink doctor --json`，再让目标接收者实际访问；后端健康不证明接收者可达。

相关：[Gateway 模式](https://tslink.md/zh/docs/portal-gateway.md) · [人员分享与撤销](https://tslink.md/zh/docs/people-sharing.md) · [浏览器访客链接](https://tslink.md/zh/docs/guest-links.md) · [应用 recipes](https://tslink.md/zh/docs/use-cases.md)。

来源：TSLink v0.2.0 [apps.md](https://github.com/anydoor7/tslink/blob/v0.2.0/docs/apps.md)、[people.md](https://github.com/anydoor7/tslink/blob/v0.2.0/docs/people.md)、[portal.md](https://github.com/anydoor7/tslink/blob/v0.2.0/docs/portal.md)、[guest-links.md](https://github.com/anydoor7/tslink/blob/v0.2.0/docs/guest-links.md) 与 [README](https://github.com/anydoor7/tslink/blob/v0.2.0/README.md)。
