strfry生产部署实战NginxLets Encryptsystemd5步上线高可用Nostr中继【免费下载链接】strfrya nostr relay项目地址: https://gitcode.com/gh_mirrors/st/strfrystrfry 是一款基于嵌入式 LMDB 数据库的高性能 Nostr 中继relay无需外部数据库、支持配置热加载与零停机重启。本文将带你在一台 VPS 上用 Nginx 反向代理 Lets Encrypt 免费证书 systemd 服务托管通过 5 个步骤快速上线一个公网可访问、崩溃自动重启的高可用 Nostr 中继零基础也能跟着做。 本文基于项目官方部署文档 docs/DEPLOYMENT.md以 Ubuntu 22.04 为例。部署前的准备工作VPS 选型与 DNS 解析在动手之前先确认你手上有这 3 样东西️ 一台可 SSH 登录的 VPS官方文档推荐配置1 vCPU / 2GB 内存 / 50GB NVMeUbuntu 22.04 起步 一个已备案/已解析的域名例如relay.yourdomain.com 域名管理权限用于添加 DNS 记录DNS 解析步骤在域名服务商处添加一条 A 记录把relay.yourdomain.com指向 VPS 的公网 IP。解析一般几分钟到几小时内生效。 为什么需要域名Lets Encrypt 证书必须绑定域名签发且 Nostr 客户端连接的是wss://地址没有域名就走不通 HTTPS。第一步安装依赖并编译 strfry Nostr 中继strfry 是 C20 项目需要源码编译。登录 VPS 后依次执行sudo apt update # 下载 strfry 源码 git clone https://gitcode.com/gh_mirrors/st/strfry cd strfry # 安装编译依赖含 LMDB、zstd、secp256k1 等 sudo apt install -y git build-essential libssl-dev zlib1g-dev \ liblmdb-dev libflatbuffers-dev libsecp256k1-dev libzstd-dev ufw # 编译并安装 git submodule update --init make setup-golpe make -j2 sudo cp strfry /usr/local/bin☕ 单核 VPS 上编译大约需要几分钟。编译完成后strfry可执行文件就装好了它内部包含relay中继、stream同步、scan查询等多个子命令其中 src/apps/relay/cmd_relay.cpp 是strfry relay的入口实现。第二步创建数据目录与修改 strfry.conf 配置创建专用运行用户和数据目录隔离权限避免以 root 运行sudo useradd -M -s /usr/sbin/nologin strfry sudo mkdir -p /var/lib/strfry sudo chown strfry:strfry /var/lib/strfry sudo chmod 755 /var/lib/strfry修改配置文件把项目自带的 strfry.conf 中的数据库目录改到数据目录db /var/lib/strfry/然后再做两处生产环境必改项配置项默认值生产建议relay.bind127.0.0.1保持 127.0.0.1由 Nginx 转发更安全relay.realIpHeader空填x-forwarded-for拿到客户端真实 IPinfo.name/info.description默认值改成你的中继名称客户端列表里会展示最后把配置放到系统目录sudo cp strfry.conf /etc/strfry.conf sudo chown strfry:strfry /etc/strfry.conf⚠️ 小提示nofiles参数控制最大打开文件数建议参照系统硬限制ulimit -Hn的值来设置连接数大的中继别设太小。第三步Nginx 反向代理 WebSocket 最快配置方法安装 Nginx 并删除默认站点然后创建/etc/nginx/sites-available/defaultsudo apt install nginx certbot python3-certbot-nginx sudo rm -f /etc/nginx/sites-available/default核心配置关键是两行 WebSocket Upgrade 头缺一不可server { server_name relay.yourdomain.com; location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_pass http://127.0.0.1:7777; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection upgrade; } }然后sudo service nginx restart。 为什么推荐 Nginx 终结 TLSstrfry 官方架构说明中建议在生产环境中在 strfry 之前终结 TLS例如用 Nginx这样 Nginx 还能顺便提供限流、真实 IP 传递等能力。第四步systemd 托管实现自动重启高可用这是高可用的关键一步——进程崩溃自动拉起、开机自启。项目里已附带参考单元文件 debian/strfry.service把下面的内容写入/etc/systemd/system/strfry.service[Unit] Descriptionstrfry relay service Afternetwork.target [Service] Userstrfry ExecStart/usr/local/bin/strfry relay Restarton-failure RestartSec5 ProtectHomeyes NoNewPrivilegesyes ProtectSystemfull [Install] WantedBymulti-user.target几个安全参数的作用Restarton-failureRestartSec5崩溃后 5 秒自动重启7×24 无人值守Userstrfry以非 root 用户运行缩小攻击面NoNewPrivileges/ProtectSystem禁止进程提权、保护系统目录启用并启动服务sudo systemctl daemon-reload sudo systemctl enable strfry sudo systemctl start strfry sudo systemctl status strfry 加分项strfry 支持零停机重启——它使用 LinuxREUSE_PORT选项允许多个实例监听同一端口。升级二进制时先启动新实例再对旧进程发送kill -USR1 $OLD_PID触发优雅退出旧连接处理完才退出用户全程无感知详见 README.md 的 Zero Downtime Restarts 一节。第五步UFW 防火墙 Lets Encrypt 免费证书一键签发先收紧防火墙只放行 SSH 和 Nginxsudo ufw allow 22/tcp sudo ufw allow Nginx Full sudo ufw default deny incoming sudo ufw default allow outgoing sudo ufw enable再一键签发免费 HTTPS 证书certbot 会自动改好 Nginx 配置sudo certbot --nginx -d relay.yourdomain.com✅ 完成后你的中继地址就是wss://relay.yourdomain.com certbot 默认配置了自动续期/etc/cron.d或 systemd timer证书到期前会自动续签无需手动操心。上线验证3 条命令确认 Nostr 中继运行正常# 1. 确认 strfry 本机监听正常应返回中继信息页 curl localhost:7777 # 2. 确认 Nginx 80 端口正常 curl localhost:80 # 3. 确认证书生效应显示 relay.yourdomain.com 的有效期 curl -vI https://relay.yourdomain.com 21 | grep -i expire\|subject三条命令都正常后打开任意 Nostr 客户端添加wss://relay.yourdomain.com即可收发消息 常见坑位与进阶技巧问题现象原因与解法客户端连上就断开Nginx 配置缺少Upgrade/Connection头或 strfry.conf 的bind没写对证书签发失败DNS A 记录还没生效dig relay.yourdomain.com检查解析日志里大量连接断开strfry 默认autoPingSeconds 55秒发 WebSocket PING需小于 Nginx 空闲超时想限制垃圾写入配置writePolicy.plugin挂一个策略脚本任意语言都可写见 docs/plugins.md上线后的常用运维操作 从其他中继同步事件strfry stream wss://relay.example.com 查看数据库中某类事件strfry scan {kinds:[0,1]}️ 删除某个用户的全部事件strfry delete --filter {authors:[pubkey]} 大量配置项改动无需重启热加载仅带 restart required 标记的参数需要重启总结回顾一下这条 5 步链路DNS 解析 → 编译安装 → 配置数据目录 → Nginx 反代 → systemd 防火墙 证书。整套流程走完你就拥有了一个带免费 HTTPS 证书、崩溃自动重启、支持零停机升级的生产级 Nostr 中继。strfry 的 LMDB 存储、持久化写入事件落库后才返回 OK和 negentropy 同步协议会让它在中继数量上来后依然保持低延迟与高一致。更多架构细节线程模型、DBScan 查询引擎、压缩字典等可以阅读 README.md 的 Architecture 章节中继网格组网可以看 docs/router.md。【免费下载链接】strfrya nostr relay项目地址: https://gitcode.com/gh_mirrors/st/strfry创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考