36 个版本 (4 个重大更新)
0.5.19 | 2024 年 8 月 12 日 |
---|---|
0.5.18 | 2024 年 8 月 6 日 |
0.5.13 | 2024 年 7 月 31 日 |
0.4.0 | 2024 年 7 月 1 日 |
0.1.1 | 2024 年 5 月 6 日 |
#34 in HTTP 服务器
1,678 每月下载量
395KB
10K SLoC
Roadster
Roadster 是一个 "包含电池" 的 Rust Web 框架,旨在快速启动你的项目 🏎️。灵感来自其他功能齐全的框架,如 Rails、Django、Laravel、Loco 和 Poem。
特性
- 基于 Tokio 的 Web 栈(axum、tower、hyper、tracing)。通过利用 tokio 生态系统的所有资源,可以轻松扩展应用程序的行为。
- 内置对 HTTP API 的支持,通过 Axum(具有
http
功能)和 gRPC API 通过 Tonic(具有grpc
功能)。 - 自动为使用 aide(需要
open-api
功能)定义的 HTTP API 路由生成 OpenAPI 模式。 - 支持运行任意长时间运行的服务(例如,不支持开箱即用的 API 格式),只需提供一个包含异步函数的 FunctionService 并在
App#services
方法中注册即可。 - 提供合理的默认值,以便您可以专注于构建应用程序,但大多数(所有?)内置行为都可以通过环境配置文件进行自定义或禁用。
- 使用
#![forbid(unsafe_code)]
确保Roadster 中的所有代码都是 100% 安全的 Rust。 - 提供用于常见命令的 CLI,并允许消费者使用 clap(需要
cli
功能)提供自己的 CLI 命令。 - 为Axum提供示例JWT提取器(需要
jwt-ietf
和/或jwt-openid
功能)。同时提供Axum的通用JWT提取器,将所有声明简单放入映射中(通过jwt
功能提供) - 内置对SeaORM的支持,包括创建数据库连接(需要
db-sql
功能) - 内置对Sidekiq.rs的支持,用于运行异步/后台作业(需要
sidekiq
功能) - 使用tokio的tracing crate进行结构化日志/跟踪。使用OpenTelemetry导出跟踪/指标(需要
otel
功能)。 - 健康检查以确保应用程序的外部依赖项健康
- 为常见的数据库表预构建迁移,例如
user
(需要db-sql
功能) - 支持在更新数据库行时自动更新时间戳列,例如
updated_at
(目前仅限Postgres)(需要db-sql
功能)
入门
启动本地数据库
# Replace `full_dev` with your app name, e.g., `myapp_dev` (unless you're using our `full` example, as demonstrated below)
# Dev
docker run -d -p 5432:5432 -e POSTGRES_USER=roadster -e POSTGRES_DB=full_dev -e POSTGRES_PASSWORD=roadster postgres:15.3-alpine
# Test
docker run -d -p 5433:5432 -e POSTGRES_USER=roadster -e POSTGRES_DB=full_test -e POSTGRES_PASSWORD=roadster postgres:15.3-alpine
启动本地Redis实例(用于Sidekiq.rs)
# Dev
docker run -d -p 6379:6379 redis:7.2-alpine
# Test
docker run -d -p 6380:6379 redis:7.2-alpine
创建您的应用程序
# Todo: Add instructions for creating a new app
# Using one of our examples for now
git clone https://github.com/roadster-rs/roadster.git
cd roadster/examples/full
设置环境(生产/开发/测试)
# Either set it as an environment variable
export ROADSTER__ENVIRONMENT=development
# Or add it to a `.env` file
echo ROADSTER__ENVIRONMENT=development >> .env
启动您的应用程序
cargo run
添加用户界面
目前,Roadster专注于使用Rust进行后端API开发。我们留给消费者决定他们如何添加前端,例如使用现有的JS/TS框架(如React / Next / Vue / Svelte / Solid 等)或使用Rust前端框架(如Leptos / Yew / Perseus / Sycamore 等)。尽管如此,我们有一些如何使用Roadster与这些框架一起使用的示例。
示例
框架 | 示例 |
---|---|
Leptos | leptos-ssr |
跟踪 + OpenTelemetry
Roadster允许使用tracing
和opentelemetry_rust
集成来报告跟踪和指标。提供您的OTLP导出器URL,以便将跟踪/指标数据报告给您的遥测提供商(例如,SigNoz、New Relic、Datadog等)。
本地查看跟踪
您还可以使用Jaeger或SigNoz等工具本地查看跟踪。
Jaeger
在本地查看OpenTelemetry跟踪的最简单方法是运行Jaeger。
- 在您的
.env
文件中设置ROADSTER__TRACING__OTLP_ENDPOINT="https://127.0.0.1:4317"
,或者在适当的config/development.toml
或config/test.toml
配置中。 - 运行以下命令
docker run --rm --name jaeger \ -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \ -p 6831:6831/udp \ -p 6832:6832/udp \ -p 5778:5778 \ -p 16686:16686 \ -p 4317:4317 \ -p 4318:4318 \ -p 14250:14250 \ -p 14268:14268 \ -p 14269:14269 \ -p 9411:9411 \ jaegertracing/all-in-one:1.53
- 导航到UI,可在localhost:16686上找到。
Signoz
另一种查看本地跟踪(和指标)的选项是运行Signoz。
- 在您的
.env
文件中设置ROADSTER__TRACING__OTLP_ENDPOINT="https://127.0.0.1:4317"
,或者在适当的config/development.toml
或config/test.toml
配置中。 - 在您选择的目录中安装并运行Signoz
# Clone the repo git clone -b main https://github.com/SigNoz/signoz.git && cd signoz/deploy/ # Remove the sample application: https://signoz.io/docs/operate/docker-standalone/#remove-the-sample-application-from-signoz-dashboard vim docker/clickhouse-setup/docker-compose.yaml # Remove the `services.hotrod` and `services.load-hotrod` sections, then exit `vim` # Run the `docker compose` command ./install.sh
- 导航到UI,可在localhost:3301上找到。
- 要停止Signoz,请运行以下
docker compose -f docker/clickhouse-setup/docker-compose.yaml stop
背景/异步作业队列使用 Sidekiq.rs
这个包是 Sidekiq 的 Rust 实现,Sidekiq 通常与 Ruby on Rails 一起使用。要使用它,我们只需要一个 Redis 实例。
Sidekiq 控制台
我们提供了一个 示例仓库,可以在独立的 Docker 容器中本地运行 sidekiq 控制台。
git clone https://github.com/roadster-rs/standalone_sidekiq_dashboard.git
cd standalone_sidekiq_dashboard
docker build -t standalone-sidekiq .
# Linux docker commands
# Development
docker run -d --network=host standalone-sidekiq
# Test
docker run -d --network=host -e REDIS_URL='redis://127.0.0.1:6380' standalone-sidekiq
# Mac docker commands -- todo: see if there's a command that will work on both mac and linux
# Development
docker run -d -p 9292:9292 -e REDIS_URL=redis://host.docker.internal:6379 standalone-sidekiq
# Test
docker run -d -p 9292:9292 -e REDIS_URL=redis://host.docker.internal:6380 standalone-sidekiq
Redis Insights
您也可以使用 RedisInsight 直接检查 Redis 数据库。
# Linux docker commands
docker run -d --name redisinsight --network=host -p 5540:5540 redis/redisinsight:latest
# Mac docker commands -- todo: see if there's a command that will work on both mac and linux
# Use `host.docker.internal` as the host domain in redis insight (instead of `127.0.0.1`)
docker run -d --name redisinsight -p 5540:5540 redis/redisinsight:latest
依赖项
~16–36MB
~557K SLoC