构建和部署Rust应用的最快方式
简单. 容易. 愉快.
报告Bug · 请求新功能 · 加入我们的Discord · 在Twitter上关注我们
特性
- 单行资源配置: 只需在主文件中添加一行代码,即可获得数据库或任何其他AWS资源。要删除一个资源,只需删除那行代码。无需配置/yaml文件。
- 快速开发: 从项目初始化到部署只需2分钟。再用2分钟就可以配置一个资源并将其部署到生产环境。
- 对流行的Rust框架提供一流支持: Axum、Actix Web、Rocket等更多
- 安全性: 让我们来关心安全性和权限问题,您只需专注于编写优质代码。
快速开始
在Linux和macOS上,您可以使用这个安装脚本,它会自动为您的操作系统和发行版安装正确的目标:
curl -sSfL https://www.shuttle.rs/install | bash
在Windows上,您可以使用这个安装脚本来完成相同的操作:
iwr "https://www.shuttle.rs/install-win" | iex
安装后,使用以下命令登录:
cargo shuttle login
要初始化您的项目,只需输入:
cargo shuttle init --template axum hello-world
要部署它,请输入:
cd hello-world
cargo shuttle project start # 仅在初始化时未创建项目时需要
cargo shuttle deploy --allow-dirty
就是这样!
服务名称: hello-world
部署ID: 3d08ac34-ad63-41c1-836b-99afdc90af9f
状态: 运行中
最后更新: 2022-04-01T08:32:34Z
URI: https://hello-world.shuttleapp.rs
您可以在生成的hello-world
样板基础上继续构建,或者尝试我们的一些示例。
完整文档请访问我们的文档。
快速浏览
以下是用Axum编写的基本"Hello World"应用程序:
use axum::{routing::get, Router};
#[tokio::main]
async fn main() {
let app = Router::new().route("/", get(hello_world));
let listener = tokio::net::TcpListener::bind("127.0.0.1:3000")
.await
.unwrap();
println!("listening on {}", listener.local_addr().unwrap());
axum::serve(listener, app).await.unwrap();
}
async fn hello_world() -> &'static str {
"Hello, world!"
}
为了能够用一个命令部署它,我们将代码片段更新如下:
use axum::{routing::get, Router};
async fn hello_world() -> &'static str {
"Hello, world!"
}
#[shuttle_runtime::main]
async fn main() -> shuttle_axum::ShuttleAxum {
let router = Router::new().route("/", get(hello_world));
Ok(router.into())
}
现在,只需运行cargo shuttle deploy
,您就可以看到您的应用程序上线了。但让我们通过添加一个共享的Postgres数据库来进一步增强它:
use axum::{routing::get, Router};
async fn hello_world() -> &'static str {
"Hello, world!"
}
#[shuttle_runtime::main]
async fn main(
#[shuttle_shared_db::Postgres] pool: sqlx::PgPool,
) -> shuttle_axum::ShuttleAxum {
pool.execute(include_str!("../schema.sql"))
.await
.expect("failed to run migrations");
let router = Router::new().route("/", get(hello_world));
Ok(router.into())
}
现在,如果我们运行cargo shuttle deploy
,我们将拥有一个带有内置数据库的项目,可以随时使用。
仓库
名称 | 描述 |
---|---|
shuttle 🚀 (本仓库) | Shuttle的核心产品。包含用户交互的所有crate。 |
shuttle-examples 👨🏫 | 官方维护的可部署在Shuttle上的项目示例。还有一个社区示例列表。 |
shuttle-docs 📃 | 托管在docs.shuttle.rs上的文档。 |
www 🌍 | 我们的网站shuttle.rs,包括博客和Launchpad通讯。 |
deploy-action ⚙ | 用于持续部署的GitHub Action。 |
awesome-shuttle 🌟 | 用户可以添加的Shuttle托管项目和资源的精选列表。 |
shuttlings ⚔️ | Rust代码挑战集合。是开始使用Rust和Shuttle的好方法。 |
为Shuttle做贡献
非常鼓励为Shuttle做贡献! 即使您不打算提交任何代码,加入我们的Discord服务器并提供反馈也对我们很有帮助!
查看我们的贡献文档并找到上面适合的仓库来贡献。 关于本仓库的开发,请查看开发文档。
Algora悬赏 💰
为了从工程团队分担低优先级问题的工作,我们有时会为问题添加现金悬赏。 注册Algora控制台以查找有悬赏的开放问题。
项目状态
在Shuttle状态上查看任何停机和事件。
我们目前处于公开测试阶段。 关注本仓库的"releases"以获取重大更新通知! 另外,查看Beta公告以了解我们期待的功能。
- Alpha:我们正在测试Shuttle,API和部署可能不稳定
- 公开Alpha:任何人都可以注册,但请对我们宽容, 还有一些小问题
- 公开Beta:对大多数非企业用例来说已经足够稳定
- 公开:可以投入生产使用!
贡献者 ✨
感谢这些优秀的人:
使用contrib.rocks制作。