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