在Ubuntu上用Rust进行Web开发,需安装工具链及系统依赖,通过Cargo创建项目,选用Axum等框架编写异步HTTP服务器并测试,可集成数据库与表单处理,最后通过Nginx或Docker部署上线。
在Ubuntu中使用Rust进行Web开发,听起来或许有些陌生,但这条路径其实已经相当成熟。下面从环境搭建到部署上线,把完整流程梳理一遍。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
要在Ubuntu上搭建Rust Web开发环境,第一步自然是安装Rust工具链和必要的系统依赖。
rustup脚本安装最新稳定版Rust,它包含rustc编译器和Cargo包管理器。安装命令很直接:curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env # 初始化环境变量
安装完成后,用rustc --version验证一下就好。build-essential工具链来编译原生扩展(比如数据库驱动):sudo apt update && sudo apt install -y build-essential使用Cargo创建一个新的Web项目,以my_rust_web_app为例:
cargo new my_rust_web_app
cd my_rust_web_app
Cargo会自动生成Cargo.toml(依赖管理)和src/main.rs(主程序)文件,整个项目骨架就搭好了。
Rust生态里有4个主流的Web框架,选哪个取决于项目需求:
以Axum为例,在Cargo.toml中添加核心依赖及工具库:
[dependencies]
axum = "0.7" # Axum框架核心
tokio = { version = "1.0", features = ["full"] } # 异步运行时
serde = { version = "1.0", features = ["derive"] } # JSON序列化/反序列化
serde_json = "1.0" # JSON处理
tower-http = "0.4" # 高级中间件(如CORS、日志)
其他框架的依赖参考官方文档即可,比如Actix-web要添加actix-web = "4.0"。
还以Axum为例,在src/main.rs中创建一个简单的HTTP服务器:
use axum::{routing::get, // 路由GET请求
Router, // 路由容器
Json, // JSON响应包装器
};
use serde::Serialize; // 结构体序列化
use std::net::SocketAddr;
// 定义响应数据结构
#[derive(Serialize)]
struct HelloWorld {
message: String,
}
// 处理GET请求的异步函数
async fn hello() -> Json {
Json(HelloWorld {
message: "Hello from Rust Web!".to_string(),
})
}
#[tokio::main] // 异步运行时入口
async fn main() {
// 构建路由:将根路径"/"映射到hello函数
let app = Router::new().route("/", get(hello));
// 绑定地址(127.0.0.1:3000)并启动服务器
let addr = SocketAddr::from(([127, 0, 0, 1], 3000));
println!("Server running at http://{}", addr);
axum::Server::bind(&addr)
.serve(app.into_make_service())
.await
.unwrap();
}
代码解读:#[tokio::main]标记异步主函数,使用Tokio运行时;Router::new().route()定义路由规则(GET请求映射到hello函数);Json将Rust结构体序列化为JSON响应。
在项目根目录下执行:
cargo run
终端输出Server running at http://127.0.0.1:3000后,打开浏览器或使用curl访问:
curl http://127.0.0.1:3000
返回JSON响应:
{"message":"Hello from Rust Web!"}
Cargo.toml中添加sqlx(异步SQL库)和PostgreSQL驱动:sqlx = { version = "0.7", features = ["postgres", "runtime-tokio-native-tls", "macros"] }
dotenv = "0.15" # 环境变量管理.env文件存储数据库配置:DATABASE_URL=postgres://username:password@localhost/mydbuse sqlx::PgPool;
use serde::Serialize;
#[derive(Serialize)]
struct User {
id: i32,
name: String,
}
async fn get_users(pool: PgPool) -> Result>, sqlx::Error> {
let users = sqlx::query_as!(User,
"SELECT id, name FROM users"
)
.fetch_all(&pool)
.await;
Ok(Json(users))
} use std::sync::Arc;
use axum::extract::State;
#[tokio::main]
async fn main() {
// 初始化数据库连接池
let database_url = std::env::var("DATABASE_URL").expect("DATABASE_URL not set");
let pool = PgPool::connect(&database_url).await.expect("Failed to connect to DB");
let pool = Arc::new(pool);
// 将连接池注入路由状态
let app = Router::new()
.route("/users", get(get_users))
.with_state(pool);
// 启动服务器...
}
async fn get_users(State(pool): State>) -> Result>, sqlx::Error> {
// 使用pool查询数据库...
} 使用serde解析POST请求中的表单数据(如登录表单):
use axum::{routing::post, Form, Json, };
use serde::Deserialize;
#[derive(Deserialize)]
struct LoginForm {
username: String,
password: String,
}
async fn login(Form(login_data): Form) -> Json {
// 验证用户名密码...
Json(serde_json::json!({
"status": "success",
"message": format!("Welcome, {}!", login_data.username)
}))
}
// 在路由中添加POST路由
let app = Router::new().route("/login", post(login));
Ubuntu上部署Rust Web应用,通常使用Nginx反向袋里或Docker容器化:
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}Dockerfile构建镜像并运行容器:FROM rust:latest
WORKDIR /app
COPY . .
RUN cargo build --release
CMD ["./target/release/my_rust_web_app"]
构建并运行容器:docker build -t my_rust_app .
docker run -p 3000:3000 my_rust_app通过以上步骤,在Ubuntu上完成Rust Web应用的开发、测试与部署并不复杂。根据项目需求选择合适的框架(比如Axum适合快速开发,Actix-web适合高并发),再配合sqlx、serde等工具扩展功能,就能搭建一个稳定可靠的服务端应用。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述