在VPS上部署Rust应用:进阶分步指南

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:为什么在VPS上进行Rust高级部署是必要的

Rust开发只是工作的一半。另一半同样重要的部分是可靠且安全的部署。诸如手动编译和通过cargo run运行等基本方法并不适合生产环境。在高级层面,需要自动化、进程隔离、监控以及高可用性保障。

本文将讲解如何使用Docker、CI/CD(GitHub Actions)、用于自启动的systemd以及作为反向代理的Nginx,在VPS上配置Rust应用的部署。所有代码示例均使用Rust和Bash提供。



1. VPS和环境准备

1.1. 服务器基本配置

假设您有一台运行Ubuntu 22.04 LTS的VPS。首先更新软件包并安装必要的工具:

sudo apt update && sudo apt upgrade -ysudo apt install -y curl git build-essential pkg-config libssl-dev

通过rustup安装Rust:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shsource $HOME/.cargo/envrustc --version  # 验证

1.2. 安装Docker

Docker将提供环境隔离和可复现性:

sudo apt install -y docker.iosudo systemctl enable --now dockersudo usermod -aG docker $USERnewgrp docker

1.3. 安装Nginx

Nginx将充当反向代理和负载均衡器:

sudo apt install -y nginxsudo systemctl enable --now nginx


2. 使用Docker容器化Rust应用

2.1. 多阶段构建

为减小镜像体积,使用多阶段构建。在项目根目录创建Dockerfile:

# 构建阶段FROM rust:1.75-slim-bookworm AS builderWORKDIR /appCOPY Cargo.toml Cargo.lock ./COPY src ./srcRUN cargo build --release

# 最终阶段FROM debian:bookworm-slimRUN apt update && apt install -y ca-certificates && rm -rf /var/lib/apt/lists/*WORKDIR /appCOPY --from=builder /app/target/release/my_app .EXPOSE 8080CMD ["./my_app"]

这里的my_app是您的二进制文件名。请确保在Cargo.toml中指定了name = "my_app"。

2.2. 构建并运行容器

docker build -t my_app:latest .docker run -d --name my_app -p 8080:8080 my_app:latest

验证应用是否响应:

curl http://localhost:8080


3. 配置自启动和监控(systemd + Docker Compose)

3.1. 使用Docker Compose管理服务

创建docker-compose.yml:

version: '3.8'services:  app:    image: my_app:latest    restart: always    ports:      - "127.0.0.1:8080:8080"    environment:      - RUST_LOG=info    healthcheck:      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]      interval: 30s      timeout: 10s      retries: 3

请注意:ports绑定到127.0.0.1,以确保外部请求仅通过Nginx进入。

3.2. 用于管理服务的Systemd单元

创建文件/etc/systemd/system/my_app.service:

[Unit]Description=My Rust ApplicationAfter=docker.serviceRequires=docker.service

[Service]Type=oneshotRemainAfterExit=yesWorkingDirectory=/opt/my_appExecStart=/usr/bin/docker compose up -dExecStop=/usr/bin/docker compose downUser=deployGroup=deploy

[Install]WantedBy=multi-user.target

启用并启动:

sudo systemctl daemon-reloadsudo systemctl enable my_appsudo systemctl start my_app


4. 配置Nginx

博客

书籍推荐