温馨提示×

Rust如何在CentOS上搭建项目

小樊
43
2025-12-01 15:46:44
栏目: 编程语言

在 CentOS 上搭建 Rust 项目的完整流程

一 环境准备与 Rust 安装

  • 更新系统并安装基础编译工具(Rust 构建依赖 gcc/clang 等):
    • CentOS 7/8:sudo yum groupinstall -y “Development Tools” && sudo yum install -y gcc clang
  • 使用 rustup 安装并管理工具链(稳定版):
    • curl --proto ‘=https’ --tlsv1.2 -sSf https://sh.rustup.rs | sh
    • 重新加载环境:source $HOME/.cargo/env
    • 验证:rustc --version、cargo --version
  • 可选 国内镜像加速(提升下载速度):
    • 配置 rustup 镜像(写入 /etc/profile 或当前 shell):
      • export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
      • export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup
    • 配置 Cargo 源(~/.cargo/config):
      • [source.crates-io] registry = “https://github.com/rust-lang/crates.io-index” replace-with = ‘ustc’
      • [source.ustc] registry = “git://mirrors.ustc.edu.cn/crates.io-index”

二 创建与构建项目

  • 创建新项目:cargo new myapp && cd myapp
  • 本地运行与调试:cargo run(开发态)
  • 生产构建:cargo build --release(二进制位于 target/release/
  • 运行生产二进制:./target/release/myapp
  • 说明:Rust 是预编译语言,部署时通常只需分发该可执行文件及所需配置/静态资源

三 作为系统服务运行与运维

  • 创建 systemd 服务文件:sudo nano /etc/systemd/system/myapp.service
  • 示例内容(按需修改路径与用户):
    • [Unit] Description=My Rust App After=network.target
    • [Service] User=myapp Group=myapp ExecStart=/path/to/target/release/myapp Restart=always RestartSec=3 Environment=MYAPP_ENV=production
    • [Install] WantedBy=multi-user.target
  • 常用运维命令:
    • 启动/开机自启:sudo systemctl start myapp && sudo systemctl enable myapp
    • 查看状态/日志:sudo systemctl status myapp;sudo journalctl -u myapp -f
  • 防火墙(如监听 8080 端口):
    • sudo firewall-cmd --zone=public --add-port=8080/tcp --permanent && sudo firewall-cmd --reload
  • 可选 反向代理(Nginx):
    • 安装:sudo yum install nginx && sudo systemctl enable --now nginx
    • 配置 /etc/nginx/conf.d/myapp.conf:
      • server { listen 80; server_name your-domain.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
    • 生效:sudo nginx -t && sudo systemctl reload nginx

四 交叉编译与容器化部署

  • 交叉编译(多架构发布,如 aarch64):
    • 安装 cross:cargo install cross --git https://github.com/cross-rs/cross
    • 构建示例:cross build --target aarch64-unknown-linux-gnu(产物在 target/aarch64-unknown-linux-gnu/release/
  • Docker 容器化(示例多阶段构建,减小镜像体积):
    • Dockerfile:
      • FROM rust:latest AS builder WORKDIR /usr/src/myapp COPY Cargo.toml Cargo.lock ./ RUN mkdir src && echo “fn main(){println!("placeholder")}” > src/main.rs RUN cargo build --release COPY src ./src RUN cargo build --release
      • FROM debian:buster-slim COPY --from=builder /usr/src/myapp/target/x86_64-unknown-linux-gnu/release/myapp /usr/local/bin/myapp ENTRYPOINT [“myapp”]
    • 构建与运行:docker build -t myapp . && docker run -d myapp

五 常见问题与排查

  • 命令未找到(rustc/cargo):确认已执行 source $HOME/.cargo/env,或重开终端;必要时检查 PATH 是否包含 $HOME/.cargo/bin
  • 构建失败缺少 C/C++ 工具链:安装 gcc/clang 与基础开发组(见上文)
  • 网络慢或拉取依赖失败:配置 rustupCargo 国内镜像(见上文)
  • 端口未开放/访问异常:确认服务已监听、云安全组/本机防火墙已放行对应端口(如 8080),并用 curl/浏览器验证
  • 运行权限问题:确保二进制与配置目录对运行用户可读可执行,必要时使用 sudo 或调整属主/权限

0