1
0
Fork 0
mirror of https://github.com/zhaofengli/attic.git synced 2024-12-14 11:57:30 +00:00
Multi-tenant Nix Binary Cache
Find a file
2023-05-07 15:28:15 +02:00
.cargo Initial public commit 2022-12-31 17:01:07 -07:00
.github feat: Build & Push images as part of CI (#44) 2023-05-06 22:25:01 -06:00
attic Trivial semver-incompatible upgrades 2023-03-05 11:05:11 -07:00
book book/admin-guide: Add some docs on the NixOS module 2023-01-29 17:23:59 -07:00
client client/watch_store: Refactor main loop 2023-04-12 15:39:27 -06:00
integration-tests upload-path: Support including the upload info as part of the PUT body 2023-01-29 12:01:54 -07:00
nixos Merge pull request #32 from poscat0x04/nixos-module-user-group-name 2023-03-05 11:37:47 -07:00
server Increase narinfo size limit to 1MiB 2023-04-06 10:03:00 +01:00
token Thanks clippy 2023-03-21 18:45:34 -06:00
.editorconfig Initial public commit 2022-12-31 17:01:07 -07:00
.envrc Initial public commit 2022-12-31 17:01:07 -07:00
.gitattributes book: Add vendored highlight.js with Nix syntax 2023-01-29 17:23:59 -07:00
.gitignore Initial public commit 2022-12-31 17:01:07 -07:00
Cargo.lock Trivial semver-incompatible upgrades 2023-03-05 11:05:11 -07:00
Cargo.toml Refactor token into a separate crate 2023-01-08 00:57:22 -07:00
ci-installer.nix ci-installer.nix: Only install the client 2023-03-21 18:45:34 -06:00
crane.nix crane.nix: Make attic-client actually contain the client only 2023-03-21 18:45:34 -06:00
default.nix Initial public commit 2022-12-31 17:01:07 -07:00
flake-compat.nix Initial public commit 2022-12-31 17:01:07 -07:00
flake.lock flake.nix: Bump dependencies 2023-03-05 11:05:11 -07:00
flake.nix flake.nix: Add /etc/passwd to attic-server-image 2023-04-12 15:39:38 -06:00
garnix.yaml Add garnix config 2023-01-06 00:59:38 -07:00
LICENSE Initial public commit 2022-12-31 17:01:07 -07:00
package.nix Revert bindgenHook workarounds 2023-03-21 18:45:34 -06:00
README.md doc: add docker compose example 2023-05-07 15:28:15 +02:00
shell.nix Initial public commit 2022-12-31 17:01:07 -07:00

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.