安装
OAR 是一个你在自己机器上运行的中继。安装它会把 oar 命令放到那台机器上。在 macOS 和 Linux 上,一行命令就能完成全部工作:它会找到或获取 Node.js、安装 OAR、写入配置并启动中继。在 Windows 上,安装器要求 Node.js 已经安装好。此外,你始终可以用 npm 或从 git 检出进行安装。
要求 #
| 要求 | 用于 | 说明 |
|---|---|---|
| macOS、Linux、Windows 或 WSL | 中继主机 | macOS 和 Linux 的安装器可以为 x64 和 arm64 CPU 获取 Node.js。WSL 使用 Linux 安装器 |
| Node.js 22.13 或更新版本 | 始终需要 | 当你的 Node.js 缺失或过旧时,macOS 和 Linux 安装器会下载它自己的副本。Windows 安装器只会检查 |
| tmux(可选) | Linux 和 macOS | 会话 worker 运行在分离的 tmux 会话中,你可以在浏览器里查看。没有 tmux 时,它们以普通后台进程运行。Windows 从不使用 tmux |
cloudflared(可选) |
内置的 Cloudflare 隧道 | OAR 不附带它;请自行安装 |
| 某个提供商的 CLI 或密钥(可选) | 与该提供商对话 | 每个提供商都有自己的登录方式;参见提供商页面 |
安装不再需要其他任何东西。等 OAR 运行起来之后,你再添加提供商。
macOS 和 Linux #
curl -fsSL oar.sh/install | sh
你可以先到 oar.sh/install 阅读该脚本。它需要 curl 或 wget,在需要获取 Node.js 时还需要 tar。它拒绝以 root 身份运行:OAR 按用户安装,任何操作都不需要 root 权限。
它会做什么 #
- 它查看机器上的现有内容并打印一份计划:它使用哪个 Node.js、把 OAR 安装到哪里、往你的 shell 配置文件中写入什么,以及中继将如何启动。
- 它询问
Continue? [Y/。按 Enter 或输入n] y继续;其他任何回答都不会做任何改动。 - 它安装
@oar-包(除非你指定了某个版本或渠道,否则安装最新版本)。sh/ oar - 它运行
oar setup --defaults --start:写入配置(一个新的认证令牌、仅限本机访问、从 3333 开始的第一个空闲端口,或你用OAR_设置的端口)并启动中继。它会打印中继 URL 和一个二维码。PORT - 它打印版本号,告诉你中继正在运行,并列出
oar、oar setup和oar doctor命令。
在有 systemd 用户会话的 Linux 上,中继会作为 systemd 用户服务启动,因此重启后它会自动回来。在其他地方(macOS、容器、没有 systemd 的 WSL),它在后台启动,重启后需要 oar start 再次启动它。
安装位置 #
适用三种情况中的哪一种,取决于机器上的 Node.js。
| 机器上有 | 安装器的做法 |
|---|---|
| Node.js 22.13 或更新版本,以及一个可写的全局 npm 文件夹(nvm、fnm、Homebrew 或用户前缀) | 像你手动操作那样运行 npm install -g |
| Node.js 22.13 或更新版本,但全局 npm 文件夹需要 root 权限(发行版或 NodeSource 包) | 用你的 Node.js 把包安装到 ~/.,并把 oar 命令放到 ~/.。你的 npm 设置不会被改动 |
没有 Node.js、版本低于 22.13、没有 npm 的 Node.js,或 OAR_ |
从 nodejs.org 把当前的 Node.js 24 下载到 ~/.(会验证校验和,约 30 MB),用它把包安装到 ~/.,并把 oar 命令放到 ~/. |
只有 OAR 使用它自己的 Node.js。~/. 中的 oar 命令把那个 Node.js 放在 PATH 的最后,因此你自己的 Node.js 在中继的会话中仍然优先。
在后两种情况下,当 ~/. 不在你的 PATH 中时,安装器会在计划中列出这一改动,然后向你的 shell 启动文件追加一行注释(# added by the OAR installer)和一行 export PATH:zsh 是 ~/.,macOS 上的 bash 是 ~/.,Linux 上的 bash 是 ~/.,其他情况是 ~/.。新终端能找到 oar;在当前终端中,运行安装器打印的那行 export PATH=...。
选项 #
标志放在 sh -s -- 之后。变量放在 sh 之前。
| 选项 | 作用 |
|---|---|
--yes、-y |
跳过提问。在脚本和 CI 中使用 |
OAR_ |
与 --yes 相同 |
OAR_ |
安装该版本而不是最新版 |
OAR_ |
从 beta 渠道安装而不是稳定渠道。其他任何值都表示稳定渠道。OAR_ 优先于它 |
OAR_ |
在配置中设置中继端口 |
OAR_ |
即使你自己的 Node.js 也能用,仍使用 ~/. 中 OAR 自己的 Node.js |
OAR_ |
打印计划但不安装任何东西 |
其他任何标志都会让安装器以 unknown option 停止。
curl -fsSL oar.sh/install | sh -s -- --yes
curl -fsSL oar.sh/install | OAR_VERSION=0.9.19 OAR_PORT=3400 sh
curl -fsSL oar.sh/install | OAR_DRY_RUN=1 sh
再次运行 #
安装器随时可以再次运行。它会再次安装包(除非你指定了某个版本,否则安装最新版本),因此它也可以用来更新。它保留现有配置,如果 OAR 自己的 Node.js 仍然足够新就复用它,重写 oar 启动器,并且只会向你的 shell 配置文件添加一次 PATH 行。
在没有终端的情况下运行 #
通过 curl 管道传入时,脚本会在终端上提问。没有终端时(例如在 CI 作业中),它会以 no terminal to ask on 停止,且不做任何改动。此时请传入 --yes。
无法处理的情况 #
- 对于 Alpine 这类 musl 系统,以及 x64 和 arm64 之外的 CPU,它没有 Node.js 构建。请自行安装 Node.js 22.13 或更新版本,然后再次运行安装器。
- 如果无法访问 nodejs.org、下载或校验和失败,或下载的 Node.js 无法运行,它会停止且不安装任何东西。
- 0.9.8 之前的版本安装方式相同,但它们的
oar setup无法启动中继。此时安装器只会写入配置而不会启动中继。
Windows #
irm oar.sh/install.ps1 | iex
这需要已安装 PowerShell 5 或更新版本,以及 Node.js 22.13 或更新版本。与 macOS 和 Linux 的安装器不同,它不会获取 Node.js、不会要求确认,也不会启动中继。它会做以下事情:
- 检查
node和npm是否存在,以及 Node.js 是否足够新。 - 打印计划。
- 运行
npm install -g --allow-。scripts= @oar- sh/ oar, better- sqlite3, koffi @oar- sh/ oar - 运行
oar setup。在终端中,它会询问是否生成新的认证令牌、访问方式(仅本机,还是局域网)、端口,以及 0.9.15 新增 中继如何启动:登录时、在任何人登录之前开机时(一次管理员提示),或根本不启动。然后它写入配置并打印中继 URL。
之后运行 oar start 启动中继;你选择的自启动方式会在下次登录或开机时启动它。oar autostart 可以稍后更改模式。接下来的内容见首次运行。
| 选项 | 作用 |
|---|---|
$env: |
安装该版本而不是最新版 |
$env: |
从 beta 渠道安装而不是稳定渠道 |
$env: |
打印计划但不安装任何东西 |
在命令之前,于同一个 PowerShell 窗口中设置变量。Windows 安装器没有 OAR_;oar setup 会询问端口,或者你运行 oar setup --port <port>。
PowerShell 阻止脚本
安装器调用的是 npm 和 oar 的 . 包装脚本,因为 Windows PowerShell 的默认执行策略会拒绝 . 脚本。如果你的策略是 Restricted 或 All,它会在最后告诉你。请输入 oar. 而不是 oar,或者执行一次以下命令,允许运行本地脚本:
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
如果安装成功但找不到 oar,请打开一个新终端,然后运行 oar.。
npm #
npm install -g --allow-scripts=@oar-sh/oar,better-sqlite3,koffi @oar-sh/oar
oar setup
npm 12 不会运行未明确允许的安装脚本。OAR 的两个依赖(better-sqlite3、koffi)会在安装脚本中获取它们的原生二进制文件:不运行这些脚本,在 npm 12 上安装仍会成功,但中继随后无法启动。0.9.14 新增 OAR 自己的安装脚本(@oar-)会在 npm 删除包之前,把早期版本存放在包内的数据复制出来;参见 0.9.14 升级说明。npm 10 和 11 接受该标志,但并不需要它。安装器、oar update 和 Update(更新)按钮会自行传入该标志。
切勿使用 --ignore-scripts 安装或更新
--ignore- 会跳过所有安装脚本:原生模块(因此中继无法启动),以及早期版本数据的复制。
oar setup 会创建配置并打印中继 URL,但除非你传入 --start,否则它不会启动中继。之后使用 oar start。npm 的全局文件夹必须可写,且其 bin 文件夹必须在你的 PATH 中;npm prefix -g 会显示它的位置。如果它需要 root 权限,不要使用 sudo:在 macOS 或 Linux 上请改用安装器。之后要更新,运行 oar update。
从 git 检出 #
git clone https://github.com/oar-sh/oar
cd oar
npm install
node bin/oar.js setup # writes server/config.json with a fresh auth token
npm start # the same as: node server/server.js
检出与全局安装有三点不同:
- 状态存放在仓库内部:
server/、config. json server/、data/ server/和uploads/ server/。全局安装把它的状态保存在logs/ ~/.(参见 OAR 文件的存放位置和文件与文件夹)。oar - 它从不会自我更新。 用
git pull、npm install更新,然后在对话的⋯菜单中用 🌄 Restart web relay(重启网页中继)重启中继。oar update用于全局安装。 oar start、oar stop和oar restart仅用于全局安装。 在检出中,npm start会在前台运行中继。
node server/ 会在这一次运行中覆盖配置,但不会保存。
按平台 #
| macOS | Linux | Windows | WSL | |
|---|---|---|---|---|
| 安装器 | curl -fs |
相同 | irm oar. |
Linux 的那个,在发行版内部运行 |
| 获取 Node.js | 是 | 是 | 否,请先安装 | 是 |
| 启动中继 | 在后台 | 如果有用户会话,作为 systemd 用户服务;否则在后台 | 否,运行 oar start |
如果启用了 systemd,作为 systemd 服务;否则在后台 |
| 登录时启动 | 尚未支持 | oar service install |
oar autostart signin 或 boot |
仅配合 systemd |
| 状态文件夹 | ~/. |
~/. |
%APPDATA%\ |
发行版内部的 ~/. |
| 会话 worker 的 tmux | 可选 | 可选 | 不使用 | 可选 |
重启后,oar start 会启动一个在后台运行的中继。
WSL #
在发行版内部运行 Linux 安装器,而不是在 Windows 中。在 WSL 的默认网络中,一个端口在发行版内部可能是空闲的,但 Windows 程序却在监听它,此时 Windows 浏览器中的 localhost:<port> 会访问到那个程序。因此新配置会选择在两侧都空闲的第一个端口,而 oar setup 会拒绝 Windows 占用的端口。当 Windows 占用中继的端口时,oar status、oar start 和 oar doctor 会发出警告。要解决它,请选择另一个端口:
oar setup --port 3400
WSL 内部的局域网地址仅对 WSL 内部可见。要在手机上访问,请使用隧道或 WSL 的镜像网络模式。
移除 OAR #
0.9.15 新增 oar uninstall 会把 OAR 从机器上移除,并保留你的数据:
oar uninstall
它会停止中继(等待正在运行的轮次)、移除 OAR 生成的自启动条目(systemd 单元,或 Windows 登录条目和开机任务,其中开机任务需要一次管理员提示)以及 OAR 写入的 Copilot 扩展包装,并在命令结束后让 npm 移除该包。你手动创建或编辑的条目会被保留并列出名称。你的配置、数据库、上传文件和日志保留在状态文件夹中,命令会打印其位置;以后重新安装会再次读取它们。oar uninstall 包含详细信息及每条消息。
要一并删除数据:
oar uninstall --purge
在你输入 delete 之后,它会删除状态文件夹;在删除其外部的数据文件夹、git 检出中的数据文件夹或 rescued- 之前,它会单独询问。它会拒绝驱动器根目录、你的主文件夹、系统文件夹,以及任何不含 OAR 配置或数据库的文件夹。这会删除你的对话。
oar uninstall 不会撤销 macOS 和 Linux 安装器在包外添加的内容:
~/.中的local/ bin oar脚本,如果安装器把它放在那里(即它的第二种和第三种情况);- 它向你的 shell 启动文件添加的两行(如果有的话)(注释
# added by the OAR installer和其下的export PATH行); ~/.,即 OAR 自己的 Node.js,如果它在那里。它位于状态文件夹中,因此不使用oar/ runtime --purge时它会保留。
在 0.9.15 之前,或当 oar 不再能运行时,手动移除这些部分:用 oar stop 停止中继,在设置了服务或 Windows 自启动的地方运行 oar service remove;用 npm uninstall -g @oar- 移除包,或对于安装器的其他两种情况,删除 ~/.;然后是上述各部分,最后只有在你想要删除数据时才删除 ~/. 或 %APPDATA%\。
OAR 文件的存放位置 #
全局安装把它的状态保存在 ~/.(Windows 上是 %APPDATA%\;OAR_ 可以移动它):
config.json data/,包含数据库和上传文件logs/,当oar启动中继时包含server.和log server-,并为每个 Node 会话 worker 提供一个err. log worker-<session>.log
用 npm 更新包绝不会触及这些内容。macOS 和 Linux 安装器可能会在那里添加两个不属于状态的文件夹:npm/(当 npm 的全局文件夹不可写时存放包)和 runtime/(OAR 自己的 Node.js)。oar doctor 会打印正在使用的路径。
之后你会拥有什么 #
oar命令。在终端中,单独输入oar会打开一个菜单,显示中继的状态和其他命令。oar setup可以更改设置(其他设备的访问方式、端口、令牌),oar url会再次打印中继 URL。- 一份带有新认证令牌的配置。使用默认访问方式时,中继只能在本机访问,地址是
http://或下一个空闲端口。localhost: 3333/ - 在 macOS 和 Linux 上:一个正在运行的中继。在 Windows 上和手动 npm 安装后:一个你用
oar start启动的中继。
检查已安装的内容:
oar --version
oar doctor
oar doctor 会打印版本、Node.js、安装模式、状态文件夹、配置路径、端口、是否设置了令牌、数据库路径和大小,以及哪些提供商 CLI 有响应。它不会做任何改动。
疑难解答 #
有关安装后的问题,参见疑难解答。
| 症状 | 怎么办 |
|---|---|
npm install -g @oar- 以 EACCES 失败 |
npm 的全局文件夹需要 root 权限,比如发行版或 NodeSource 的 Node.js。不要使用 sudo。改运行 macOS 和 Linux 安装器,它会安装到 ~/. |
| Windows 安装器说你的 Node.js 太旧 | OAR 需要 22.13 或更新版本。从 nodejs.org 安装当前版本的 Node.js,然后再次运行安装器。(macOS 和 Linux 安装器会改为下载自己的 Node.js,并在计划中说明原因) |
Windows 上出现 Node. |
从 nodejs.org 安装 Node.js 22.13 或更新版本,打开一个新终端,然后再次运行安装器 |
运行安装器后出现 oar: command not found |
打开一个新终端,或运行安装器打印的 export PATH=... 行。在 Windows 上,打开一个新终端,然后运行 oar. |
oar 在 PowerShell 中被阻止 |
输入 oar.,或运行一次 Set- |
| 安装因 node-gyp 或 prebuild 错误失败 | better- 没有适合你平台的预构建二进制文件。安装 C/C++ 构建工具链和 Python,然后重试 |
在 npm 12 安装后中继无法启动,server- 中有 better- 错误 |
npm 12 跳过了 OAR 原生依赖的安装脚本。用 npm install -g --allow- 重新安装 |
安装器提示 no terminal to ask on |
添加 --yes:curl -fs |
安装器提示 refusing to run as root |
以你自己的用户身份再运行一次,不要加 sudo |
| 没有适合你系统的 Node.js 下载(musl、其他 CPU) | 自行安装 Node.js 22.13 或更新版本,然后再次运行安装器 |
| WSL:Windows 浏览器显示另一个页面或拒绝令牌 | Windows 占用了该端口。用另一个端口运行 oar setup --port <port> |