首页
留言板
统计
友链
关于
推荐
图片压缩
在线PO转MO
柠娜汉化站
搜索
1
PCL我的世界启动器设置第三方登录
44 阅读
2
Debian搭建wireguard组网
12 阅读
3
开源、轻量、易用的服务器监控,实战部署哪吒监控
4 阅读
4
哪吒监控配置nginx反向代理
3 阅读
5
Rust静态编译
3 阅读
服务器
技术
闲谈
MC
VPN
登录
搜索
标签搜索
debian
服务器
Linux
监控
雨云
wireguard
Android
MC
我的世界
硬盘
nginx
反向代理
哪吒
部署
Rust
静态编译
组网
局域网
联机
虚拟网卡
mohuangNPC
累计撰写
18
篇文章
累计收到
1
条评论
首页
栏目
服务器
技术
闲谈
MC
VPN
页面
留言板
统计
友链
关于
推荐
图片压缩
在线PO转MO
柠娜汉化站
搜索到
18
篇与
的结果
2025-12-08
Rust静态编译
最近在开发的过程中,遇到了一些编译问题,有跨平台编译的问题,有动态编译不兼容的问题。经过一番折腾,最后完美解决了,故记录一下这些问题的解决方案。首先要普及一些基础概念:Rust 编译的时候会用到两种链接方式:静态链接和动态链接。Rust 一般用静态链接,就是把所有需要的东西都打包到一个文件里,这样程序就能独立运行了。但是对于一些系统自带的库(比如 Linux 的 libc),Rust 还是会用动态链接。这样做有个小问题:如果你的程序用了动态链接,那它运行的时候就需要系统上有对应的库文件,而且版本还得对得上。要是系统上没有这个库,或者版本不对,程序就跑不起来。别着急,接下来我们会介绍几个解决办法,告诉你哪些方法更好用。问题1在本地 linux 环境中,编译的 rust 程序上传部署到 linux 服务器后,运行出错可能会看到类似version 'GLIBC_2.33' not found (required by /path/to/your/program)的提示。 这个提示的意思就是编译的时候依赖了服务器上版本比较低或是不兼容的glibc库,从而导致了在服务器上找不到正确的glibc,于是就出错了。解决方法也并不难:升级服务器上的 glibc(风险比较高,不推荐)使用静态编译# 查看当前存在的工具链 rustc --print target-list # 先安装 musl 工具链 rustup target add x86_64-unknown-linux-musl # 编译时指定 musl cargo build --release --target x86_64-unknown-linux-musl验证是否成功编译后用这个命令检查依赖:ldd 你的程序名如果输出显示 not a dynamic executable,恭喜你!这程序已经是完全体了,不依赖系统库了!然而,静态编译也带来了一个问题:文件体积可能会显著增加。原本小巧的程序(例如 5MB)在静态编译后可能会膨胀到 20MB 甚至更大,尤其是当使用了复杂库(如 OpenSSL)时,这种现象更为明显。别担心,这里有一些方法可以帮助你“瘦身”:第一:移除调试符号调试符号文件包含代码定位信息,虽然方便调试但显著增加体积。建议正式发布时移除。操作方式:手动移除(通用方法)strip 目标程序名称自动移除(Rust专属)在 Cargo.toml 添加:[profile.release] strip = true# 需 Rust 1.59+ 版本效果:通常可减少 30%-50% 体积第二:编译优化配置通过编译器优化策略实现深度瘦身配置方案(Cargo.toml):[profile.release] opt-level = "z"# 最高级别体积优化 lto = true# 全局链接优化(显著增加编译时间) codegen-units = 1# 提升优化密度 panic = "abort"# 禁用栈展开信息(注意:影响错误处理)注意事项:建议搭配 RUSTFLAGS="-C target-cpu=native" 提升性能 编译时间可能延长 2-3 倍第三:二进制压缩(进阶方案)使用 UPX 进行可执行文件压缩操作流程:1.安装工具# Debian/Ubuntu apt install upx # macOS brew install upx # CentOS/RHEL yum install upx 2.执行压缩 upx --best 目标程序名称风险提示:可能触发杀毒软件误报首次启动增加 100-200ms 解压时间不推荐用于高频调用的命令行工具问题2在rust中使用openssl依赖的时候,会有一大堆的错误场景找不到 OpenSSL 库或头文件错误信息示例:“openssl/ssl.h: No such file or directory” “Could not find OpenSSL installation”原因:系统上未安装 OpenSSL 的开发包或头文件;或者环境变量(如 OPENSSL_DIR、OPENSSL_LIB_DIR)未正确配置,导致构建脚本无法定位到 OpenSSL 的位置。版本不兼容问题错误信息示例: 构建失败时提示 OpenSSL 版本不匹配,或者找不到期望的符号(如undefined reference to 'CRYPTO_num_locks'原因: 系统中安装的 OpenSSL 版本(例如 1.1 与 3.0)与 openssl-sys 或其它依赖库要求的版本不一致,导致编译或链接时符号不匹配。对于上面的问题,解决方法也很简单,如果能替换成rustls的话,就优先替换成rustls,因为有测试表明,rustls 的性能表现比openssl更加优越,一般的依赖都可以设置一些feature来改用rustls,如:tokio-tungstenite = { version = "0.25.0", features = ["rustls"] }但是如果实在不能更换的话,只能通过编译源码的方式来实现静态编译,可以通过依赖的vendored的features将第三方依赖的代码直接包含在项目代码仓库中,如libsqlite3-sys = { version = "0.30.1", features = ["bundled-sqlcipher-vendored-openssl"] }这会启用openssl-sys的vendored特性,自动下载并编译OpenSSL源码。安装构建工具 确保系统已安装编译OpenSSL所需的工具:Linux (Ubuntu/Debian):apt-get update apt-get install build-essential perl pkg-configmacOS:brew install make perlWindows:安装Strawberry Perl(确保perl在PATH中)。安装NASM并添加到PATH。安装完perl,就可以成功的编译并运行了。常见问题解决编译错误(可能是因为缺少工具,如make、perl)。Windows环境问题:确保Perl和NASM路径正确,且无空格或特殊字符。最后在 Rust 的跨平台开发中,动态链接的兼容性问题与第三方库的依赖管理是常见的挑战。通过本文的实践,我们可以总结出以下关键经验:1.静态编译为王优先使用 musl 目标进行全静态编译,消除对系统库(如 glibc)的依赖。虽然这会增加应用的体积,但是可以通过strip调试符号、优化编译配置(如 opt-level = "z")或者用 UPX 来减少体积膨胀的影响。2.依赖库的灵活替换优先选择纯 Rust 实现的库(如 rustls 替代 openssl),避免 C 绑定带来的跨平台问题。大多数依赖库已经支持通过 features 切换具体的实现(例如 tokio-tungstenite 的 rustls 特性)。 对于没得替换的 C 库(如 OpenSSL),建议启用 vendored 特性(如 openssl-sys = { features = ["vendored"] })实现源码级静态编译,避免依赖系统版本。注:本文借鉴“云梦量化科技Rust开发工程师Rust炼金士”的文章原文地址: https://zhuanlan.zhihu.com/p/25127947378
2025年12月08日
3 阅读
0 评论
0 点赞
2025-12-05
哪吒监控配置nginx反向代理
引言配置哪吒监控的Nginx反向代理如何安装哪吒监控请查看 教程配置过程server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name monitor.demonland.top; ssl_certificate /etc/nginx/conf.d/cert/monitor/monitor.demonland.top_chain.pem; # 域名证书路径 ssl_certificate_key /etc/nginx/conf.d/cert/monitor/monitor.demonland.top_key.key; # 域名私钥路径 ssl_stapling on; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; # 如果与其他配置冲突,请注释此项 ssl_protocols TLSv1.2 TLSv1.3; underscores_in_headers on; keepalive_time 24h; keepalive_requests 100000; keepalive_timeout 120s; #set_real_ip_from 0.0.0.0/0; # 替换为你的 CDN 回源 IP 地址段 #real_ip_header CF-Connecting-IP; # grpc 相关 location ^~ /proto.NezhaService/ { grpc_read_timeout 300s; grpc_send_timeout 300s; grpc_socket_keepalive on; grpc_pass grpc://grpcservers; access_log off; } location ~* ^/api/v1/ws/(server|terminal|file)(.*)$ { proxy_set_header Host $host; #proxy_set_header nz-realip $http_cf_connecting_ip; # 替换为你的 CDN 提供的私有 header,此处为 CloudFlare 默认 proxy_set_header nz-realip $remote_addr; #如果你使用nginx作为最外层,就把上面一行注释掉,启用此行 proxy_set_header Origin https://$host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 3600s; proxy_send_timeout 3600s; proxy_pass http://172.32.100.9:8008; } location / { proxy_set_header Host $host; #proxy_set_header nz-realip $http_cf_connecting_ip; # 替换为你的 CDN 提供的私有 header,此处为 CloudFlare 默认 proxy_set_header nz-realip $remote_addr; # 如果你使用nginx作为最外层,就把上面一行注释掉,启用此行 proxy_read_timeout 3600s; proxy_send_timeout 3600s; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_max_temp_file_size 0; proxy_set_header X-Forwarded-Proto $scheme; # 如果你使用nginx作为最外层,就启用此行避免无法正确读取访问的协议 proxy_pass http://172.32.100.9:8008; } } upstream grpcservers { server 172.32.100.9:8008; # 如果有多个可以定义多次 keepalive 1800; # 保持长连接的秒数。如果不配置这个参数,Nginx 与你的服务之间的连接,大概率会是短连接而不是长连接。 }
2025年12月05日
3 阅读
0 评论
0 点赞
2025-12-05
开源、轻量、易用的服务器监控,实战部署哪吒监控
你是否也曾担心:服务器突然宕机,数据丢失?网站访问速度变慢,影响用户体验?对服务器状态一无所知,无法及时处理问题?现在,有了 哪吒监控 ,这些问题统统可以解决! 哪吒监控是一款开源、轻量、易用的服务器监控工具,可以帮助你实时了解服务器状态,及时发现并解决问题。哪吒监控是什么哪吒监控是一款开源的服务器监控面板,它可以监控服务器的 CPU、内存、硬盘、网络等各项指标,并提供实时图表和告警功能。为什么选择哪吒监控开源免费: 任何人都可以免费使用和贡献。轻量易用: 占用资源少,部署简单,操作方便。功能强大: 支持多种监控指标、告警方式、自定义面板等。跨平台支持: 支持 Linux、Windows、macOS 等多种操作系统。为什么需要服务器监控?服务器是互联网服务的基石,其稳定运行至关重要。然而,服务器在运行过程中难免会遇到各种问题,例如:资源瓶颈: CPU 占用过高、内存不足、硬盘空间不足等。网络异常: 网络延迟、丢包、连接超时等。服务故障: 服务崩溃、进程退出等。开始部署哪吒监控首先我们需要一台处于公网的服务器,这里我们使用雨云服务器,服务器配置不需要太高,2H2G即可雨云优惠注册地址 :https://www.rainyun.com/mohuang_雨云优惠码 :mohuang(使用优惠码注册可获得首月5折优惠券,还可在积分商城领取8折新购券,8折券可叠加官方的年付7折优惠,也就是5.6折)注册完账号后进到 雨云控制台,点击云产品→云服务器→立即购买: 这里我们选择湖北的,各位可根据自己的延迟选择,2H2G足够系统我们手动选择debian13,并勾选docker环境,因为哪吒官方的安装可以基于docker安装,更加简单易用然后点击下方的立即购买即可,购买后可在云产品>云服务器> 我的云服务器 中看到点击卡片中的管理可进入服务器详情页面:开始连接服务器下载安装并打开ssh客户端软件,ssh客户端软件推荐mobaxterm或xshell/xftp我这里用mobaxterm,打开软件后点击会话→SSH,在远程主机处输入你的服务器的IP地址,然后点击好的。mobaxterm下载地址 我这个mobaxterm是直接免安装的,解压到文件夹中直接运行MobaXterm_Personal_24.3.exe就可使用然后输入账号并按回车,账号一般默认为root,接着输入密码并按回车确定,输入密码时不会显示出来。温馨提示:在SSH终端中按住鼠标左键选择文字,然后松开鼠标,再在空白处单击一下,这样就把选中的文字复制了;在SSH终端单击右键即为粘贴。查看docker版本进入服务器之后执行命令查看docker是否正常安装以及docker版本docker --version安装哪吒面板运行命令curl -L https://gitee.com/naibahq/scripts/raw/main/install.sh -o nezha.sh && chmod +x nezha.sh && CN=true ./nezha.sh推荐选择docker安装,我们输入1回车再次输入1然后回车站点标题可以随便写,之后搭建完成也可以随时改暴漏端口可以默认,各位也可以写自己喜欢的,默认的话直接回车就好这里就是填被监控的客户端连接服务端的地址,这里有个小坑,一定要域名/ip:端口,“:端口”不能少,不要觉得80和443它会默认带,它不会默认带 ::(怒) ,根据我的测试即使这边填写了域名端口,但是客户端也可以直接通过ip端口连接的这里根据个人喜好选择,我这里就输入N了,然后回车这还用说嘛,肯定选1回车开始安装后如果出现以下情况则属于网络问题无法下载镜像此时可以使用我准备的脚本导入,如果可以正常下载或者各位会自行配置代理镜像源,则直接移步下一步curl -L https://gitee.com/edrik_1/typecho/raw/master/nezha-dashboard.tar -o nezha-dashboard.tar && docker load -i nezha-dashboard.tar安装完成访问面板这时我们可以直接ip:端口访问面板点击右上角的登录,默认用户名密码是admin/admin点击更新个人资料可以修改信息和默认密码,强烈建议修改默认密码点击系统设置进入系统设置页面,勾选使用直连IP保存客户端接入然后我们回到管理后台,点击安装命令可以复制客户端的一键安装命令,这里咱们以Linux为例,点击之后会自动复制命令内容大致如下curl -L https://raw.githubusercontent.com/nezhahq/scripts/main/agent/install.sh -o agent.sh && chmod +x agent.sh && env NZ_SERVER=example.com:443 NZ_TLS=false NZ_CLIENT_SECRET=f3wpv1IDXDj0vzoX3U0JQLJ6LmbHq33M ./agent.sh命令解析我们解析一下https://raw.githubusercontent.com/nezhahq/scripts/main/agent/install.sh 代表脚本下载路径,这是github地址,各位如果无法下载的话,这个地址可以改为我提供的gitee地址https://gitee.com/edrik_1/typecho/raw/master/agent.shenv NZ_SERVER=example.com:443 NZ_TLS=false NZ_CLIENT_SECRET=f3wpv1IDXDj0vzoX3U0JQLJ6LmbHq33M ./agent.sh 这一段是设置环境变量并运行脚本,这里注意要改一下需要改为env NZ_SERVER=example.com:443 NZ_TLS=false NZ_CLIENT_SECRET=f3wpv1IDXDj0vzoX3U0JQLJ6LmbHq33M CN=true ./agent.sh,需要加一个CN=true否则脚本中的部分文件会从墙外下载导致下载失败NZ_SERVER=example.com:443就是你安装时候输入的域名端口,如果你的服务端还没有域名,换为ip:端口也是可以的,如果你没使用nginx反向代理等软件改过端口或者安装时候自己没有修改过端口,那么端口默认就是8008NZ_TLS=false代表客户端连接服务端的时候是否要开启tls,因为咱们服务端安装的时候选择不适用tls,所以这里设置false这里为了测试方便,我们就不新开一台服务器了,我们可以本机执行一下这个安装命令,看看监控端是否显示了咱们本机的信息,根据上一步说的,咱们修改后的命令为curl -L https://gitee.com/edrik_1/typecho/raw/master/agent.sh -o agent.sh && chmod +x agent.sh && env NZ_SERVER=192.168.200.167:8008 NZ_TLS=false CN=true NZ_CLIENT_SECRET=f3wpv1IDXDj0vzoX3U0JQLJ6LmbHq33M ./agent.sh其中192.168.200.167:8008是我的本机ip,各位不要直接复制了哦,要看根据服务器的信息来填,这就代表运行成功咱们返回前台看已经出现了点击服务器标签可以进入查看详情咱们再次进入管理后台,并点击修改这里可以修改服务器显示的名字和备注完结至此完结撒花,更多设置可以查看 官方文档 自行定制
2025年12月05日
4 阅读
0 评论
0 点赞
1
...
3
4
Warning
: file_put_contents(/var/www/html/rss.xml): failed to open stream: Permission denied in
/var/www/html/usr/plugins/CustomRSS/Plugin.php
on line
149