forked from fediversity/fediversity
		
	part of #103. Co-authored-by: Valentin Gagarin <valentin.gagarin@tweag.io> Reviewed-on: Fediversity/Fediversity#387 Co-authored-by: Kiara Grouwstra <kiara@procolix.eu> Co-committed-by: Kiara Grouwstra <kiara@procolix.eu>
		
			
				
	
	
		
			156 lines
		
	
	
	
		
			6.5 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			156 lines
		
	
	
	
		
			6.5 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.
 | ||
| 
 | ||
| ## Interactions
 | ||
| 
 | ||
| To reach these goals, we aim to implement the following interactions between [actors](#actors) (depicted with rounded corners) and system components (see the [glossary](#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:
 | ||
|   - [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 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](https://www.proxmox.com) 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](https://pixelfed.org).
 | ||
| 
 | ||
| - Migrate
 | ||
| 
 | ||
|   Move service configurations and deployment state, including user data, from one hosting provider to another.
 | ||
| 
 | ||
| - [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.
 | ||
| 
 | ||
| - 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](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 work to generate a full Fediversity
 | ||
|   deployment from a minimal configuration.
 | ||
| 
 | ||
| - [`infra/`](./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/`](./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.
 |