温馨提示×

Rust项目在Ubuntu如何部署

小樊
40
2025-11-14 22:30:22
栏目: 编程语言

Ubuntu 上部署 Rust 项目的实用步骤

一 准备环境

  • 更新系统并安装构建工具与 SSL 依赖:
    • sudo apt update && sudo apt install -y build-essential pkg-config libssl-dev curl git
  • 使用 rustup 安装 Rust 工具链(推荐非 root 用户安装):
    • curl --proto ‘=https’ --tlsv1.2 -sSf https://sh.rustup.rs | sh
    • source “$HOME/.cargo/env”
    • 验证:rustc --version、cargo --version
  • 可选:配置 Cargo 国内镜像以加速依赖下载(写入 ~/.cargo/config.toml)
    • [source.crates-io] replace-with = ‘ustc’
    • [source.ustc] registry = “https://mirrors.ustc.edu.cn/crates.io-index/”

二 构建与运行

  • 进入项目目录:cd /path/to/your/rust/project
  • 开发构建与运行:cargo build、cargo run
  • 生产构建:cargo build --release(产物在 target/release/
  • 直接运行可执行文件:./target/release/your_executable_name
  • 传输到服务器(示例):scp target/release/your_project user@remote_host:/path/to/deploy
  • 设置运行时环境变量(示例):
    • export RUST_LOG=info
    • export DATABASE_URL=postgres://user:password@localhost:5432/database_name

三 作为系统服务运行

  • 创建 systemd 服务文件:sudo nano /etc/systemd/system/your_project.service
  • 示例内容(按需修改路径与用户):
    • [Unit]
      • Description=Your Rust Project
      • After=network.target
    • [Service]
      • Type=simple
      • User=your_user
      • WorkingDirectory=/path/to/deploy
      • ExecStart=/path/to/deploy/your_project
      • Restart=on-failure
      • Environment=RUST_LOG=info
    • [Install]
      • WantedBy=multi-user.target
  • 启用并启动:
    • sudo systemctl daemon-reload
    • sudo systemctl enable --now your_project.service
    • 查看状态:sudo systemctl status your_project.service

四 Web 应用的反向代理与 TLS

  • 安装 Nginx:sudo apt-get install nginx
  • 配置反向代理(/etc/nginx/sites-available/default 或 /etc/nginx/conf.d/your_app.conf):
    • server {
      • listen 80;
      • server_name your_domain.com;
      • location / {
        • proxy_pass http://127.0.0.1:3000;
        • 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;
      • }
    • }
  • 启用站点并重启 Nginx:
    • sudo ln -s /etc/nginx/sites-available/your_app.conf /etc/nginx/sites-enabled/
    • sudo nginx -t && sudo systemctl reload nginx
  • TLS:使用 Certbot 获取并自动续期 Let’s Encrypt 证书,然后配置 443 端口与证书路径。

五 Docker 容器化部署

  • 多阶段构建(动态链接 OpenSSL,基于 Ubuntu 运行镜像)
    • Dockerfile:
      • FROM rust:1.85 AS build
        • WORKDIR /app
        • COPY . .
        • RUN cargo build --release
      • FROM ubuntu:22.04
        • RUN apt-get update && apt-get install -y ca-certificates libssl-dev && rm -rf /var/lib/apt/lists/*
        • COPY --from=build /app/target/release/your_app /usr/local/bin/your_app
        • CMD [“/usr/local/bin/your_app”]
  • 极小体积方案(静态二进制,基于 x86_64-unknown-linux-musl
    • Dockerfile:
      • FROM rust:1.85 AS build
        • WORKDIR /app
        • COPY . .
        • RUN apt-get update && apt-get install -y ca-certificates libssl-dev && rm -rf /var/lib/apt/lists/*
        • ENV PKG_CONFIG_ALLOW_CROSS=1
        • RUN cargo build --target x86_64-unknown-linux-musl --release
      • FROM scratch
        • COPY --from=build /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
        • COPY --from=build /app/target/x86_64-unknown-linux-musl/release/your_app /
        • ENV SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt
        • CMD [“/your_app”]
  • 构建与运行:
    • docker build -t your_app:latest .
    • docker run -d -p 3000:3000 your_app:latest

0