diff --git a/content/en/dev/overview.md b/content/en/dev/overview.md index b7d64520..7be040ae 100644 --- a/content/en/dev/overview.md +++ b/content/en/dev/overview.md @@ -9,9 +9,28 @@ menu: Mastodon is a Ruby on Rails application with a React.js front-end. It follows standard practices of those frameworks, so if you are already familiar with Rails or React.js, you will not find any surprises here. -The best way of working with Mastodon in a development environment is installing all the dependencies on your system, rather than using Docker or Vagrant. You need Ruby, Node.js, PostgreSQL and Redis, which is a pretty standard set of dependencies for Rails applications. +## Architecture -Tutorials for installing these dependencies can be found on the “Installing from source” page in the Running Mastodon section of the documentation. Please keep in mind that root access to a machine running Ubuntu 18.04 is required. After following the installation guide in the Running Mastodon section, see the “Setting up a dev environment” page for further instruction on how to configure your environment for development. +Mastodon's architecture can be divided in the five sub-systems depicted in the image bellow: + +{{< figure src="/assets/architecture.png" caption="Architectural layout of Mastodon." >}} + + 1. The web-server, who deals with the incoming HTTP calls from clients; + 2. Mastodon's logic which implements the Tooting functionalities you love; + 3. A job processing system (a.k.a. queuing framework) used by Mastodon's logic to process as needed tasks; + 4. An "operations data system" which keeps needed information handy for quick access; + 5. A persistent data storage system where all those toots and cat photos will be written and read from. + +Because the Mastodon's logic is implemented in Ruby, as of now, all these systems are implemented on or easily integratable in a Ruby project stack. For instance, although one could imagine using any HTTP server or Queue framework, as of now, the default architecture uses [Puma](https://puma.io) and [Sidekiq](https://sidekiq.org), both Ruby libraries that made adding Web call-handling and Job processing conveniently easy to create. + +In terms of data management, Mastodon uses the popular in-memory datastructure storage system [Redis](https://redis.io) which affords super-fast access to vital information like cached toot streams and Sidekiq's queues and its jobs. The final bit, the persistent storage, is accomplished by the [PosgreSQL](https://posgresql.org) for general data, and for media storage, Mastodon can use either a conventional filesystem or an Elastic Storage solution (a.k.a. storage bucket - initially created as the [S3 API](https://docs.aws.amazon.com/AmazonS3/latest/API/Type_API_Reference.html) by Amazon Web Services (AWS) and now implemented by most cloud service providers like Google, Azure, or Digital Ocean). + + +## Development + +The best way of working with Mastodon in a development environment is installing all the dependencies directly on an Ubuntu Server, rather than using Docker or Vagrant. You will need to install all the software describe above -- e.g., Ruby, Node.js, PostgreSQL and Redis -- which is a pretty standard set of dependencies for Rails applications. You may also prefer to install your storage-components in dedicated servers, but there is a conversation for another time. + +Tutorials for installing these dependencies can be found on the “Installing from source” page in the Running Mastodon section of the documentation. Please keep in mind that root access to a machine running Ubuntu (currently on 22.10) is required. After following the installation guide in the Running Mastodon section, see the “Setting up a dev environment” page for further instruction on how to configure your environment for development. ### Environments {#environments} diff --git a/static/assets/architecture.png b/static/assets/architecture.png new file mode 100644 index 00000000..9699567a Binary files /dev/null and b/static/assets/architecture.png differ