No description
Find a file
Kiara Grouwstra 65a14f63ff
Some checks failed
Nix flake completeness check / _complete (push) Successful in 30s
deploy-infra / deploy (push) Successful in 2m3s
/ check-utils (push) Successful in 36s
/ check-function (push) Successful in 31s
/ check-data-model (push) Successful in 31s
deployment-basic / deployment-basic (push) Successful in 33s
deployment-cli / deployment-cli (push) Successful in 45s
deployment-model-nixops4 / deployment-model-nixops4 (push) Successful in 32s
deployment-model-ssh / deployment-model-ssh (push) Successful in 2m38s
deployment-model-tf-proxmox / deployment-model-tf-proxmox (push) Failing after 7m9s
deployment-model-tf / deployment-model-tf (push) Successful in 3m7s
deployment-panel / deployment-panel (push) Successful in 1m49s
netbox-ips / netbox-ips (push) Successful in 8m50s
nixops-deployment-providers-default / nixops-deployment-providers-default (push) Successful in 14s
nixops-deployment-providers-fedi201 / nixops-deployment-providers-fedi201 (push) Successful in 14s
nixops-deployment-providers-forgejo-ci / nixops-deployment-providers-forgejo-ci (push) Successful in 12s
nixops-deployment-providers-test / nixops-deployment-providers-test (push) Successful in 12s
nixops-deployment-providers-vm02116 / nixops-deployment-providers-vm02116 (push) Successful in 12s
nixops-deployment-providers-vm02187 / nixops-deployment-providers-vm02187 (push) Successful in 11s
nixosConfigurations-fedi201 / nixosConfigurations-fedi201 (push) Successful in 43s
nixosConfigurations-forgejo-ci / nixosConfigurations-forgejo-ci (push) Successful in 19s
nixosConfigurations-test01 / nixosConfigurations-test01 (push) Successful in 17s
nixosConfigurations-test02 / nixosConfigurations-test02 (push) Successful in 18s
nixosConfigurations-test03 / nixosConfigurations-test03 (push) Successful in 18s
nixosConfigurations-test04 / nixosConfigurations-test04 (push) Successful in 17s
nixosConfigurations-test05 / nixosConfigurations-test05 (push) Successful in 18s
nixosConfigurations-test06 / nixosConfigurations-test06 (push) Successful in 18s
nixosConfigurations-test11 / nixosConfigurations-test11 (push) Successful in 17s
nixosConfigurations-test12 / nixosConfigurations-test12 (push) Successful in 18s
nixosConfigurations-test13 / nixosConfigurations-test13 (push) Successful in 17s
nixosConfigurations-test14 / nixosConfigurations-test14 (push) Successful in 18s
nixosConfigurations-vm02116 / nixosConfigurations-vm02116 (push) Successful in 18s
nixosConfigurations-vm02187 / nixosConfigurations-vm02187 (push) Successful in 20s
octodns / octodns (push) Successful in 23s
panel / panel (push) Successful in 1m34s
pre-commit / pre-commit (push) Successful in 14s
proxmox-basic / proxmox-basic (push) Successful in 34s
test-mastodon-service / test-mastodon-service (push) Successful in 23s
test-peertube-service / test-peertube-service (push) Successful in 23s
vmOptions-fedi201 / vmOptions-fedi201 (push) Successful in 7s
vmOptions-test01 / vmOptions-test01 (push) Successful in 6s
vmOptions-test02 / vmOptions-test02 (push) Successful in 6s
vmOptions-test03 / vmOptions-test03 (push) Successful in 5s
vmOptions-test04 / vmOptions-test04 (push) Successful in 5s
vmOptions-test05 / vmOptions-test05 (push) Successful in 8s
vmOptions-test06 / vmOptions-test06 (push) Successful in 8s
vmOptions-test11 / vmOptions-test11 (push) Successful in 7s
vmOptions-test12 / vmOptions-test12 (push) Successful in 6s
vmOptions-test13 / vmOptions-test13 (push) Successful in 5s
vmOptions-test14 / vmOptions-test14 (push) Successful in 6s
inline proxmox-template call (#588)
this did not need to go thru a separate file, as it turned out not recursive

Reviewed-on: #588
2025-11-14 14:44:07 +01:00
.forgejo/workflows test utils (#581) 2025-11-10 14:07:49 +01:00
deployment inline proxmox-template call (#588) 2025-11-14 14:44:07 +01:00
infra default nix.gc.automatic to true (#563) 2025-10-31 13:43:50 +01:00
keys add deployment pipeline (#452) 2025-07-10 16:45:46 +02:00
machines default nix.gc.automatic to true (#563) 2025-10-31 13:43:50 +01:00
npins allow handling DNS by octodns (#579) 2025-11-09 00:14:24 +01:00
panel fix password inputs (#522) 2025-09-14 00:21:01 +02:00
secrets add deployment pipeline (#452) 2025-07-10 16:45:46 +02:00
services Automated break down of Nix flake checks for CI (#512) 2025-09-06 17:00:11 +02:00
.envrc unify versioning (minus around nixops, for now) 2025-05-01 13:24:45 +02:00
.gitignore add .envrc files 2025-02-13 14:48:21 +01:00
default.nix add pkgs.which for CD (#557) 2025-10-28 16:03:43 +01:00
flake.lock Grab git-hooks from npins (#448) 2025-07-09 13:21:48 +02:00
flake.nix add proxmox repro test (#345) 2025-09-01 14:31:50 +02:00
LICENSE Initial commit 2024-10-02 12:13:02 +02:00
mkFlake.nix proxmox deployment (#510) 2025-10-25 21:53:31 +02:00
nixmoxer.conf add proxmox repro test (#345) 2025-09-01 14:31:50 +02:00
README.md update readme - explain remaining folders 2025-09-15 16:25:47 +02:00
shell.nix unify versioning (minus around nixops, for now) 2025-05-01 13:24:45 +02:00

The Fediversity project

This repository contains all the code and code-related files having to do with the Fediversity project, with the notable exception of NixOps4 that is hosted on GitHub.

Goals

Decentralise the operational responsibility for social media. Enable a more robust market of hosting providers, by making it easy to migrate operations and data to different providers.

Note that Fediversity is not about self-hosting. There already exist solutions for self-hosting, but they're not suitable for what we're trying to do. The ones we're aware of require substantial technical knowledge and time commitment by operators, especially for scaling to thousands of users. Not everyone has the expertise and time to run their own server.

Interactions

To reach these goals, we aim to implement the following interactions between actors (depicted with rounded corners) and system components (see the glossary, depicted with rectangles).

Actors

  • Fediversity project team

    The group working on this repository. We are creating the deployment workflows and service configurations.

    The project partners for Fediversity are:

    Refer to fediversity.eu for more details about the project.

  • Hosting provider

    They provide and maintain the physical infrastructure, and run the software in this repository, through which operators interact with their deployments. Hosting providers are technical administrators for these deployments, ensuring availability and appropriate performance.

    We target small- to medium-scale hosting providers with 20+ physical machines.

  • Operator

    They select the applications they want to run (Mastodon, Pixelfed, Matrix, etc.). They don't need to own hardware or deal with operations. Operators administer their services in a non-technical fashion, e.g. as moderators. They pay the hosting provider for registering a domain name, maintaining physical resources, and monitoring deployments.

    Initially, Fediversity is targeted at organisations, such as universities.

  • User

    They are individuals that are not necessarily affiliated with any organisation. They register an account on services (e.g. Mastodon) run by the operators, and e.g. post content. Users dont need to administrate anything.

    Given initial operators will be universities, users would be staff or students.

Glossary

  • Fediverse

    A collection of social networking applications that can communicate with each other using a common protocol.

  • Application

    User-facing software (e.g. from Fediverse) run by the hosting provider for an operator.

  • Configuration

    A collection of settings for a machine running NixOS.

    Example: Configurations are deployed to VMs.

  • Provision

    Make a resource, such as a virtual machine, available for use.

    Example: We use Proxmox to provision VMs for applications run by operators.

  • Deploy

    Put software, such as applications, onto computers. The software includes technical configuration that links software components. Most user-facing configuration remains untouched by the deployment process.

    Example: NixOps4 is used to deploy Pixelfed.

  • Migrate

    Move service configurations and deployment state, including user data, from one hosting provider to another.

  • NixOps4

    A tool for deploying and managing resources through the Nix language. NixOps4 development is supported by the Fediversity project

  • Resource

    A resource for NixOps4 is any external entity that can be declared with NixOps4 expressions and manipulated with NixOps4, such as a virtual machine, an active NixOS configuration, a DNS entry, or customer database.

  • Resource provider

    A resource provider for NixOps4 is an executable that communicates between a resource and NixOps4 using a standardised protocol, allowing CRUD operations on the resources to be performed by NixOps4. Refer to the NixOps4 manual for details.

    Example: We need a resource provider for obtaining deployment secrets from a database.

  • Runtime backend

    A type of digital environment one can run operating systems such as NixOS on, e.g. bare-metal, a hypervisor, or a container runtime.

  • Runtime environment

    The thing a deployment runs on, an interface against which the deployment is working. See runtime backend.

  • Runtime config

    Configuration logic specific to a runtime backend, e.g. how to deploy, how to access object storage.

Development

All the code made for this project is freely licenced under EUPL. This means, anyone can use the work here to learn from it or change it according to their needs. You can even read up on development proceedings.

Contact the project team if you have questions or suggestions, or if you're interested in using Fediversity software for your operations:

Content of this repository

Most of the directories in this repository have their own README going into more details as to what they are for. As an overview:

  • deployment/ contains work to generate a full Fediversity deployment from a minimal configuration.

  • infra/ contains the configurations for the various VMs that are in production for the project, for instance the Git instances or the Wiki, as well as means to provision and set up new ones.

  • keys/ contains the public keys of the contributors to this project as well as the systems that we administrate.

  • machines/ contains the code of our machines for internal infra and test VMs.

  • panel/ contains the code of our front-end.

  • secrets/ contains the secrets that need to get injected into machine configurations.

  • services/ contains our effort to make Fediverse applications work seemlessly together in our specific setting.