Rust web 框架 axum (四): 生产服务器环境使用 Nginx 部署 axum 服务

更新日期: 2023-12-02 阅读次数: 1401 字数: 589 分类: rust

这个周末不算忙,总算可以把一直没有上线的 Rust Axum 写的在线小工具发布了。

基本上跟 Golang Gin 的发布流程类似,本地编译好,scp 到服务器上。 然后配置好 systemd, nginx reload 就可以了。

比较省事的地方是 axum 默认会把模板文件打包到二进制文件中,不需要像 golang gin 一样增加额外配置代码。

第一个 Rust 小工具

Rust Axum 小工具: 中文标点替换成对应的英文标点符号

网页地址:

https://www.sunzhongwei.com/tools3/replace-chinese-punctuation

编译优化

如果不使用 release 方式编译,直接用 cargo run,生成的可执行文件非常大。 例如,我一个简单的页面,就达到了 65M。

> ls -lah target/debug/
total 65M
 4.0K Dec  2 13:35 ./
 4.0K Nov  4 14:09 ../
    0 Nov  4 14:09 .cargo-lock*
 4.0K Dec  2 13:22 .fingerprint/
 4.0K Nov 27 17:15 build/
 4.0K Dec  2 13:42 deps/
 4.0K Nov  4 14:09 examples/
 4.0K Dec  2 13:22 incremental/
  65M Dec  2 13:35 rust_tool*
  187 Dec  2 09:52 rust_tool.d*

使用 release 方式编译,能大大减少生成文件的体积。

cargo build --release

> ls -lah target/release/
total 8.5M
4.0K Dec  2 13:44 ./
4.0K Dec  2 13:44 ../
   0 Dec  2 13:44 .cargo-lock*
4.0K Dec  2 13:44 .fingerprint/
4.0K Dec  2 13:44 build/
4.0K Dec  2 13:44 deps/
4.0K Dec  2 13:44 examples/
4.0K Dec  2 13:44 incremental/
8.5M Dec  2 13:44 rust_tool*
 189 Dec  2 13:44 rust_tool.d
  • 第一次编译花费了 22 秒。
  • 但是第二次编译只花费了 2 秒。应该是省去了三方依赖的编译时间。

发布到服务器上

将 release 编译好的可执行文件,scp 到服务器上,直接运行,或者使用 systemd 启动。

然后就可以使用浏览器访问了。

如果想跟其他服务共用一个域名及端口,就得用到 nginx 配置了。

nginx 配置

实际上复制了一份 Golang Gin 的 Nginx 配置, 用在 Rust Axum 上,完全通用。

例如,我 Axum 服务监听的端口号为 9023,然后想将 tools3 子路径转发到 Axum 服务上。

location /tools3/ {
	proxy_set_header X-Forward-For $remote_addr;
	proxy_set_header  X-real-ip $remote_addr;
	proxy_pass http://127.0.0.1:9023/tools3/;
}

reload nginx 即可。

sudo nginx -t
sudo nginx -s reload

在线体验效果:Rust Axum 小工具: 中文标点替换成对应的英文标点符号

查看合集

📖 Rust web 框架 axum 教程:从入门到遥遥领先

tags: axum

关于作者 🌱

我是来自山东烟台的一名开发者,有敢兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式