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

文章目录

    这个周末不算忙,总算可以把一直没有上线的 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 教程:从入门到遥遥领先

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式