在 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 与基础开发组(见上文)
- 网络慢或拉取依赖失败:配置 rustup 与 Cargo 国内镜像(见上文)
- 端口未开放/访问异常:确认服务已监听、云安全组/本机防火墙已放行对应端口(如 8080),并用 curl/浏览器验证
- 运行权限问题:确保二进制与配置目录对运行用户可读可执行,必要时使用 sudo 或调整属主/权限