forked from Fediversity/Fediversity
140 lines
5.8 KiB
Markdown
140 lines
5.8 KiB
Markdown
# The Fediversity project
|
||
|
||
This repository contains all the code and code-related files having to do with
|
||
[the Fediversity project](https://fediversity.eu/), with the notable exception
|
||
of [NixOps4 that is hosted on GitHub](https://github.com/nixops4/nixops4).
|
||
|
||
## 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.
|
||
|
||
## 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:
|
||
- [NLnet Foundation](https://nlnet.nl/)
|
||
- Open Internet Discourse Foundation
|
||
- [NORDUnet](https://nordu.net/)
|
||
- [Tweag](https://www.tweag.io/)
|
||
|
||
Refer to [fediversity.eu](https://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 don’t need to administrate anything.
|
||
|
||
Given initial operators will be universities, users would be staff or students.
|
||
|
||
## Glossary
|
||
|
||
- [Fediverse](https://en.wikipedia.org/wiki/Fediverse)
|
||
|
||
A collection of social networking services that can communicate with each other using a common protocol.
|
||
|
||
- Service
|
||
|
||
A Fediverse application 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](https://www.proxmox.com) to provision VMs for services run by operators.
|
||
|
||
- Deploy
|
||
|
||
Put software, such as services, 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](https://pixelfed.org).
|
||
|
||
- Migrate
|
||
|
||
Move service configurations and user data to a different hosting provider.
|
||
|
||
- [NixOps4](https://github.com/nixops4/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](https://nixops.dev/manual/development/concept/resource.html) 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](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) on the resources to be performed by NixOps4.
|
||
Refer to the [NixOps4 manual](https://nixops.dev/manual/development/resource-provider/index.html) for details.
|
||
|
||
> Example: We need a resource provider for obtaining deployment secrets from a database.
|
||
|
||
## Development
|
||
|
||
All the code made for this project is freely licenced under [EUPL](https://en.m.wikipedia.org/wiki/European_Union_Public_Licence).
|
||
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](https://git.fediversity.eu/Fediversity/meta).
|
||
|
||
Contact the project team if you have questions or suggestions, or if you're interested in using Fediversity software for your operations:
|
||
- E-mail: <mailto:contact@fediversity.eu>
|
||
- Mastodon: <https://mastodon.fediversity.eu/@fediversity>
|
||
|
||
### 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/`](./deployment) contains bits and pieces having to do with
|
||
auto-deployment of test VMs on a private Proxmox.
|
||
|
||
- [`infra/`](./infra) contains the configurations for the various VMs that are
|
||
in production for the project, for instance the Git instances or the Wiki.
|
||
|
||
- [`keys/`](./keys) contains the public keys of the contributors to this project
|
||
as well as the systems that we administrate.
|
||
|
||
- [`matrix/`](./matrix) contains everything having to do with setting up a
|
||
fully-featured Matrix server.
|
||
|
||
- [`secrets/`](./secrets) contains the secrets that need to get injected into
|
||
machine configurations.
|
||
|
||
- [`services/`](./services) contains our effort to make Fediverse applications
|
||
work seemlessly together in our specific setting.
|
||
|
||
- [`website/`](./website) contains the framework and the content of [the
|
||
Fediversity website](https://fediversity.eu/)
|