Deployment guide · in Chinese for now. The deploy guide is bilingual, and AI assistants can follow this document as is (Markdown).

部署中继网关

给运营方:一台云服务器、一个域名、一行命令,大约 10 分钟装好一台 TapeRelay 中继网关;装好以后用一个菜单管理。

一、准备三样东西

要求
云服务器 Ubuntu 22.04 / 24.04 或 Debian 12(x86_64 或 ARM);1 核、1 GB 内存起步(内存不到 2 GB、又没有交换空间时,安装程序加 1 GB 交换空间);硬盘至少 2 GB,按要给用户的空间准备;有公网 IP、能用 sudo;要一台普通的云服务器(要 systemd,不能是 Docker 容器)
域名 在域名服务商加一条 A 记录,指向服务器的公网 IP(云控制台里叫「公网 IP」或「弹性 IP」,不是 10.x、172.16~31.x、192.168.x 这类内网地址)。用 Cloudflare 的要关掉代理(灰色云「仅 DNS」):客户端按普通网站的规则直接校验证书
端口 在云服务商的安全组 / 防火墙里放行 TCP 80、443、8273 入站。8273 是协议的专用端口,443 备用(有的网络只放行 443),80 只用来申请证书、把不加密的请求跳到 HTTPS

TapeRelay 要独占这三个端口,用一台干净的服务器最省事。

二、安装

用 SSH 登录服务器,运行:

curl -fsSL https://taperelay.hivehubs.app/install.sh | sudo bash

它先检查服务器,再问 3 个问题(域名、运营方名字、联系方式;直接回车用括号里的),确认一次就开始装,大约 1 分钟。域名还没解析好的,可以先装着:解析对了以后证书会自动申请。想先看看脚本写了什么,用浏览器打开上面的网址就行。

不想回答问题,就把答案写在后面;给脚本、AI 用的再加 --yes(不问、不确认):

curl -fsSL https://taperelay.hivehubs.app/install.sh | sudo bash -s -- \
  --domain relay.example.com --name '我的中继' --contact me@example.com --yes
选项 意思
--domain <域名> 例如 relay.example.com(不能是 IP)
--name <名字> 运营方名字,用户在说明页里看到(默认就是域名)
--contact <联系方式> 邮箱、Telegram 等,用户看得到;可以不填
--quota <大小> 每个容器默认的配额,例如 5GB(默认 5GB;0 表示不限)
--admin <容器> 管理员容器:名字(例如 4246.0.tape)或地址(eip155:56:0x…),可以写多次;用来在网页「后台」管理
--yes 不问、不确认。没有终端时必须加;新装还要 --domain
--json 最后在标准输出打印一行 JSON 结果(过程写到标准错误),格式见 AI 部署手册
--no-list 不列进官方的运营方名单(默认装好后服务器自己上报、列进去,官方前端的用户能看到你;以后 sudo taperelay set list on|off 改)
--local-ca 证书由 Caddy 自己签:只用于没有公网域名的测试机(不上报名单)
--profile <配置名> default(默认)、test-1、test-2:官方的两台测试服务器用

退出码:0 装好了、体检全过;2 装好了、体检有不过的项(多半是域名解析或云防火墙:照提示改,不用重装);1 没装成(原来的程序和配置都没动)。详细记录在 /var/log/taperelay-install.log。

服务器下载不了安装包

在自己的电脑上打开 https://taperelay.hivehubs.app/download 下载最新的 taperelay-<版本>.tar.gz(核对用的 SHA-256 在 https://taperelay.hivehubs.app/SHA256SUMS,部署指南的「离线包」里也写着),传到服务器上运行包里的安装程序:

scp taperelay-*.tar.gz ubuntu@<服务器>:~
ssh ubuntu@<服务器>
tar -xzf taperelay-*.tar.gz && sudo bash taperelay-*/install.sh

Node.js 先从 nodejs.org 下载,下不了换 npmmirror.com 的镜像,都按安装程序里写好的 SHA-256 核对;Caddy 从它的官方软件源(dl.cloudsmith.io)装。

安装程序做的事

  1. 检查:系统和机器类型、内存、硬盘、三个端口空不空、公网 IP、域名解析到哪里;
  2. 基础软件;内存小时加交换空间;
  3. Node.js(核对 SHA-256)、Caddy;
  4. 程序装到 /opt/taperelay/current(安装包自带 TapeKit 内核和依赖,不在服务器上运行 npm);配置先生成,再用服务器自己的代码、caddy validate 核对,都通过才写;
  5. systemd 服务:以系统用户 taperelay 运行,程序只读、只能写数据目录,出错自动重启;服务器自己的防火墙(ufw、iptables)放行三个端口;
  6. 启动;Caddy 申请证书;体检(同 sudo taperelay doctor),打印结果和下一步。

再运行一次就是升级:设置和数据都保留,先备份,新版本起不来自动退回。

三、装好以后

