mirror of
https://github.com/zhaofengli/attic.git
synced 2024-12-14 11:57:30 +00:00
Multi-tenant Nix Binary Cache
.cargo | ||
.github | ||
attic | ||
book | ||
client | ||
integration-tests | ||
nixos | ||
server | ||
token | ||
.editorconfig | ||
.envrc | ||
.gitattributes | ||
.gitignore | ||
Cargo.lock | ||
Cargo.toml | ||
ci-installer.nix | ||
crane.nix | ||
default.nix | ||
flake-compat.nix | ||
flake.lock | ||
flake.nix | ||
garnix.yaml | ||
LICENSE | ||
package.nix | ||
README.md | ||
shell.nix |
Attic
Attic is a self-hostable Nix Binary Cache server backed by an S3-compatible storage provider. It has support for global deduplication and garbage collection.
Attic is an early prototype.
⚙️ Pushing 5 paths to "demo" on "local" (566 already cached, 2001 in upstream)...
✅ gnvi1x7r8kl3clzx0d266wi82fgyzidv-steam-run-fhs (29.69 MiB/s)
✅ rw7bx7ak2p02ljm3z4hhpkjlr8rzg6xz-steam-fhs (30.56 MiB/s)
✅ y92f9y7qhkpcvrqhzvf6k40j6iaxddq8-0p36ammvgyr55q9w75845kw4fw1c65ln-source (19.96 MiB/s)
🕒 vscode-1.74.2 ███████████████████████████████████████ 345.66 MiB (41.32 MiB/s)
🕓 zoom-5.12.9.367 ███████████████████████████ 329.36 MiB (39.47 MiB/s)
Try it out (15 minutes)
Let's spin up Attic in just 15 minutes. And yes, it works on macOS too!
Goals
- Multi-Tenancy: Create a private cache for yourself, and one for friends and co-workers. Tenants are mutually untrusting and cannot pollute the views of other caches.
- Global Deduplication: Individual caches (tenants) are simply restricted views of the content-addressed NAR Store and Chunk Store. When paths are uploaded, a mapping is created to grant the local cache access to the global NAR.
- Managed Signing: Signing is done on-the-fly by the server when store paths are fetched. The user pushing store paths does not have access to the signing key.
- Scalabilty: Attic can be easily replicated. It's designed to be deployed to serverless platforms like fly.io but also works nicely in a single-machine setup.
- Garbage Collection: Unused store paths can be garbage-collected in an LRU manner.
Docker compose example
To use this you need to create a ./attic/server.toml
with your config pointing to the other directories.
You also need to create an empty ./attic/server.db
that atticd can take over.
version: '3.7'
services:
attic:
image: ghcr.io/zhaofengli/attic:latest
volumes:
- ./attic/server.toml:/attic/server.toml
- ./attic/server.db:/attic/server.db
- attic-storage:/attic/storage
command: [ "-f", "/attic/server.toml" ]
ports:
- 8080:8080
volumes:
attic-storage:
Licensing
Attic is available under the Apache License, Version 2.0.
See LICENSE
for details.
By contributing to the project, you agree to license your work under the aforementioned license.