ITADN
J-Schoepplenberg/royce · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

royce

一个用于全栈 Web 应用的极简 Axum + SolidJS 启动模板。

使用预配置的即用型 Docker 部署立即上线。

功能完备,专为高性能打造:

  • 前端:细粒度响应式框架 SolidStart
  • 后端:多线程异步 Rust 后端 Axum
  • 会话:内存数据库 Redis
  • 数据库:对象关系数据库 PostgreSQL
  • 部署:容器虚拟化 Docker

包含所需的一切:

  • 身份验证
  • 会话
  • CORS
  • 中间件
  • 速率限制
  • 响应压缩
  • 请求大小限制
  • 签名和加密的 Cookie

关于

Google Lighthouse 得分:

Lighthouse

样式使用 Tailwind CSS 实现,但您可以轻松切换到任何您偏好的解决方案。

前端、后端、数据库和会话存储均作为多容器 Docker Compose 应用程序运行。

用法

  1. Install Git and Docker.
  2. Navigate to the directory where you want to clone this repository.
  3. Run in the terminal:
git clone https://github.com/J-Schoepplenberg/royce.git
cd royce
docker compose up --build
  1. Navigate in your browser to http://localhost:8000.

无 Docker 开发

  1. 安装 rustup、NodeJS 和 PostgreSQL。
  2. 在您的机器上启动 PostgreSQL 服务器。
docker run -d --name royce-postgres -e POSTGRES_USER=user -e POSTGRES_PASSWORD=password -e POSTGRES_DB=royce -p 5432:5432 -v pgdata:/var/lib/postgresql/data postgres:latest
  1. 克隆此仓库 git clone https://github.com/J-Schoepplenberg/royce.git
  2. royce\backend\src\main.rs 中,将会话存储从 RedisStore 切换为 MemoryStore::default()
    • 或者,您可以在您的机器上安装 Redis 并启动 Redis 服务器。
docker run -d --name royce-redis -p 6379:6379 redis:latest
  1. royce\backend 中打开一个新的终端并运行 cargo run --release
  2. royce\frontend 中打开一个新的终端并运行 npm install npm run dev

前端现在将独立于后端运行,并在 http://localhost:3000/ 启用 HMR。

后端将在 http://localhost:8000/api/ 提供服务。

为什么选择 SolidJS?

这个下一代 Web 框架在外观和感觉上与 React 几乎完全相同,但有一个重大区别。与 React 不同,它不会在每次更改时无用地级联重新渲染组件,而是基于信号(signals)。

简而言之,信号存储并更新值以表示状态。但最重要的是,它们是响应式的。这意味着,当它们发生变化时,它们足够智能,能够自动将其最新值传播到所有依赖它们的地方。

在 SolidJS 中,组件等事物是只运行一次且永远不会再次重新渲染的函数。只有信号会被重新计算和更新。这就是为什么 SolidJS 在性能基准测试中远远胜过 React。

为什么选择 Axum?

你已经知道 Rust 的所有优势:零成本抽象、保证的内存安全、与 C/C++ 相同的运行时速度和内存使用量、拥有 Cargo 的卓越生态系统、强大的类型系统。

Axum 使得编写 REST API 变得极其简单,并且由 Tokio 团队本身提供支持,该团队为 Rust 中的异步编程提供了事实上的标准运行时。此外,它基于 hyper,这是现有最快的 HTTP 实现之一。它与 tower 生态系统完全兼容,可以轻松插入任何中间件。通过在路由(= 处理函数中的参数)中添加提取器,您可以极其轻松地提取请求中的内容(例如标头),而无需任何额外工作。