strfry生产部署实战:Nginx+Let‘s Encrypt+systemd,5步上线高可用Nostr中继 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),仅供参考

相关新闻

最新新闻

高性能分布式KV存储引擎RocksDB入门与C/C++编码实战

高性能分布式KV存储引擎RocksDB入门与C/C++编码实战

一、RocksDB项目介绍 RocksDB是由Facebook团队开发的一个嵌入式、持久化的键值(Key-Value)存储数据库,其核心设计基于Google的LevelDB项目。当时为了应对大规模数据存储与高并发写入场景时遇到的性能瓶颈,而传统的基于B-Tree结构的数据库在随机写入场景下…

2026/8/25 12:04:36
Live2D模型Web部署实战:从零实现“她与她的猫”动态展示

Live2D模型Web部署实战:从零实现“她与她的猫”动态展示

这次我们来看一个 Live2D 模型展示项目,主题是“她,与她的猫”。Live2D 作为一种2D图像渲染技术,能让静态的插画“活”起来,实现流畅的转头、眨眼、呼吸等动作,广泛应用于虚拟主播、游戏角色和互动应用。这个项目展示了…

2026/8/25 12:04:36
MySQL 中 DATETIME 和 TIMESTAMP 类型的区别是什么?

MySQL 中 DATETIME 和 TIMESTAMP 类型的区别是什么?

MySQL 中 DATETIME 和 TIMESTAMP 的区别 这两个类型都用于存储日期和时间,但底层存储方式、范围、时区处理等方面有本质区别。下面从多个维度详细对比:一、核心区别速览维度DATETIMETIMESTAMP存储空间8字节4字节表示范围‘1000-01-01’ 到 ‘9999-12-31’…

2026/8/25 12:04:36
Web前端集成Live2D实战:从零构建交互式二次元看板娘

Web前端集成Live2D实战:从零构建交互式二次元看板娘

最近在开发一个二次元风格的社区项目时,想为个人主页增加一个动态的、有生命感的看板娘,提升用户互动体验。调研了多种方案后,最终选择了 Live2D Cubism 这一成熟的 2D 渲染技术。它能让静态的插画“活”起来,实现自然的眨眼、呼吸…

2026/8/25 12:04:36
从零实现网页Live2D看板娘:基于Pixi.js与Cubism SDK的实战指南

从零实现网页Live2D看板娘:基于Pixi.js与Cubism SDK的实战指南

最近在开发一个互动式个人主页时,想加入一个能吸引访客的“数字伙伴”。静态图片太普通,3D模型又太重,最终选择了Live2D——这个在二次元领域广为人知的2D渲染技术。它能让角色“活”起来,眨眼、转头、跟随鼠标,交互体…

2026/8/25 12:04:36
锤子助手第040个开关:启用长按截图发送小窗快捷发送的位置、验证方法与截图外发边界

锤子助手第040个开关:启用长按截图发送小窗快捷发送的位置、验证方法与截图外发边界

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Windows 疑难杂症与工单复盘案例库》 《Sysinternals实战教程》 《WINDOWS教程》 《Windows PowerShell 实战》 《IOS插件分析测试》 《超简单:用Python让Excel飞起来》…

2026/8/25 11:59:36