上传路径上,关键设计是流式处理:请求体直接落成 Stream,边收边写,绝不把整个文件读进内存。大文件配合分块与断点续传,块边界和已完成块的状态记在元数据表里。缩略图生成必须异步化——图片解码是 CPU 密集型操作,塞进请求链路会直接拖垮 Tokio 的工作线程,正确做法是丢进有界队列,由独立的任务池消费。
graph TD
A[Web / 移动客户端] --> B[反向代理 - TLS 终止]
B --> C[Axum 路由层]
C --> D{"身份认证中间件"}
D -->|"校验通过"| E[业务处理器]
D -->|"校验失败"| F[401 响应]
C --> M[WebDAV / CalDAV / CardDAV 适配层]
M --> E
E --> G[存储抽象层 StorageBackend]
E --> H[元数据服务]
H --> I[SQLite WAL / PostgreSQL]
G --> J[本地文件系统]
G --> K[S3 兼容对象存储]
E --> L[缩略图异步队列]
L --> J
OxiCloud is aimed at self-hosters, home labs, and small teams who want the useful parts of a cloud suite without the operational drag of a traditional PHP stack.
What pulls people in:
Standard protocols first: WebDAV, CalDAV, and CardDAV are built in
OxiCloud is not trying to mirror the full plugin ecosystem of Nextcloud. It is designed for a smaller stack, fast startup, and standards-based interoperability.
Quick Start
Docker Compose
Requires Docker and Docker Compose.
git clone https://github.com/AtalayaLabs/OxiCloud.git
cd OxiCloud
cp example.env .env
# If users will access OxiCloud through a domain or reverse proxy,
# set OXICLOUD_BASE_URL in .env before the first login.
docker compose up -d
Open http://localhost:8086.
Prebuilt binary
Binary releases (Linux musl amd64/arm64, macOS Intel/Apple Silicon)
are attached to every tagged release on GitHub — the whole SPA + all
operator subcommands + migrations bake into a single self-contained
executable. See docs/install/binary.md for
the download / verify / systemd walkthrough.
cargo binstall oxicloud works too once a release is out.
Run from source
Requires Rust 1.93+ and PostgreSQL.
git clone https://github.com/AtalayaLabs/OxiCloud.git
cd OxiCloud
cp example.env .env
# If PostgreSQL runs on your host instead of Docker, update both
# OXICLOUD_DB_CONNECTION_STRING and DATABASE_URL to use localhost:5432.
cargo run
OxiCloud ships with more than 4,500 automated tests that run on every change. They cover every layer of the stack — Rust unit and integration tests, frontend unit tests, API wire tests, end-to-end browser flows, and WebDAV compliance.
One guiding principle: every issue a user reports lands with a test once it is fixed. A bug that reached production is proof the test suite missed something; the pin for it ships in the same patch as the fix, in the lowest layer that would have caught it. The test is the deliverable, not the diagnosis.
OxiCloud is co-developed with large language models. The project treats them as a productivity tool, not an authority: anything that touches architecture, security, data integrity, or performance is strictly challenged against first principles — reviewed against the hexagonal boundaries, measured against the 10k-user scale target, benchmarked where it matters, and often rewritten — before it lands. Code suggestions pass the same bar as any human contribution: tests, linters, benchmarks, and reviewer scrutiny.
The regression discipline from the Testing & Quality section applies without exception here: an LLM-authored change that introduces a bug ships its own test the moment the bug is caught, in the same patch as the fix.
If you are not ready to code yet, starring the project and opening a precise feature request is still a meaningful contribution.
Contributors
OxiCloud is a community-driven project, and we appreciate all contributions. Check out the Contributors page to see the amazing people who have helped make OxiCloud better.
评论