想做的事 命令(都以 sudo taperelay 开头)
看状态、用量 status
体检(出问题先跑它) doctor
看记录 logs(Caddy 的:logs caddy;加 -f 一直跟着看)
改名字、联系方式 set name '我的中继'、set contact me@example.com
默认配额 set quota 10GB(0 不限)
收费 / 免费 set price https://… '一句话说明'、set price free
保存期限(天) set retention 30 90 90 90:依次是没有容器再用的文件、欠费容器的文件、超出配额的容器(之后从最后传的删到不超出)、收件箱里的通知各保留几天;可以只写前几个
收不收加密文件 set encrypted on、set encrypted off
管理员容器 admin add 4246.0.tape、admin remove …、admin list
给某个容器另定配额 quota <容器> 50GB(写 default 回到默认的)
下架 / 恢复一个对象 takedown <哈希>、untakedown <哈希>
存得最多的容器(超出配额的标出来) accounts
下载流量(每天的合计、流量最多的对象) traffic(默认最近 7 天;traffic 30 看 30 天)
换域名 set domain <新域名>(用户要重新选用,慎重)
列不列进官方的运营方名单 set list on、set list off(默认列进;官方大约每 10 分钟读一次你的 /v1/info,名字、联系方式跟着变)
宣布退出 set exit 2027-03-01(有接手方就把它的服务器名字写在后面;set exit cancel 撤销),见第五节

改设置后自动重启服务(约 2 秒)生效。名字、配额、价格、保存期限这些政策写在数据目录的 policy.json 里,和网页「后台」改的是同一份;status 写明现在生效的是哪一份。

网页后台:加了管理员容器以后,可以用这个容器在 TapeRelay 网页前端(官方的 https://relay.hivehubs.app/,或你服务器上的 https://你的域名/app/)的「后台」里看各容器的用量、改政策、下架、宣布退出,不用登录服务器;用上面的命令效果一样。

四、交给用户

sudo taperelay share 生成一段话(名字、说明页、服务器名字、配额、价格、联系方式、前端的网址),发到群里、网站上。开发者看说明页和开发者指南(https://taperelay.hivehubs.app/developers.html);只想存文件的用户不用装任何东西:

  1. 打开官方前端 https://relay.hivehubs.app/,连接钱包(持有他的 TapeOut 容器的那个),打开容器;
  2. 到「运营方」里勾选你这一家(名单里没有就填 你的域名:8273;建议再勾一家,文件各存一份),点「选用」,在钱包里确认一笔交易(写进容器的链上记录,付一点手续费);
  3. 之后上传、分享、收发文件都经过你的服务器;想收加密文件,在「密钥」里生成一对密钥(再一笔交易),并导出备份。

你的服务器上也有一份同样的前端:https://你的域名/app/。浏览器按网址存加密私钥、「我的文件」这些本机记录,在副本里做的只存在你的网址下,你的服务器关了就找不回,所以副本顶部会提醒用户先导出备份、平时用官方前端;分享出去的链接一律以官方前端开头。

运营方名单:装好后服务器自己上报,官方读你的 /v1/info 核对连得上就列出,不用申请(D-328);体检里的「运营方名单」一项写着在不在名单里。注册表上线后,官方前端只列出登记过、在保(交了押金、照常运营)的运营方,不能再手填名单外的服务器。登记的办法开放时公布在部署指南网站上。

五、升级、备份、退回、退出、卸载

命令(sudo taperelay …) 说明
升级 upgrade 从 taperelay.hivehubs.app 取最新版:先备份数据库和配置,换程序,新版本起不来自动退回;设置和数据都保留
备份 backup 数据库、policy.json、配置、Caddyfile,放在 /var/lib/taperelay/backups,只留最近 10 份。用户的文件本身很大,不在备份里:用云服务商的磁盘快照防硬盘坏
恢复 backup list、backup restore <名字> 备份之后的改动(新上传的记录等)会丢
退回 rollback 退回上一个版本,数据库和配置用升级前的备份
退出 set exit <日期> [接手方…] 宣布哪天(UTC)停止服务,从宣布起至少留 90 天:说明页顶部写明日期;有接手方的照常收新文件,没有的新上传一律拒绝、读取照常到那天;那天之前不得删用户的文件。set exit cancel 撤销。注册表上线后以注册表里的退出时间为准
卸载 uninstall 默认留着数据和配置;加 --purge 一起删(找不回来)。不想干了先宣布退出,到期再卸载

六、服务器上的布局

/opt/taperelay/current/TapeRelay/   程序(只有 root 能改);上一版在 /opt/taperelay/old
/opt/taperelay/current/TapeKit/kernel/
/opt/node-v<版本>-linux-<机器>/      Node.js(/usr/local/bin/node 是链接)
/usr/local/bin/taperelay           运维命令
/etc/taperelay/server.json         配置(root:taperelay 640,服务只能读)
/etc/taperelay/install.json        安装时选的配置名、证书来源
/etc/caddy/Caddyfile               Caddy:说明页、443 和 8273 两个端口、80 跳到 HTTPS
/var/lib/taperelay/data/           数据库、对象、policy.json(只有 taperelay 能读写)
/var/lib/taperelay/backups/        备份
/var/log/taperelay-install.log     安装、升级的详细记录

服务器上不放任何密钥:正式模式用不到;证书的私钥由 Caddy 保管,我们的代码碰不到。

许可证:代码 MIT(安装包里的 TapeRelay/LICENSE),规范 CC0。