Your self-hosted, globally interconnected microblogging community
Go to file
Sheogorath cddcafec31
Helm: Major refactoring regarding Deployments, Environment variables and more (#20733)
* fix(chart): Remove non-functional Horizontal Pod Autoscaler

The Horizontal Pod Autoscaler (HPA) refers to a Deployment that
doesn't exist and therefore can not work. As a result it's
pointless to carry it around in this chart and give the wrong
impression it could work. This patch removes it from the helm
chart and drops all references to it.

* refactor(chart): Refactor sidekiq deployments to scale

This patch reworks how the sidekiq deployment is set up, by
splitting it into many sidekiq deployments, but at least one,
which should allow to scale the number of sidekiq jobs as
expected while being friendly to single user instances as well
as larger ones.

Further it introduces per deployment overwrites for the most
relevant pod fields like resources, affinities and processed
queues, number of jobs and the sidekiq security contexts.

The exact implementation was inspired by an upstream issue:

https://github.com/mastodon/mastodon/issues/20453

* fix(chart): Remove linode default values from values

This patch drops the linode defaults from the values.yaml since
these are not obvious and can cause unexpected connections as
well as leaking secrets to linode, when other s3 storage
backends are used and don't explicitly configure these options
by accident.

Mastodon will then try to authenticate to the linode backends
and therefore disclose the authentication secrets.

* refactor(chart): Rework reduce value reference duplication

Since most of the values are simply setup like this:

```
{{- if .Values.someVariable }}
SOME_VARIABLE: {{ .Values.someVariable }}
{{- end }}
```

There is a lot of duplication in the references in order to
full in the variables. There is an equivalent notation, which
reduces the usage of the variable name to just once:

```
{{- with .Values.someVariable }}
SOME_VARIABLE: {{ . }}
{{- end }}
```

What seems like a pointless replacement, will reduce potential
mistakes down the line by possibly only adjusting one of the
two references.

* fix(chart): Switch to new OMNIAUTH_ONLY variable

This patch adjusts the helm chart to use the new `OMNIAUTH_ONLY`
variable, which replaced the former
`OAUTH_REDIRECT_AT_SIGN_IN` variable in the following commit:

https://github.com/mastodon/mastodon/pull/17288
3c8857917e

* fix(chart): Repair connection test to existing service

Currently the connect test can't work, since it's connecting to
a non-existing service this patch fixes the service name to
make the job connect to the mastodon web service to verify the
connection.

* docs(chart): Adjust values.yaml to support helm-docs

This patch updates most values to prepare an introduction of
helm-docs. This should help to make the chart more user
friendly by explaining the variables and provide a standardised
README file, like many other helm charts do.

References:
https://github.com/norwoodj/helm-docs

* refactor(chart): Allow individual overwrites for streaming and web deployment

This patch works how the streaming and web deployments work by
adding various fields to overwrite values such as affinities,
resources, replica count, and security contexts.

BREAKING CHANGE: This commit removes `.Values.replicaCount` in
favour of `.Values.mastodon.web.replicas` and
`.Values.mastodon.streaming.values`.

* feat(chart): Add option for authorized fetch

Currently the helm chart doesn't support authorized fetch aka.
"Secure Mode" this patch fixes that by adding the needed config
option to the values file and the configmap.

* docs(chart): Improve helm-docs compatiblity

This patch adjust a few more comments in the values.yaml to be
picked up by helm-docs. This way, future adoption is properly
prepared.

* fix(chart): Add automatic detection of scheduler sidekiq queue

This patch adds an automatic switch to the `Recreate` strategy
for the sidekiq Pod in order to prevent accidental concurrency
for the scheduler queue.

* fix(chart): Repair broken DB_POOL variable
2022-11-24 21:30:29 +01:00
.circleci Revamp post filtering system (#18058) 2022-06-28 09:42:13 +02:00
.devcontainer Fix auto detect language for translate service (#19244) 2022-09-27 23:33:56 +02:00
.github Use buildx functions for faster build (#20692) 2022-11-17 11:01:16 +01:00
app Fix not being able to follow more than one hashtag (#21285) 2022-11-21 10:35:09 +01:00
bin Update Mastodon to Rails 6.1 (#15910) 2021-03-24 10:44:31 +01:00
chart Helm: Major refactoring regarding Deployments, Environment variables and more (#20733) 2022-11-24 21:30:29 +01:00
config New Crowdin updates (#20759) 2022-11-17 21:59:15 +09:00
db Fix featured tags not saving preferred casing (#19732) 2022-11-04 16:08:29 +01:00
dist Fix nginx location matching (#20198) 2022-11-09 04:12:57 +01:00
lib Bump version to 4.0.2 (#20725) 2022-11-15 03:57:18 +01:00
log
public Add assets from Twemoji 14.0 (#19733) 2022-11-04 16:08:41 +01:00
spec Fix not being able to follow more than one hashtag (#21285) 2022-11-21 10:35:09 +01:00
streaming Fix filters from other users being used in the streaming service (#20719) 2022-11-15 02:09:58 +01:00
vendor
.browserslistrc Add ES6 compatibility to browserslist (#18519) 2022-05-26 20:29:28 +02:00
.buildpacks Remove nodejs buildpack from buildpacks (#14364) 2020-07-20 09:48:10 +02:00
.codeclimate.yml Replace from Code Climate to Super-Linter (#18587) 2022-06-01 19:22:35 +02:00
.deepsource.toml Update .deepsource.toml (#15753) 2021-02-19 09:53:25 +01:00
.dockerignore Update .dockerignore/.gitignore for #16947 etc (#17099) 2021-12-06 18:04:04 +01:00
.editorconfig
.env.production.sample ip_cleanup_scheduler: Make IP and session retention configurable (#18757) 2022-07-07 03:14:28 +02:00
.env.test
.env.vagrant Add a default DB_HOST to .env.vagrant for enable the streaming (#14030) 2020-06-15 01:57:06 +02:00
.eslintignore
.eslintrc.js Replace from Code Climate to Super-Linter (#18587) 2022-06-01 19:22:35 +02:00
.foreman
.gitattributes
.gitignore Helm update readme.md (#20154) 2022-11-10 19:09:54 +01:00
.haml-lint.yml
.nanoignore
.nvmrc NodeJS 14 support - circleci/docker/.nvmrc (#16163) 2021-08-10 22:56:13 +02:00
.prettierignore Format JSON and YAML using Prettier (#17823) 2022-03-21 04:46:11 +01:00
.prettierrc.js Format JSON and YAML using Prettier (#17823) 2022-03-21 04:46:11 +01:00
.profile
.rspec
.rubocop.yml Fix style for hashes (#20518) 2022-11-17 11:05:39 +01:00
.ruby-gemset Make Mastodon use its own gemset (#17858) 2022-08-13 15:44:34 +02:00
.ruby-version Bump Ruby version from 3.0.3 to 3.0.4 (#18028) 2022-08-15 04:39:58 +02:00
.slugignore
.yarnclean
app.json Make enable_starttls configurable by envvars (#20321) 2022-11-10 21:06:21 +01:00
Aptfile Heroku fix (#19807) 2022-11-05 22:57:58 +01:00
AUTHORS.md Update AUTHORS.md (#20630) 2022-11-14 08:33:24 +01:00
babel.config.js Remove dependency for @babel/plugin-proposal-class-properties (#16155) 2021-05-04 23:13:04 +02:00
Capfile
CHANGELOG.md Bump version to 4.0.2 (#20725) 2022-11-15 03:57:18 +01:00
CODE_OF_CONDUCT.md
config.ru
CONTRIBUTING.md Note that CircleCI auth may be required to run PR pipelines (#20371) 2022-11-11 02:54:02 +01:00
crowdin.yml Prevent translations from accidentally becoming completely different from source strings on Crowdin without translators noticing. (#17085) 2021-12-01 19:03:35 +01:00
docker-compose.yml Update docker-compose.yml (#19063) 2022-08-27 17:40:46 +02:00
Dockerfile Add missing procps package to Dockerfile (#21028) 2022-11-22 05:52:18 +01:00
FEDERATION.md Add FEDERATION.md (#17029) 2021-11-23 00:15:31 +01:00
Gemfile Bump httplog from 1.6.0 to 1.6.2 (#21345) 2022-11-22 23:08:20 +09:00
Gemfile.lock Bump idn-ruby from 0.1.4 to 0.1.5 (#21348) 2022-11-22 23:10:45 +09:00
ide-helper.js Add JS IDE helper (#13012) 2020-04-27 17:19:53 +02:00
jest.config.js Bump jest from 27.5.1 to 28.0.3 (#18280) 2022-05-04 14:06:49 +09:00
jsconfig.json Replace CancelToken to AbortSignal (#19352) 2022-10-14 03:16:37 +02:00
LICENSE
package.json Bump regenerator-runtime from 0.13.10 to 0.13.11 (#21343) 2022-11-22 23:11:25 +09:00
postcss.config.js
priv-config
Procfile fix: make Procfile compatible with herokuish (#12685) 2020-08-29 19:00:30 +02:00
Procfile.dev Set RAILS_ENV in Procfile.dev (#15502) 2021-01-07 09:30:12 +01:00
Rakefile
README.md Drop support for Ruby v2.5 and Node.js v12 (#18323) 2022-06-16 22:09:58 +02:00
scalingo.json Make enable_starttls configurable by envvars (#20321) 2022-11-10 21:06:21 +01:00
SECURITY.md Change e-mail in SECURITY.md (#20384) 2022-11-11 05:26:43 +01:00
stylelint.config.js Replace from Code Climate to Super-Linter (#18587) 2022-06-01 19:22:35 +02:00
Vagrantfile Remove protobuf dependencies (#17539) 2022-02-14 16:08:02 +01:00
yarn.lock Bump regenerator-runtime from 0.13.10 to 0.13.11 (#21343) 2022-11-22 23:11:25 +09:00

Mastodon

GitHub release Build Status Code Climate Crowdin Docker Pulls

Mastodon is a free, open-source social network server based on ActivityPub where users can follow friends and discover new ones. On Mastodon, users can publish anything they want: links, pictures, text, video. All Mastodon servers are interoperable as a federated network (users on one server can seamlessly communicate with users from another one, including non-Mastodon software that implements ActivityPub)!

Click below to learn more in a video:

Screenshot

Navigation

Features

No vendor lock-in: Fully interoperable with any conforming platform

It doesn't have to be Mastodon; whatever implements ActivityPub is part of the social network! Learn more

Real-time, chronological timeline updates

Updates of people you're following appear in real-time in the UI via WebSockets. There's a firehose view as well!

Media attachments like images and short videos

Upload and view images and WebM/MP4 videos attached to the updates. Videos with no audio track are treated like GIFs; normal videos loop continuously!

Safety and moderation tools

Mastodon includes private posts, locked accounts, phrase filtering, muting, blocking and all sorts of other features, along with a reporting and moderation system. Learn more

OAuth2 and a straightforward REST API

Mastodon acts as an OAuth2 provider, so 3rd party apps can use the REST and Streaming APIs. This results in a rich app ecosystem with a lot of choices!

Deployment

Tech stack:

  • Ruby on Rails powers the REST API and other web pages
  • React.js and Redux are used for the dynamic parts of the interface
  • Node.js powers the streaming API

Requirements:

  • PostgreSQL 9.5+
  • Redis 4+
  • Ruby 2.6+
  • Node.js 14+

The repository includes deployment configurations for Docker and docker-compose as well as specific platforms like Heroku, Scalingo, and Nanobox. The standalone installation guide is available in the documentation.

A Vagrant configuration is included for development purposes. To use it, complete following steps:

  • Install Vagrant and Virtualbox
  • Install the vagrant-hostsupdater plugin: vagrant plugin install vagrant-hostsupdater
  • Run vagrant up
  • Run vagrant ssh -c "cd /vagrant && foreman start"
  • Open http://mastodon.local in your browser

Contributing

Mastodon is free, open-source software licensed under AGPLv3.

You can open issues for bugs you've found or features you think are missing. You can also submit pull requests to this repository or submit translations using Crowdin. To get started, take a look at CONTRIBUTING.md. If your contributions are accepted into Mastodon, you can request to be paid through our OpenCollective.

IRC channel: #mastodon on irc.libera.chat

License

Copyright (C) 2016-2022 Eugen Rochko & other Mastodon contributors (see AUTHORS.md)

This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.

You should have received a copy of the GNU Affero General Public License along with this program. If not, see https://www.gnu.org/licenses/.