From 1f5f33271c47fa32012a921186e99677c8487336 Mon Sep 17 00:00:00 2001 From: Mark Doliner Date: Wed, 6 Dec 2023 06:56:14 -0500 Subject: [PATCH 01/36] Remove unnecessary steps from Ruby instructions. (#1136) The `./configure` and `make` steps appear to be obsolete. --- content/en/admin/install.md | 1 - 1 file changed, 1 deletion(-) diff --git a/content/en/admin/install.md b/content/en/admin/install.md index db9ca626..ea5080c7 100644 --- a/content/en/admin/install.md +++ b/content/en/admin/install.md @@ -74,7 +74,6 @@ And proceed to install rbenv and rbenv-build: ```bash git clone https://github.com/rbenv/rbenv.git ~/.rbenv -cd ~/.rbenv && src/configure && make -C src echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(rbenv init -)"' >> ~/.bashrc exec bash From f2b3dfb70a03d7abbd313c683d218985950e286d Mon Sep 17 00:00:00 2001 From: JakePaustian <87162217+JakePaustian@users.noreply.github.com> Date: Wed, 6 Dec 2023 05:57:15 -0600 Subject: [PATCH 02/36] An important parameter is missing from the API doc on editing a post #1239 (#1351) * Update content/en/methods/statuses.md --- content/en/methods/statuses.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/content/en/methods/statuses.md b/content/en/methods/statuses.md index 0640268a..3fc2e88c 100644 --- a/content/en/methods/statuses.md +++ b/content/en/methods/statuses.md @@ -1,3 +1,4 @@ + --- title: statuses API methods description: Publish, interact, and view information about statuses. @@ -1478,6 +1479,9 @@ language media_ids[] : Array of String. Include Attachment IDs to be attached as media. If provided, `status` becomes optional, and `poll` cannot be used. +media_attributes[][] +: Array of String. Each array includes id, description, and focus. + poll[options][] : Array of String. Possible answers to the poll. If provided, `media_ids` cannot be used, and `poll[expires_in]` must be provided. @@ -1852,3 +1856,4 @@ Status does not exist or is private. {{< caption-link url="https://github.com/mastodon/mastodon/blob/main/app/controllers/api/v1/statuses/reblogs_controller.rb" caption="app/controllers/api/v1/statuses/reblogs_controller.rb" >}} {{< caption-link url="https://github.com/mastodon/mastodon/blob/main/app/controllers/api/v1/statuses/sources_controller.rb" caption="app/controllers/api/v1/statuses/sources_controller.rb" >}} + From 00528a70a61ba788f97153b1f5bf6ba5794cc359 Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 7 Dec 2023 00:09:36 +0100 Subject: [PATCH 03/36] Update tootctl.md (#1243) Add missing line break --- content/en/admin/tootctl.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/admin/tootctl.md b/content/en/admin/tootctl.md index cddc70a8..d0976be4 100644 --- a/content/en/admin/tootctl.md +++ b/content/en/admin/tootctl.md @@ -669,7 +669,7 @@ Removes locally cached copies of media attachments, avatars or profile headers f **Version history:**\ 2.5.0 - added\ -2.6.2 - show freed disk space +2.6.2 - show freed disk space\ 4.1.0 - added --prune-profiles, --remove-headers, and --include-follows. From e8f0e640600498fd8b976962b178249873a43f7f Mon Sep 17 00:00:00 2001 From: Daniil Suvorov Date: Thu, 7 Dec 2023 02:10:11 +0300 Subject: [PATCH 04/36] fix(client/intro): Nested parameters JSON format (#1254) --- content/en/client/intro.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/client/intro.md b/content/en/client/intro.md index 2f14aad2..432f43ea 100644 --- a/content/en/client/intro.md +++ b/content/en/client/intro.md @@ -113,7 +113,7 @@ As JSON, hashes are formatted like so: { "source": { "privacy": "public", - "language", "en" + "language": "en" } } ``` From e6656d3d37b54bf56fdbce997ea8cfc70d355a21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tantek=20=C3=87elik?= Date: Thu, 7 Dec 2023 03:08:44 -0800 Subject: [PATCH 05/36] fix "ActivityPub" format mention to be AS 2.0 (#1202) There is no "ActivityPub JSON format", ActivityPub uses the Activity Streams 2.0 format https://www.w3.org/TR/activitystreams-core/. --- content/en/user/moving.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/user/moving.md b/content/en/user/moving.md index b27c5ef6..b2a73ef5 100644 --- a/content/en/user/moving.md +++ b/content/en/user/moving.md @@ -13,7 +13,7 @@ menu: At any time you want, you can go to Settings > Export and download a CSV file for your current followed accounts, your currently created lists, your currently blocked accounts, your currently muted accounts, and your currently blocked domains. Your following, blocking, muting, and domain-blocking lists can be imported at Settings > Import, where they can either be merged or overwritten. -Requesting an archive of your posts and media can be done once every 7 days, and can be downloaded in ActivityPub JSON format. Mastodon currently does not support importing posts or media due to technical limitations, but your archive can be viewed by any software that understands how to parse ActivityPub documents. +Requesting an archive of your posts and media can be done once every 7 days, and can be downloaded in Activity Streams 2.0 JSON format. Mastodon currently does not support importing posts or media due to technical limitations, but your archive can be viewed by any software that understands how to parse Activity Streams 2.0 documents. ## Redirecting or moving your profile {#migration} From 44e96e9428db7a24b5ac4a2925141512e001e417 Mon Sep 17 00:00:00 2001 From: ^cypher <37557436+carrotcypher@users.noreply.github.com> Date: Thu, 7 Dec 2023 10:33:36 -0300 Subject: [PATCH 06/36] Proposal for adding minimal documentation for undocumented moderation API (webhook) (#1329) * Update moderation.md --- content/en/admin/moderation.md | 226 +++++++++++++++++++++++++++++++++ 1 file changed, 226 insertions(+) diff --git a/content/en/admin/moderation.md b/content/en/admin/moderation.md index ed7c1565..d04bee99 100644 --- a/content/en/admin/moderation.md +++ b/content/en/admin/moderation.md @@ -90,3 +90,229 @@ sudo iptables -I INPUT 1 -m set --match-set spambots src -j DROP ``` Be careful not to lock yourself out of your machine. + +### Webhooks for moderation-level events {#report-events-webhook} + +Webhooks can be created to facilitate automation through the moderation API by notifying applications about system events in real-time. This also enables integrations with chat apps like Discord, IRC and Slack, helping moderator coordination. + +The X-Hub-Signature header adopted from the WebSub spec can be optionally used to verify that the payloads are authentic. + +Events currently supported: + +* account.approved +* account.created +* account.updated +* report.created +* report.updated +* status.created +* status.updated + + + +#### Example payload: + +```json + +{ + "event":"report.created", + "created_at":"2023-10-26T13:34:00.351Z", + "object":{ + "id":"8437", + "action_taken":false, + "action_taken_at":null, + "category":"violation", + "comment":"", + "forwarded":true, + "created_at":"2023-10-26T13:34:00.348Z", + "updated_at":"2023-10-26T13:34:00.348Z", + "account":{ + "id":"123456789", + "username":"bobisaburger", + "domain":null, + "created_at":"2023-07-13T04:39:22.493Z", + "email":"bobisaburger@emailservice.com", + "ip":"12.34.56.78", + "confirmed":true, + "suspended":false, + "silenced":false, + "sensitized":false, + "disabled":false, + "approved":true, + "locale":"en", + "invite_request":"I would love to be a member of your instance!", + "ips":[ + { + "ip":"12.34.56.78", + "used_at":"2023-07-13T04:45:31.835Z" + }, + { + "ip":"98.76.54.32", + "used_at":"2023-07-13T04:39:22.722Z" + } + ], + "account":{ + "id":"123456789", + "username":"bobisaburger", + "acct":"bobisaburger", + "display_name":"bobisaburger", + "locked":false, + "bot":false, + "discoverable":null, + "group":false, + "created_at":"2023-07-13T00:00:00.000Z", + "note":"", + "url":"https://mastodonwebsite/@bobisaburger", + "uri":"https://mastodonwebsite/users/bobisaburger", + "avatar":"https://locationofavatar.com/image.jpg", + "avatar_static":"https://locationofavatar.com/image.jpg", + "header":"locationofheader.com/image.jpg", + "header_static":"locationofheader.com/image.jpg", + "followers_count":100, + "following_count":200, + "statuses_count":9, + "last_status_at":"2023-08-05", + "noindex":true, + "emojis":[ + + ], + "roles":[ + + ], + "fields":[ + + ] + }, + "role":{ + "id":"-99", + "name":"", + "permissions":"65536", + "color":"", + "highlighted":false + } + }, + "target_account":{ + "id":"123454321", + "username":"cheeseperson", + "domain":"someothermastodonsite.com", + "created_at":"2023-08-20T00:00:00.000Z", + "email":null, + "ip":null, + "confirmed":null, + "suspended":false, + "silenced":false, + "sensitized":false, + "disabled":null, + "approved":null, + "locale":null, + "invite_request":null, + "ips":null, + "account":{ + "id":"123454321", + "username":"cheeseperson", + "acct":"cheeseperson@someothermastodonsite.com", + "display_name":"cheeseperson", + "locked":false, + "bot":false, + "discoverable":false, + "group":false, + "created_at":"2023-08-20T00:00:00.000Z", + "note":"", + "url":"https://someothermastodonsite.com/@cheeseperson", + "uri":"https://someothermastodonsite.com/users/cheeseperson", + "avatar":"https://someothermastadonsite.com/avatars/original/missing.png", + "avatar_static":"https://someothermastadonsite.com/avatars/original/missing.png", + "header":"locationofheader.com/image.jpg", + "header_static":"locationofheader.com/image.jpg", + "followers_count":2, + "following_count":2, + "statuses_count":95, + "last_status_at":"2023-10-26", + "emojis":[ + + ], + "fields":[ + + ] + }, + "role":null + }, + "assigned_account":null, + "action_taken_by_account":null, + "statuses":[ + { + "id":"12345678987654321", + "created_at":"2023-10-26T11:29:13.000Z", + "in_reply_to_id":"1918282746465", + "in_reply_to_account_id":"101010101010", + "sensitive":false, + "spoiler_text":"", + "visibility":"public", + "language":"de", + "uri":"https://someothermastodonsite.com/users/cheeseperson/statuses/111301083360371621", + "url":"https://someothermastodonsite.com/@cheeseperson/111301083360371621", + "replies_count":0, + "reblogs_count":0, + "favourites_count":0, + "edited_at":"2023-10-26T11:30:31.000Z", + "content":"

Here is some content

", + "reblog":null, + "account":{ + "id":"123454321", + "username":"cheeseperson", + "acct":"cheeseperson@someothermastodonsite.com", + "display_name":"cheeseperson", + "locked":false, + "bot":false, + "discoverable":false, + "group":false, + "created_at":"2023-08-20T00:00:00.000Z", + "note":"", + "url":"https://someothermastodonsite.com/@cheeseperson", + "uri":"https://someothermastodonsite.com/users/cheeseperson", + "avatar":"https://someothermastadonsite.com/avatars/original/missing.png", + "avatar_static":"https://someothermastadonsite.com/avatars/original/missing.png", + "header":"locationofheader.com/image.jpg", + "header_static":"locationofheader.com/image.jpg", + "followers_count":2, + "following_count":2, + "statuses_count":95, + "last_status_at":"2023-10-26", + "emojis":[ + + ], + "fields":[ + + ] + }, + "media_attachments":[ + + ], + "mentions":[ + { + "id":"101010101010", + "username":"thirdperson", + "url":"https://thirdpersonsinstance.com/@thirdperson", + "acct":"thirdperson@emailwebsite.com" + } + ], + "tags":[ + + ], + "emojis":[ + + ], + "card":null, + "poll":null + } + ], + "rules":[ + { + "id":"2", + "text":"Don't be a meanie!" + } + ] + } +} + + +``` From c2d93f344f4d230f804f3792ab835afdaee64227 Mon Sep 17 00:00:00 2001 From: cucmberium Date: Thu, 7 Dec 2023 22:36:38 +0900 Subject: [PATCH 07/36] Added missing parameter information in Filter (#1312) --- content/en/methods/filters.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/content/en/methods/filters.md b/content/en/methods/filters.md index 657099b7..0ad24a23 100644 --- a/content/en/methods/filters.md +++ b/content/en/methods/filters.md @@ -863,6 +863,11 @@ Add a status filter to the current filter group. Authorization : {{}} Provide this header with `Bearer ` to gain authorized access to this API method. +##### Form data parameters + +status_id +: {{}} String. The status ID to be added to the filter group. + #### Response ##### 200: OK From 0982664688c8607e34942ef8ac8b83104ef54493 Mon Sep 17 00:00:00 2001 From: Isa S Date: Thu, 7 Dec 2023 14:52:29 +0100 Subject: [PATCH 08/36] Add instructions for seperate sidekiq redis (#1170) * Add instructions for seperate sidekiq redis Co-authored-by: Andy Piper --- content/en/admin/scaling.md | 67 +++++++++++++++++++++++++++++++++++-- 1 file changed, 64 insertions(+), 3 deletions(-) diff --git a/content/en/admin/scaling.md b/content/en/admin/scaling.md index 97f09f82..ed54d74f 100644 --- a/content/en/admin/scaling.md +++ b/content/en/admin/scaling.md @@ -304,16 +304,77 @@ Then use `\q` to quit. ## Separate Redis for cache {#redis} -Redis is used widely throughout the application, but some uses are more important than others. Home feeds, list feeds, and Sidekiq queues as well as the streaming API are backed by Redis and that’s important data you wouldn’t want to lose (even though the loss can be survived, unlike the loss of the PostgreSQL database - never lose that!). However, Redis is also used for volatile cache. If you are at a stage of scaling up where you are worried if your Redis can handle everything, you can use a different Redis database for the cache. In the environment, you can specify `CACHE_REDIS_URL` or individual parts like `CACHE_REDIS_HOST`, `CACHE_REDIS_PORT` etc. Unspecified parts fallback to the same values as without the cache prefix. +Redis is used widely throughout the application, but some uses are more important than others. Home feeds, list feeds, and Sidekiq queues as well as the streaming API are backed by Redis and that’s important data you wouldn’t want to lose (even though the loss can be survived, unlike the loss of the PostgreSQL database - never lose that!). However, Redis is also used for volatile cache. If you are at a stage of scaling up where you are worried about whether your Redis can handle everything, you can use a different Redis database for the cache. In the environment, you can specify `CACHE_REDIS_URL` or individual parts like `CACHE_REDIS_HOST`, `CACHE_REDIS_PORT` etc. Unspecified parts fallback to the same values as without the cache prefix. As far as configuring the Redis database goes, basically you can get rid of background saving to disk, since it doesn’t matter if the data gets lost on restart and you can save some disk I/O on that. You can also add a maximum memory limit and a key eviction policy, for that, see this guide: [Using Redis as an LRU cache](https://redis.io/topics/lru-cache) +## Seperate Redis for Sidekiq {#redis-sidekiq} + +Redis is used in Sidekiq to keep track of its locks and queue. Although in general the performance gain is not that big, some instances may benefit from having a seperate Redis instance for Sidekiq. + +In the environment file, you can specify `SIDEKIQ_REDIS_URL` or individual parts like `SIDEKIQ_REDIS_HOST`, `SIDEKIQ_REDIS_PORT` etc. Unspecified parts fallback to the same values as without the `SIDEKIQ_` prefix. + +Creating a seperate Redis instance for Sidekiq is relatively simple: + +Start by making a copy of the default redis systemd service: +```bash +cp /etc/systemd/system/redis.service /etc/systemd/system/redis-sidekiq.service +``` + +In the `redis-sidekiq.service` file, change the following values: +```bash +ExecStart=/usr/bin/redis-server /etc/redis/redis-sidekiq.conf --supervised systemd --daemonize no +PIDFile=/run/redis/redis-server-sidekiq.pid +ReadWritePaths=-/var/lib/redis-sidekiq +Alias=redis-sidekiq.service +``` + +Make a copy of the Redis configuration file for the new Sidekiq Redis instance + +```bash +cp /etc/redis/redis.conf /etc/redis/redis-sidekiq.conf +``` + +In this `redis-sidekiq.conf` file, change the following values: +```bash +port 6479 +pidfile /var/run/redis/redis-server-sidekiq.pid +logfile /var/log/redis/redis-server-sidekiq.log +dir /var/lib/redis-sidekiq +``` + +Before starting the new Redis instance, create a data directory: + +```bash +mkdir /var/lib/redis-sidekiq +chown redis /var/lib/redis-sidekiq +``` + +Start the new Redis instance: + +```bash +systemctl enable --now redis-sidekiq +``` + +Update your environment, add the following line: + +```bash +SIDEKIQ_REDIS_URL=redis://127.0.0.1:6479/ +``` + +Restart Mastodon to use the new Redis instance, make sure to restart both web and Sidekiq (otherwise, one of them will still be working from the wrong instance): + +```bash +systemctl restart mastodon-web.service +systemctl restart redis-sidekiq.service +``` + ## Read-replicas {#read-replicas} To reduce the load on your Postgresql server, you may wish to setup hot streaming replication (read replica). [See this guide for an example](https://cloud.google.com/community/tutorials/setting-up-postgres-hot-standby). You can make use of the replica in Mastodon in these ways: -- The streaming API server does not issue writes at all, so you can connect it straight to the replica. But it’s not querying the database very often anyway so the impact of this is little. -- Use the Makara driver in the web processes, so that writes go to the primary database, while reads go to the replica. Let’s talk about that. +* The streaming API server does not issue writes at all, so you can connect it straight to the replica (it is not querying the database very often anyway, so the impact of this is small). +* Use the Makara driver in the web and Sidekiq processes, so that writes go to the master database, while reads go to the replica. Let’s talk about that. {{< hint style="warning" >}} Read replicas are currently not supported for the Sidekiq processes, and using them will lead to failing jobs and data loss. From e3d00bd75e5627ae7813d839e9035a166ffa2f68 Mon Sep 17 00:00:00 2001 From: Emelia Smith Date: Thu, 7 Dec 2023 19:58:05 +0100 Subject: [PATCH 09/36] Remove the admin/ prefix on Admin APIs for consistency (#1228) --- content/en/methods/admin/accounts.md | 2 +- content/en/methods/admin/domain_blocks.md | 2 +- content/en/methods/admin/reports.md | 2 +- content/en/methods/admin/trends.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/content/en/methods/admin/accounts.md b/content/en/methods/admin/accounts.md index 643a3606..e53c73ed 100644 --- a/content/en/methods/admin/accounts.md +++ b/content/en/methods/admin/accounts.md @@ -3,7 +3,7 @@ title: admin/accounts API methods description: Perform moderation actions with accounts. menu: docs: - name: admin/accounts + name: accounts parent: methods-admin identifier: methods-admin-accounts aliases: [ diff --git a/content/en/methods/admin/domain_blocks.md b/content/en/methods/admin/domain_blocks.md index 6034023e..f20ba884 100644 --- a/content/en/methods/admin/domain_blocks.md +++ b/content/en/methods/admin/domain_blocks.md @@ -3,7 +3,7 @@ title: admin/domain_blocks API methods description: Disallow certain domains to federate. menu: docs: - name: admin/domain_blocks + name: domain_blocks parent: methods-admin identifier: methods-admin-domain_blocks aliases: [ diff --git a/content/en/methods/admin/reports.md b/content/en/methods/admin/reports.md index f174ea80..669a5036 100644 --- a/content/en/methods/admin/reports.md +++ b/content/en/methods/admin/reports.md @@ -3,7 +3,7 @@ title: admin/reports API methods description: Perform moderation actions with reports. menu: docs: - name: admin/reports + name: reports parent: methods-admin identifier: methods-admin-reports aliases: [ diff --git a/content/en/methods/admin/trends.md b/content/en/methods/admin/trends.md index 868bad58..957fd45c 100644 --- a/content/en/methods/admin/trends.md +++ b/content/en/methods/admin/trends.md @@ -3,7 +3,7 @@ title: admin/trends API methods description: TODO menu: docs: - name: admin/trends + name: trends parent: methods-admin identifier: methods-admin-trends aliases: [ From 8d26904e04ec52ac781b56bdf7fcc7648e0a9ab4 Mon Sep 17 00:00:00 2001 From: Frigyes <72750891+Frigyes06@users.noreply.github.com> Date: Thu, 7 Dec 2023 11:46:29 -0800 Subject: [PATCH 10/36] Added a lot of spelling fixes in the English documentation (#1350) * Added many spelling fixes * Apply suggestions from code review Co-authored-by: Michael Stanclift --- content/en/admin/backups.md | 10 ++-- content/en/admin/config.md | 50 +++++++++---------- content/en/admin/elasticsearch.md | 10 ++-- content/en/admin/install.md | 10 ++-- content/en/admin/migrating.md | 4 +- content/en/admin/moderation.md | 20 ++++---- .../en/admin/optional/object-storage-proxy.md | 6 +-- content/en/admin/optional/object-storage.md | 24 ++++----- content/en/admin/optional/tor.md | 4 +- content/en/admin/prerequisites.md | 6 +-- content/en/admin/scaling.md | 32 ++++++------ content/en/admin/tootctl.md | 16 +++--- content/en/admin/troubleshooting.md | 4 +- .../admin/troubleshooting/index-corruption.md | 8 +-- content/en/admin/upgrading.md | 4 +- content/en/api/guidelines.md | 26 +++++----- content/en/api/oauth-scopes.md | 4 +- content/en/client/authorized.md | 2 +- content/en/client/intro.md | 4 +- content/en/client/public.md | 4 +- content/en/client/token.md | 4 +- content/en/dev/code.md | 2 +- content/en/dev/overview.md | 4 +- 23 files changed, 131 insertions(+), 127 deletions(-) diff --git a/content/en/admin/backups.md b/content/en/admin/backups.md index 4d79def4..a40db098 100644 --- a/content/en/admin/backups.md +++ b/content/en/admin/backups.md @@ -20,21 +20,21 @@ Things that need to be backed up in order of importance: ## Failure modes {#failure} -There are two failure types that people in general may guard for: The failure of the hardware, such as data corruption on the disk; and human and software error, such as wrongful deletion of particular piece of data. In this documentation, only the former type is considered. +There are two failure types that people in general may guard for: The failure of the hardware, such as data corruption on the disk; and human and software error, such as wrongful deletion of a particular piece of data. In this documentation, only the former type is considered. -A lost PostgreSQL database is complete game over. Mastodon stores all the most important data in the PostgreSQL database. If the database disappears, all the accounts, posts and followers on your server will disappear with it. +Mastodon stores all the most important data in the PostgreSQL database. The loss of the PostgreSQL database will result in the complete failure of the server, including all the accounts, their posts and followers. -If you lose application secrets, some functions of Mastodon will stop working for your users, they will be logged out, two-factor authentication will become unavailable, Web Push API subscriptions will stop working. +If you lose application secrets, some functions of Mastodon will stop working for your users, they will be logged out, two-factor authentication will become unavailable, and Web Push API subscriptions will stop working. If you lose user-uploaded files, you will lose avatars, headers, and media attachments, but Mastodon _will_ work moving forward. -Losing the Redis database is almost harmless: The only irrecoverable data will be the contents of the Sidekiq queues and scheduled retries of previously failed jobs. The home and list feeds are stored in Redis, but can be regenerated with tootctl. +Losing the Redis database is almost harmless: The only irrecoverable data will be the contents of the Sidekiq queues and scheduled retries of previously failed jobs. The home and list feeds are stored in Redis but can be regenerated with tootctl. The best backups are so-called off-site backups, i.e. ones that are not stored on the same machine as Mastodon itself. If the server you are hosted on goes on fire and the hard disk drive explodes, backups stored on that same hard drive won’t be of much use. ## Backing up application secrets {#env} -Application secrets are the easiest to backup, since they never change. You only need to store `.env.production` somewhere safe. +Application secrets are the easiest to back up since they never change. You only need to store `.env.production` somewhere safe. ## Backing up PostgreSQL {#postgresql} diff --git a/content/en/admin/config.md b/content/en/admin/config.md index 1e94f2dc..7c002f69 100644 --- a/content/en/admin/config.md +++ b/content/en/admin/config.md @@ -9,7 +9,7 @@ menu: Mastodon uses environment variables as its configuration. -For convenience, it can read them from a flat file called `.env.production` in the Mastodon directory (called a "dotenv" file), but they can always be overridden by a specific process. For example, systemd service files can read environment variables from an `EnvironmentFile` or from inline definitions with `Environment`, so you can have different configuration parameters for specific services. They can also be specified when calling Mastodon from the command line. +For convenience, it can read them from a flat file called `.env.production` in the Mastodon directory (called a "dotenv" file), but they can always be overridden by a specific process. For example, systemd service files can read environment variables from an `EnvironmentFile` or inline definitions with `Environment`, so you can have different configuration parameters for specific services. They can also be specified when calling Mastodon from the command line. ## Basic {#basic} @@ -21,11 +21,11 @@ This is the unique identifier of your server in the network. It cannot be safely #### `WEB_DOMAIN` -`WEB_DOMAIN` is an optional environment variable allowing to install Mastodon on one domain, while having the users' handles on a different domain, e.g. addressing users as `@alice@example.com` but accessing Mastodon on `mastodon.example.com`. This may be useful if your domain name is already used for a different website but you still want to use it as a Mastodon identifier because it looks better or shorter. +`WEB_DOMAIN` is an optional environment variable allowing the installation of Mastodon on one domain, while having the users' handles on a different domain, e.g. addressing users as `@alice@example.com` but accessing Mastodon on `mastodon.example.com`. This may be useful if your domain name is already used for a different website but you still want to use it as a Mastodon identifier because it looks better or shorter. -As with `LOCAL_DOMAIN`, `WEB_DOMAIN` cannot be safely changed once set, as this will confuse remote servers that knew of your previous settings and may break communication with them or make it unreliable. As the issues lie with remote servers' understanding of your accounts, re-installing Mastodon from scratch will not fix the issue. Therefore, please be extremely cautious when setting up `LOCAL_DOMAIN` and `WEB_DOMAIN`. +As with `LOCAL_DOMAIN`, `WEB_DOMAIN` cannot be safely changed once set, as this will confuse remote servers that know of your previous settings and may break communication with them or make it unreliable. As the issues lie with remote servers' understanding of your accounts, re-installing Mastodon from scratch will not fix the issue. Therefore, please be extremely cautious when setting up `LOCAL_DOMAIN` and `WEB_DOMAIN`. -To install Mastodon on `mastodon.example.com` in such a way it can serve `@alice@example.com`, set `LOCAL_DOMAIN` to `example.com` and `WEB_DOMAIN` to `mastodon.example.com`. This also requires additional configuration on the server hosting `example.com` to redirect or proxy requests to `https://example.com/.well-known/webfinger` to `https://mastodon.example.com/.well-known/webfinger`. For instance, with nginx, the configuration could look like the following: +To install Mastodon on `mastodon.example.com` in such a way it can serve `@alice@example.com`, set `LOCAL_DOMAIN` to `example.com` and `WEB_DOMAIN` to `mastodon.example.com`. This also requires additional configuration on the server hosting `example.com` to redirect requests from `https://example.com/.well-known/webfinger` to `https://mastodon.example.com/.well-known/webfinger`. For instance, with nginx, the configuration could look like the following: ``` location /.well-known/webfinger { @@ -40,7 +40,7 @@ If you have multiple domains pointed at your Mastodon server, this setting will #### `ALLOWED_PRIVATE_ADDRESSES` -Comma-separated specific addresses/subnets allowed in outgoing HTTP queries. +Comma-separated specific addresses/subnets are allowed in outgoing HTTP queries. #### `AUTHORIZED_FETCH` @@ -48,12 +48,12 @@ Also called "secure mode". When set to `true`, the following changes occur: - Mastodon will stop generating linked-data signatures for public posts, which prevents them from being re-distributed efficiently but without precise control. Since a linked-data object with a signature is entirely self-contained, it can be passed around without making extra requests to the server where it originates. - Mastodon will require HTTP signature authentication on ActivityPub representations of public posts and profiles, which are normally available without any authentication. Profiles will only return barebones technical information when no authentication is supplied. -- Prior to v4.0.0: Mastodon will require any REST/streaming API access to have a user context (i.e. having gone through an OAuth authorization screen with an active user), when normally some API endpoints are available without any authentication. +- Prior to v4.0.0: Mastodon will require any REST/streaming API access to have a user context (i.e. having gone through an OAuth authorization screen with an active user) when normally some API endpoints are available without any authentication. As a result, through the authentication mechanism and avoiding re-distribution mechanisms that do not have your server in the loop, it becomes possible to enforce who can and cannot retrieve even public content from your server, e.g. servers whose domains you have blocked. {{< hint style="warning" >}} -Unfortunately, secure mode is not without its drawbacks, which is why it is not enabled by default. Not all software in the fediverse can support it fully, in particular some functionality will be broken with Mastodon servers older than 3.0; you lose some useful functionality even with up-to-date servers since linked-data signatures are used to make public conversation threads more complete; and because an authentication mechanism on public content means no caching is possible, it comes with an increased computational cost. +Unfortunately, secure mode is not without its drawbacks, which is why it is not enabled by default. Not all software in the fediverse can support it fully, in particular, some functionality will be broken with Mastodon servers older than 3.0; you lose some useful functionality even with up-to-date servers since linked-data signatures are used to make public conversation threads more complete; and because an authentication mechanism on public content means no caching is possible, it comes with an increased computational cost. {{}} {{< hint style="warning" >}} @@ -80,15 +80,15 @@ This setting was known as `WHITELIST_MODE` prior to 3.1.5. #### `DISALLOW_UNAUTHENTICATED_API_ACCESS` -As of Mastodon v4.0.0, the web app is now used to render all requests, even for logged-out viewers. In order to make these views work, the web app makes public API requests in order to fetch accounts and statuses. If you would like to disallow this, then set this variable to `true`. Note that disallowing unauthenticated API access will cause profile and post permalinks to return an error to logged-out users, essentially making it so that the only ways to view content is to either log in locally or fetch it via ActivityPub. +As of Mastodon v4.0.0, the web app is now used to render all requests, even for logged-out viewers. To make these views work, the web app makes public API requests to fetch accounts and statuses. If you would like to disallow this, then set this variable to `true`. Note that disallowing unauthenticated API access will cause profile and post permalinks to return an error to logged-out users, essentially making it so that the only way to view content is to either log in locally or fetch it via ActivityPub. #### `SINGLE_USER_MODE` -If set to `true`, the frontpage of your Mastodon server will always redirect to the first profile in the database and registrations will be disabled. +If set to `true`, the front page of your Mastodon server will always redirect to the first profile in the database and registrations will be disabled. #### `DEFAULT_LOCALE` -By default, Mastodon will automatically detect the visitor's language from browser headers and display the Mastodon interface in that language (if it's supported). If you are running a language-specific or regional server, that behaviour may mislead visitors who do not speak your language into signing up on your server. For this reason, you may want to set this variable to a specific language. +By default, Mastodon will automatically detect the visitor's language from browser headers and display the Mastodon interface in that language (if it's supported). If you are running a language-specific or regional server, that behavior may mislead visitors who do not speak your language into signing up on your server. For this reason, you may want to set this variable to a specific language. Example value: `de` @@ -204,7 +204,7 @@ Determines the amount of logs generated by Mastodon. Defaults to `info`, which g Tells the Mastodon web and streaming processes which IPs act as your trusted reverse proxy (e.g. nginx, Cloudflare). It affects how Mastodon determines the source IP of each request, which is used for important rate limits and security functions. If the value is set incorrectly then Mastodon could use the IP of the reverse proxy instead of the actual source. -By default the loopback and private network address ranges are trusted. Specifically: +By default, the loopback and private network address ranges are trusted. Specifically: - `127.0.0.1/8` - `::1/128` @@ -311,7 +311,7 @@ Defaults to `5432`. #### `DB_POOL` -How many database connections to pool in the process. This value should cover every thread in the process, for this reason, it defaults to the value of `MAX_THREADS`. +Defines how many database connections to pool in the process. This value should cover every thread in the process, for this reason, it defaults to the value of `MAX_THREADS`. #### `DB_SSLMODE` @@ -345,23 +345,23 @@ Example value: `redis://user:password@localhost:6379` #### `REDIS_NAMESPACE` -If provided, namespaces all Redis keys. This allows sharing the same Redis database between different projects or Mastodon servers. +If provided, namespaces all Redis keys. This allows the sharing of the same Redis database between different projects or Mastodon servers. #### `CACHE_REDIS_HOST` -Defaults to value of `REDIS_HOST`. +Defaults to the value of `REDIS_HOST`. #### `CACHE_REDIS_PORT` -Defaults to value of `REDIS_PORT`. +Defaults to the value of `REDIS_PORT`. #### `CACHE_REDIS_URL` -If provided, takes precedence over `CACHE_REDIS_HOST` and `CACHE_REDIS_PORT`. Defaults to value of `REDIS_URL`. +If provided, takes precedence over `CACHE_REDIS_HOST` and `CACHE_REDIS_PORT`. Defaults to the value of `REDIS_URL`. #### `CACHE_REDIS_NAMESPACE` -Defaults to value of `REDIS_NAMESPACE`. +Defaults to the value of `REDIS_NAMESPACE`. #### `SIDEKIQ_REDIS_URL` @@ -375,7 +375,7 @@ If set to `true`, Mastodon will use Elasticsearch for its search functions. #### `ES_PRESET` -It controls the ElasticSearch indices configuration (number of shards and replica). +It controls the Elasticsearch indices configuration (number of shards and replica). Possible values are: @@ -383,7 +383,7 @@ Possible values are: - `small_cluster` - `large_cluster` -See the [ElasticSearch setup page for details on each setting](../elasticsearch#choosing-the-correct-preset). +See the [Elasticsearch setup page for details on each setting](../elasticsearch#choosing-the-correct-preset). #### `ES_HOST` @@ -403,7 +403,7 @@ Used for optionally authenticating with Elasticsearch #### `ES_PREFIX` -Useful if the Elasticsearch server is shared between multiple projects or different Mastodon servers. Defaults to value of `REDIS_NAMESPACE`. +Useful if the Elasticsearch server is shared between multiple projects or different Mastodon servers. Defaults to the value of `REDIS_NAMESPACE`. ### StatsD {#statsd} @@ -461,7 +461,7 @@ E-mail configuration is based on the *action_mailer* component of the *Ruby on R ### Basic configuration {#basic} * `SMTP_SERVER`: Specify the server to use. For example `sub.domain.tld`. -* `SMTP_PORT`: By default, the value is `25` (usual port for SMTP). If StartTLS is detected, it may be switched to port 587. +* `SMTP_PORT`: By default, the value is `25` (the usual port for SMTP). If StartTLS is detected, it may be switched to port 587. * `SMTP_DOMAIN`: Only required if a HELO domain is needed. Will be set to the `SMTP_SERVER` domain by default. * `SMTP_FROM_ADDRESS`: Specify a sender address. * `SMTP_DELIVERY_METHOD`: By default, the value is `smtp` (can also be `sendmail`). @@ -470,7 +470,7 @@ E-mail configuration is based on the *action_mailer* component of the *Ruby on R * `SMTP_LOGIN`: Login for the SMTP user. * `SMTP_PASSWORD`: Password for the SMTP user. -* `SMTP_AUTH_METHOD`: Either `plain` (default; password is transmitted in the clear), `login` (password will be base64 encoded) or `cram_md5`. +* `SMTP_AUTH_METHOD`: Either `plain` (default; the password is transmitted in the clear), `login` (password will be base64 encoded) or `cram_md5`. ### Secured SMTP By default, a StartTLS connection will be attempted to the specified SMTP server. @@ -499,7 +499,7 @@ You must serve the files with CORS headers, otherwise some functions of Mastodon #### `S3_ALIAS_HOST` -Similar to `CDN_HOST`, you may serve _user-uploaded_ files from a separate host. In fact, if you are using external storage like Amazon S3, Minio or Google Cloud, you will by default be serving files from those services' URLs. +Similar to `CDN_HOST`, you may serve _user-uploaded_ files from a separate host. If you are using external storage like Amazon S3, Minio or Google Cloud, you will by default be serving files from those services' URLs. It is _extremely recommended_ to use your own host instead, for a few reasons: @@ -736,14 +736,14 @@ If set, registrations will not be possible with any e-mails **except** those fro If set, registrations will not be possible with any e-mails from the specified domains. Pipe-separated values, e.g.: `foo.com|bar.com` {{< hint style="warning" >}} -This option is deprecated. You can dynamically block e-mail domains from the admin interface or from the `tootctl` command-line interface. +This option is deprecated. You can dynamically block e-mail domains from the admin interface or the `tootctl` command-line interface. {{}} ### Sessions #### `MAX_SESSION_ACTIVATIONS` -How many browser sessions are allowed per-user. Defaults to `10`. If a new browser session is created, then the oldest session is deleted, e.g. user in that browser is logged out. +Defines the maximum number of browser sessions allowed per user, which defaults to 10. If a new browser session is created and the limit is exceeded, the oldest session is deleted, resulting in the user being logged out of that session. ### Home feeds diff --git a/content/en/admin/elasticsearch.md b/content/en/admin/elasticsearch.md index 676561b8..17bb3e2b 100644 --- a/content/en/admin/elasticsearch.md +++ b/content/en/admin/elasticsearch.md @@ -11,8 +11,8 @@ menu: Mastodon supports full-text search when Elasticsearch is available. It is strongly recommended to configure this feature. -Mastodon’s full-text search allows logged in users to find results from: -- public statuses from account that opted into appearing in search results +Mastodon’s full-text search allows logged-in users to find results from: +- public statuses from accounts that opted into appearing in search results - their own statuses - their mentions - their favourites @@ -75,7 +75,7 @@ _Note_: If using TLS, prepend the hostname with `https://`. For example: `https: ### Choosing the correct preset -The value for `ES_PRESET` depends on the size of your Elasticsearch and will be used to set the number of shards and replica for your indices to the best value for your setup: +The value for `ES_PRESET` depends on the size of your Elasticsearch and will be used to set the number of shards and replicas for your indices to the best value for your setup: - `single_node_cluster` if you only have one node in your Elasticsearch cluster. Indices will be configured without any replica - `small_cluster` if you have less than 6 nodes in your cluster. Indices will be configured with 1 replica - `large_cluster` if you have 6 or more nodes in your cluster. Indices will be configured with more shards than with the `small_cluster` setting, to allow them to be distributed over more nodes @@ -88,7 +88,7 @@ By default, Elasticsearch does not handle any authentication and every request i To configure it, please refer [to the official documentation](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/security-minimal-setup.html). It will guide you through: - Enabling the security features (`xpack.security.enabled: true`) -- Creating password for built-in users +- Creating passwords for built-in users Once done, you can create a custom role for Mastodon to connect. @@ -154,7 +154,7 @@ RAILS_ENV=production bin/tootctl search deploy ## Search optimization for other languages ### Chinese search optimization {#chinese-search-optimization} -The default analyzer of the Elasticsearch is the standard analyzer, which may not be the best especially for Chinese. To improve search experience, you can install a language specific analyzer. Before creating the indices in Elasticsearch, install the following Elasticsearch extensions: +The standard analyzer is the default for Elasticsearch, but for some languages like Chinese it may not be the optimal choice. To enhance the search experience, consider installing a language-specific analyzer. Before creating indices in Elasticsearch, be sure to install the following extensions: - [elasticsearch-analysis-ik](https://github.com/medcl/elasticsearch-analysis-ik) - [elasticsearch-analysis-stconvert](https://github.com/medcl/elasticsearch-analysis-stconvert) diff --git a/content/en/admin/install.md b/content/en/admin/install.md index ea5080c7..6d300cd9 100644 --- a/content/en/admin/install.md +++ b/content/en/admin/install.md @@ -17,7 +17,7 @@ You will be running the commands as root. If you aren’t already root, switch t ### System repositories {#system-repositories} -Make sure curl, wget, gnupg, apt-transport-https, lsb-release and ca-certificates is installed first: +Make sure curl, wget, gnupg, apt-transport-https, lsb-release and ca-certificates are installed first: ```bash apt install -y curl wget gnupg apt-transport-https lsb-release ca-certificates @@ -58,7 +58,7 @@ yarn set version classic ### Installing Ruby {#installing-ruby} -We will be using rbenv to manage Ruby versions, because it’s easier to get the right versions and to update once a newer release comes out. rbenv must be installed for a single Linux user, therefore, first we must create the user Mastodon will be running as: +We will use rbenv to manage Ruby versions as it simplifies obtaining the correct versions and updating them when new releases are available. Since rbenv needs to be installed for an individual Linux user, we must first create the user account under which Mastodon will run: ```bash adduser --disabled-login mastodon @@ -87,7 +87,7 @@ RUBY_CONFIGURE_OPTS=--with-jemalloc rbenv install 3.2.2 rbenv global 3.2.2 ``` -We’ll also need to install bundler: +We’ll also need to install the bundler: ```bash gem install bundler --no-document @@ -180,7 +180,7 @@ You’re done with the mastodon user for now, so switch back to root: exit ``` -### Acquiring a SSL certificate {#acquiring-a-ssl-certificate} +### Acquiring an SSL certificate {#acquiring-a-ssl-certificate} We’ll use Let’s Encrypt to get a free SSL certificate: @@ -209,7 +209,7 @@ Reload nginx for the changes to take effect: systemctl reload nginx ``` -At this point you should be able to visit your domain in the browser and see the elephant hitting the computer screen error page. This is because we haven’t started the Mastodon process yet. +At this point, you should be able to visit your domain in the browser and see the elephant hitting the computer screen error page. This is because we haven’t started the Mastodon process yet. ### Setting up systemd services {#setting-up-systemd-services} diff --git a/content/en/admin/migrating.md b/content/en/admin/migrating.md index a92a5a55..f108daf0 100644 --- a/content/en/admin/migrating.md +++ b/content/en/admin/migrating.md @@ -7,7 +7,7 @@ menu: parent: admin --- -Sometimes, for various reasons, you may want to migrate your Mastodon instance from one server to another. Fortunately this is not too difficult of a process, although it may result in some downtime. +Sometimes, for various reasons, you may want to migrate your Mastodon instance from one server to another. Fortunately, this is not too difficult of a process, although it may result in some downtime. {{< hint style="info" >}} This guide was written with Ubuntu Server in mind; your mileage may vary for other setups. @@ -24,7 +24,7 @@ This guide was written with Ubuntu Server in mind; your mileage may vary for oth 7. Run `RAILS_ENV=production ./bin/tootctl feeds build` to rebuild the home timelines for each user. 8. Start Mastodon on the new server. 9. Update your DNS settings to point to the new server. -10. Update or copy your Nginx configuration, re-run LetsEncrypt as necessary. +10. Update or copy your Nginx configuration, and re-run LetsEncrypt as necessary. 11. Enjoy your new server! ## Detailed steps {#detailed-steps} diff --git a/content/en/admin/moderation.md b/content/en/admin/moderation.md index d04bee99..d39735f8 100644 --- a/content/en/admin/moderation.md +++ b/content/en/admin/moderation.md @@ -15,33 +15,33 @@ As of v3.5.0, all default user moderation decisions will notify the affected use ### Sensitive {#sensitive-user} -When an account is marked as sensitive, all media that user posts will be automatically [marked as sensitive](https://docs.joinmastodon.org/user/posting/#cw). +When an account is marked as sensitive, all media that the user posts will be automatically [marked as sensitive](https://docs.joinmastodon.org/user/posting/#cw). ### Freeze {#freeze-user} -A Mastodon account can be frozen. This prevents the user from doing anything with the account, but all of the content is still there untouched. This limitation is reversible; the account can be un-frozen at any time. This limitation is only available for local users on your server. +A Mastodon account can be frozen. This prevents the user from doing anything with the account, but all of the content is still there untouched. This limitation is reversible; the account can be unfrozen at any time. This limitation is only available for local users on your server. When a user's account is frozen, they are redirected to their **Account Settings** page, where the following message is displayed: > You can no longer login to your account or use it in any other way, but your profile and other data remains intact. -When the user's account is un-frozen, normal functionality resumes. +When the user's account is unfrozen, normal functionality resumes. ### Limit {#limit-user} -Previously known as "silencing". A limited account is hidden to all other users on that instance, except for its followers. All of the content is still there, and it can still be found via search, mentions, and following, but the content is invisible publicly. +Previously known as "silencing". A limited account is hidden from all other users on that instance, except for its followers. All of the content is still there, and it can still be found via search, mentions, and following, but the content is invisible publicly. At this moment, limit does not affect federation. A locally limited account is *not* limited automatically on other servers. Account limitations are reversible. ### Suspend {#suspend-user} -A Mastodon suspension means the account is effectively deleted. The account no longer appears in search, the profile page is gone, all of the posts, uploads, followers, and all other data is removed publicly. However, all the data is available in the admin back-end for a period of 30 days from suspension. This is to give the user an opportunity to work with instance admins to resolve any potential issues and have the account re-instated. +A Mastodon suspension means the account is effectively deleted. The account no longer appears in search, the profile page is gone, and all of the posts, uploads, followers, and all other data are removed publicly. However, all the data is available in the admin back-end for a period of 30 days from suspension. This is to give the user an opportunity to work with instance admins to resolve any potential issues and have the account re-instated. -If the account is reinstated within the 30 day period, all data is once again accessible publicly without any adverse effects. If the 30 day period lapses, **all** that user's data is purged from the instance. Admins also have the option to immediately delete the user's account data at any point during the 30 days. +If the account is reinstated within the 30-day period, all data is once again accessible publicly without any adverse effects. If the 30-day period lapses, **all** that user's data is purged from the instance. Admins also have the option to immediately delete the user's account data at any point during the 30 days. -Once the data has been deleted, whether that is after the 30 day period, or if an admin has force deleted it, the account can still be un-suspended. However, the account will have no data (statuses, profile information, avatar or header image) associated with it. +Once the data has been deleted, whether that is after the 30-day period, or if an admin has force deleted it, the account can still be un-suspended. However, the account will have no data (statuses, profile information, avatar or header image) associated with it. -For remote accounts, suspending will make them unfollow any local account. Those relationships are not restored in case the remote account is un-suspended, even within the 30-day time window. +For remote accounts, suspending will make them unfollow any local account. Those relationships are not restored in case the remote account is unsuspended, even within the 30-day time window. ## Moderating entire websites {#server-wide-moderation} @@ -68,7 +68,7 @@ There are a few baseline measures for preventing spam in Mastodon: * Signing up requires confirming an e-mail address * Signing up is rate-limited by IP -However, dedicated spammers will get through that. The other measure you can employ is **e-mail domain blacklisting**. During sign up, Mastodon resolves the given e-mail address for an A or MX record, i.e. the IP address of the e-mail server, and checks that IP address against a dynamically stored blacklist. +However, dedicated spammers will get through that. The other measure you can employ is **e-mail domain blacklisting**. During sign-up, Mastodon resolves the given e-mail address for an A or MX record, i.e. the IP address of the e-mail server, and checks that IP address against a dynamically stored blacklist. ### Blocking by e-mail server {#blocking-by-e-mail-server} @@ -76,7 +76,7 @@ Spammers will often use different e-mail domains so it looks like they are using ### Blocking by IP {#blocking-by-ip} -It is not possible to block visitors by IP address in Mastodon itself, and it is not a fool-proof strategy. IPs are sometimes shared by a lot of different people, and sometimes change hands. But it is possible to block visitors by IP address in Linux using a firewall. Here is an example using `iptables` and `ipset`: +It is not possible to block visitors by IP address in Mastodon itself, and it is not a foolproof strategy. IPs are sometimes shared by a lot of different people and sometimes change hands. However, it is possible to block visitors by IP address in Linux using a firewall. Here is an example using `iptables` and `ipset`: ```bash # Install ipset diff --git a/content/en/admin/optional/object-storage-proxy.md b/content/en/admin/optional/object-storage-proxy.md index 8bc00bf9..1ee06e3f 100644 --- a/content/en/admin/optional/object-storage-proxy.md +++ b/content/en/admin/optional/object-storage-proxy.md @@ -3,12 +3,12 @@ title: Proxying object storage through nginx description: Serving user-uploaded files in Mastodon from your own domain --- -When you are using Mastodon with an object storage provider like Amazon S3, Wasabi, Google Cloud or other, by default the URLs of the files go through the storage providers themselves. This has the following downsides: +When you are using Mastodon with an object storage provider like Amazon S3, Wasabi, Google Cloud or others, by default the URLs of the files go through the storage providers themselves. This has the following downsides: - Bandwidth is usually metered and very expensive - URLs will be broken if you decide to switch providers later -You can instead serve the files from your own domain, caching them in the process. Access patterns on Mastodon are such that **new files are usually accessed simultaneously by a lot of clients** as new posts stream in through the streaming API or as they get distributed through federation; older content is accessed comparatively rarely. For that reason, caching alone would not reduce bandwidth consumed by your proxy from the actual object storage. To mitigate this, we can use a **cache lock** mechanism that ensures that only one proxy request is made at the same time. +You can choose to serve the files from your own domain, incorporating caching in the process. In Mastodon, access patterns show that new files are often simultaneously accessed by many clients as they appear in new posts via the streaming API or are shared through federation; in contrast, older content is accessed less frequently. Therefore, relying solely on caching won't significantly reduce the bandwidth usage of your proxy from the actual object storage. To address this, we can implement a cache lock mechanism, which ensures that only one proxy request is made at a time. Here is an example nginx configuration that accomplishes this: @@ -99,7 +99,7 @@ ln -s /etc/nginx/sites-available/files.example.com /etc/nginx/sites-enabled/ systemctl reload nginx ``` -You'll also want to get a SSL certificate for it: +You'll also want to get an SSL certificate for it: ```bash certbot --nginx -d files.example.com diff --git a/content/en/admin/optional/object-storage.md b/content/en/admin/optional/object-storage.md index 668a2a28..3a48ae0d 100644 --- a/content/en/admin/optional/object-storage.md +++ b/content/en/admin/optional/object-storage.md @@ -27,7 +27,7 @@ The web server must be configured to serve those files but not allow listing the ## S3-compatible object storage backends {#S3} -Mastodon can use S3-compatible object storage backends. ACL support is recommended as it allows Mastodon to quickly make the content of temporarily suspended users unavailable, or marginally improve security of private data. +Mastodon can use S3-compatible object storage backends. ACL support is recommended as it allows Mastodon to quickly make the content of temporarily suspended users unavailable, or marginally improve the security of private data. On Mastodon's end, you need to configure the following environment variables: - `S3_ENABLED=true` @@ -37,7 +37,7 @@ On Mastodon's end, you need to configure the following environment variables: - `S3_REGION` - `S3_HOSTNAME` (optional if you use Amazon AWS) - `S3_PERMISSION` (optional, if you use a provider that does not support ACLs or want to use custom ACLs) -- `S3_FORCE_SINGLE_REQUEST=true` (optional, if you run in trouble processing large files) +- `S3_FORCE_SINGLE_REQUEST=true` (optional, if you run into trouble processing large files) {{< page-ref page="admin/optional/object-storage-proxy.md" >}} @@ -46,16 +46,16 @@ You must serve the files with CORS headers, otherwise some functions of Mastodon {{}} {{< hint style="danger" >}} -In any case, your S3 bucket must be configured so that -- ACL configuration nonwithstanding -- all objects are publicly readable but neither writable or listable, while Mastodon itself can write to it. The configuration should be similar for all S3 providers, but common ones have been highlighted below. +Regardless of the ACL configuration, your S3 bucket must be set up to ensure that all objects are publicly readable but not writable or listable. At the same time, Mastodon itself should have write access to the bucket. This configuration is generally consistent across all S3 providers, and common ones are highlighted below. {{}} ### MinIO -MinIO is an open source implementation of an S3 object provider. This section does not cover how to install it, but how to configure a bucket for use in Mastodon. +MinIO is an open-source implementation of an S3 object provider. This section does not cover how to install it, but how to configure a bucket for use in Mastodon. You need to set a policy for anonymous access that allows read-only access to objects contained by the bucket without allowing listing them. -To do this, you need to set a custom policy (replace `mastodata` by the actual name of your S3 bucket): +To do this, you need to set a custom policy (replace `mastodata` with the actual name of your S3 bucket): ```json { "Version": "2012-10-17", @@ -72,7 +72,7 @@ To do this, you need to set a custom policy (replace `mastodata` by the actual n } ``` -Mastodon itself needs to be able to write to the bucket, so either use your admin MinIO account (discouraged) or an account specific to Mastodon (recommended) with the following policy attached (replace `mastodata` by the actual name of your S3 bucket): +Mastodon itself needs to be able to write to the bucket, so either use your admin MinIO account (discouraged) or an account specific to Mastodon (recommended) with the following policy attached (replace `mastodata` with the actual name of your S3 bucket): ```json { "Version": "2012-10-17", @@ -93,7 +93,7 @@ You can set those policies from the MinIO Console (web-based user interface) or Connect to the MinIO Console web interface and create a new bucket (or navigate to your existing bucket): ![](/assets/object-storage/minio-bucket.png) -Then, configure the “Access Policy” to a custom one that allows read access (`s3:GetObject`) without write access or ability to list objects (see above): +Then, configure the “Access Policy” to a custom one that allows read access (`s3:GetObject`) without write access or the ability to list objects (see above): ![](/assets/object-storage/minio-access-policy.png) {{< hint style="info" >}} @@ -108,7 +108,7 @@ Finally, create a new `mastodon` user with the `mastodon-readwrite` policy: #### Using the command-line utility -The same can be achieved using the [MinIO Client](https://min.io/docs/minio/linux/reference/minio-mc.html) command-line utility (can be called `mc` or `mcli` depending on where it is installed from). +The same can be achieved using the [MinIO Client](https://min.io/docs/minio/linux/reference/minio-mc.html) command-line utility (which can be called `mc` or `mcli` depending on where it is installed from). Create a new bucket: `mc mb myminio/mastodata` @@ -183,7 +183,7 @@ In your DigitalOcean Spaces Bucket, make sure that “File Listing” is “Rest ### Scaleway -If you want to use Scaleway Object Storage, we strongly recommend you to create a Scaleway project dedicaced to your Mastodon instance assets and to use a custom IAM policy. +If you want to use Scaleway Object Storage, we strongly recommend you create a Scaleway project dedicated to your Mastodon instance assets and use a custom IAM policy. First, create a new Scaleway project, in which you create your object storage bucket. You need to set your bucket visibility to "Private" to not allow objects to be listed. @@ -191,7 +191,7 @@ First, create a new Scaleway project, in which you create your object storage bu Now that your bucket is created, you need to create API keys to be used in your Mastodon instance configuration. -Head to the IAM settings (in your organisation menu, top right of the screen), and create a new IAM policy (eg `mastodon-media-access`) +Head to the IAM settings (in your organization menu, top right of the screen), and create a new IAM policy (eg `mastodon-media-access`) ![](/assets/object-storage/scaleway-policy.jpg) @@ -199,7 +199,7 @@ This policy needs to have one rule, allowing it to read, write and delete object ![](/assets/object-storage/scaleway-policy-rules.jpg) -Then head to the IAM Applications page, and a create a new one (eg `my-mastodon-instance`) and select the policy you created above. +Then head to the IAM Applications page, and create a new one (eg `my-mastodon-instance`) and select the policy you created above. Finally, click on the application you just created, then "API Keys", and create a new API key to use in your instance configuration. You should use the "Yes, set up preferred Project" option and select the project you created above as the default project for this key. @@ -225,7 +225,7 @@ Cloudflare R2 does not support ACLs, so Mastodon needs to be instructed not to t Without support for ACLs, media files from temporarily-suspended users will remain accessible. {{< /hint >}} -To get credentials for use in Mastodon, selecte “Manage R2 API Tokens” and create a new API token with “Edit” permissions. +To get credentials for use in Mastodon, select “Manage R2 API Tokens” and create a new API token with “Edit” permissions. {{< hint style="warning" >}} This section is currently under construction. diff --git a/content/en/admin/optional/tor.md b/content/en/admin/optional/tor.md index f49847fd..4f49eb77 100644 --- a/content/en/admin/optional/tor.md +++ b/content/en/admin/optional/tor.md @@ -136,9 +136,9 @@ server { Replace the long hash provided here with your Tor domain located in the file at `/var/lib/tor/onion_service/hostname`. -Note that the onion hostname has been prefixed with “mastodon.”. Your Tor address acts a wildcard domain. All subdomains will be routed through, and you can configure Nginx to respond to any subdomain you wish. If you do not wish to host any other services on your tor address you can omit the subdomain, or choose a different subdomain. +Note that the onion hostname has been prefixed with “mastodon.”. Your Tor address acts as a wildcard domain. All subdomains will be routed through, and you can configure Nginx to respond to any subdomain you wish. If you do not wish to host any other services on your tor address you can omit the subdomain, or choose a different subdomain. -Here you can see the payoff of moving your mastodon configurations to a different file. Without this all of your configurations would have to be copied to both places. Any change to your configuration would have to be made both places. +Here you can see the payoff of moving your mastodon configurations to a different file. Without this, all of your configurations would have to be copied to both places. Any change to your configuration would have to be made in both places. Restart your web server. diff --git a/content/en/admin/prerequisites.md b/content/en/admin/prerequisites.md index d2457599..e6c3029d 100644 --- a/content/en/admin/prerequisites.md +++ b/content/en/admin/prerequisites.md @@ -10,7 +10,7 @@ If you are setting up a fresh machine, it is recommended that you secure it firs ## Do not allow password-based SSH login (keys only) -First make sure you are actually logging in to the server using keys and not via a password, otherwise this will lock you out. Many hosting providers support uploading a public key and automatically set up key-based root login on new machines for you. +First, make sure you are actually logging in to the server using keys and not via a password, otherwise, this will lock you out. Many hosting providers support uploading a public key and automatically set up key-based root login on new machines for you. Edit `/etc/ssh/sshd_config` and find `PasswordAuthentication`. Make sure it’s uncommented and set to `no`. If you made any changes, restart sshd: @@ -48,7 +48,7 @@ enabled = true port = 22 ``` -Finally restart fail2ban: +Finally, restart fail2ban: ```bash systemctl restart fail2ban @@ -56,7 +56,7 @@ systemctl restart fail2ban ## Install a firewall and only allow SSH, HTTP and HTTPS ports -First, install iptables-persistent. During installation it will ask you if you want to keep current rules–decline. +First, install iptables-persistent. During installation, it will ask you if you want to keep the current rules–decline. ```bash apt install -y iptables-persistent diff --git a/content/en/admin/scaling.md b/content/en/admin/scaling.md index ed54d74f..0c323e0e 100644 --- a/content/en/admin/scaling.md +++ b/content/en/admin/scaling.md @@ -22,7 +22,7 @@ The web process serves short-lived HTTP requests for most of the application. Th - `WEB_CONCURRENCY` controls the number of worker processes - `MAX_THREADS` controls the number of threads per process -Threads share the memory of their parent process. Different processes allocate their own memory, though they share some memory via copy-on-write. A larger number of threads maxes out your CPU first, a larger number of processes maxes out your RAM first. +Threads share the memory of their parent process. Different processes allocate their own memory, though they share some memory via copy-on-write. A larger number of threads maxes out your CPU first, and a larger number of processes maxes out your RAM first. These values affect how many HTTP requests can be served at the same time. @@ -34,9 +34,9 @@ The streaming API handles long-lived HTTP and WebSockets connections, through wh - `STREAMING_API_BASE_URL` controls the base URL of the streaming API - `PORT` controls the port the streaming server will listen on, by default 4000. The `BIND` and `SOCKET` environment variables are also able to be used. -- Additionally the shared [database](/admin/config#postgresql) and [redis](/admin/config#redis) environment variables are used. +- Additionally, the shared [database](/admin/config#postgresql) and [redis](/admin/config#redis) environment variables are used. -The streaming API can be use a different subdomain if you want to by setting `STREAMING_API_BASE_URL`, this allows you to have one load balancer for streaming and one for web/API requests. However, this also requires applications to correctly request the streaming URL from the [instance endpoint](/methods/instance/#v2), instead of assuming that it's hosted on the same host as the Web API. +The streaming API can use a different subdomain if you want to by setting `STREAMING_API_BASE_URL`. This allows you to have one load balancer for streaming and one for web/API requests. However, this also requires applications to correctly request the streaming URL from the [instance endpoint](/methods/instance/#v2), instead of assuming that it's hosted on the same host as the Web API. One process of the streaming server can handle a reasonably high number of connections and throughput, but if you find that a single process isn't handling your instance's load, you can run multiple processes by varying the `PORT` number of each, and then using nginx to load balance traffic to each of those instances. For example, a community of about 50,000 accounts with 10,000-20,000 monthly active accounts, you'll typically have an average concurrent load of about 800-1200 streaming connections. @@ -88,13 +88,13 @@ Many tasks in Mastodon are delegated to background processing to ensure the HTTP While the amount of threads in the web process affects the responsiveness of the Mastodon instance to the end-user, the amount of threads allocated to background processing affects how quickly posts can be delivered from the author to anyone else, how soon e-mails are sent out, etc. -The amount of threads is not controlled by an environment variable in this case, but a command line argument in the invocation of Sidekiq, e.g.: +The number of threads is not regulated by an environment variable, but rather through a command line argument when invoking Sidekiq, as shown in the following example: ```bash bundle exec sidekiq -c 15 ``` -Would start the sidekiq process with 15 threads. Please mind that each threads needs to be able to connect to the database, which means that the database pool needs to be large enough to support all the threads. The database pool size is controlled with the `DB_POOL` environment variable and must be at least the same as the number of threads. +This would initiate the Sidekiq process with 15 threads. It's important to note that each thread requires a database connection, necessitating a sufficiently large database pool. The size of this pool is managed by the DB_POOL environment variable, which should be set to a value at least equal to the number of threads. #### Queues {#sidekiq-queues} @@ -117,7 +117,7 @@ bundle exec sidekiq -q default To run just the `default` queue. -The way Sidekiq works with queues, it first checks for tasks from the first queue, and if there are none, checks the next queue. This means, if the first queue is overfilled, the other queues will lag behind. +Sidekiq processes queues by first checking for tasks in the first queue, and if it finds none, it then checks the subsequent queue. Consequently, if the first queue is overfilled, tasks in the other queues may experience delays. As a solution, it is possible to start different Sidekiq processes for the queues to ensure truly parallel execution, by e.g. creating multiple systemd services for Sidekiq with different arguments. @@ -129,7 +129,7 @@ As a solution, it is possible to start different Sidekiq processes for the queue If you start running out of available Postgres connections (the default is 100) then you may find PgBouncer to be a good solution. This document describes some common gotchas as well as good configuration defaults for Mastodon. -Note that you can check “PgHero” in the administration view to see how many Postgres connections are currently being used. Typically Mastodon uses as many connections as there are threads both in Puma, Sidekiq and the streaming API combined. +User roles with `DevOps` permissions in Mastodon can monitor the current usage of Postgres connections through the PgHero link in the Administration view. Generally, the number of connections open is equal to the total threads in Puma, Sidekiq, and the streaming API combined. ### Installing PgBouncer {#pgbouncer-install} @@ -187,7 +187,7 @@ You’ll also want to create a `pgbouncer` admin user to log in to the PgBouncer "pgbouncer" "md5a45753afaca0db833a6f7c7b2864b9d9" ``` -In both cases the password is just `password`. +In both cases, the password is just `password`. #### Configuring pgbouncer.ini {#pgbouncer-ini} @@ -200,7 +200,7 @@ Add a line under `[databases]` listing the Postgres databases you want to connec mastodon_production = host=127.0.0.1 port=5432 dbname=mastodon_production user=mastodon password=password ``` -The `listen_addr` and `listen_port` tells PgBouncer which address/port to accept connections. The defaults are fine: +The `listen_addr` and `listen_port` tell PgBouncer which address/port to accept connections. The defaults are fine: ```text listen_addr = 127.0.0.1 @@ -219,7 +219,7 @@ Make sure the `pgbouncer` user is an admin: admin_users = pgbouncer ``` -**This next part is very important!** The default pooling mode is session-based, but for Mastodon we want transaction-based. In other words, a Postgres connection is created when a transaction is created and dropped when the transaction is done. So you’ll want to change the `pool_mode` from `session` to `transaction`: +Mastodon requires a different pooling mode than the default session-based one. Specifically, it needs a transaction-based pooling mode. This means that a Postgres connection is established at the start of a transaction and terminated upon its completion. Therefore, it's essential to change the `pool_mode` setting from `session` to `transaction`: ```ini pool_mode = transaction @@ -248,7 +248,7 @@ You should be able to connect to PgBouncer just like you would with Postgres: psql -p 6432 -U mastodon mastodon_production ``` -And then use your password to log in. +Then use your password to log in. You can also check the PgBouncer logs like so: @@ -306,7 +306,11 @@ Then use `\q` to quit. Redis is used widely throughout the application, but some uses are more important than others. Home feeds, list feeds, and Sidekiq queues as well as the streaming API are backed by Redis and that’s important data you wouldn’t want to lose (even though the loss can be survived, unlike the loss of the PostgreSQL database - never lose that!). However, Redis is also used for volatile cache. If you are at a stage of scaling up where you are worried about whether your Redis can handle everything, you can use a different Redis database for the cache. In the environment, you can specify `CACHE_REDIS_URL` or individual parts like `CACHE_REDIS_HOST`, `CACHE_REDIS_PORT` etc. Unspecified parts fallback to the same values as without the cache prefix. -As far as configuring the Redis database goes, basically you can get rid of background saving to disk, since it doesn’t matter if the data gets lost on restart and you can save some disk I/O on that. You can also add a maximum memory limit and a key eviction policy, for that, see this guide: [Using Redis as an LRU cache](https://redis.io/topics/lru-cache) +Additionally, Redis is used for volatile caching. If you're scaling up and concerned about Redis's capacity to handle the load, you can allocate a separate Redis database specifically for caching. To do this, set `CACHE_REDIS_URL` in the environment, or define individual components such as `CACHE_REDIS_HOST`, `CACHE_REDIS_PORT`, etc. + +Unspecified components will default to their values without the cache prefix. + +When configuring the Redis database for caching, it's possible to disable background saving to disk, as data loss on restart is not critical in this context, and this can save some disk I/O. Additionally, consider setting a maximum memory limit and implementing a key eviction policy. For more details on these configurations, refer to this guide:[Using Redis as an LRU cache](https://redis.io/topics/lru-cache) ## Seperate Redis for Sidekiq {#redis-sidekiq} @@ -371,7 +375,7 @@ systemctl restart redis-sidekiq.service ## Read-replicas {#read-replicas} -To reduce the load on your Postgresql server, you may wish to setup hot streaming replication (read replica). [See this guide for an example](https://cloud.google.com/community/tutorials/setting-up-postgres-hot-standby). You can make use of the replica in Mastodon in these ways: +To reduce the load on your PostgreSQL server, you may wish to set up hot streaming replication (read replica). [See this guide for an example](https://cloud.google.com/community/tutorials/setting-up-postgres-hot-standby). You can make use of the replica in Mastodon in these ways: * The streaming API server does not issue writes at all, so you can connect it straight to the replica (it is not querying the database very often anyway, so the impact of this is small). * Use the Makara driver in the web and Sidekiq processes, so that writes go to the master database, while reads go to the replica. Let’s talk about that. @@ -398,7 +402,7 @@ production: url: postgresql://db_user:db_password@db_host:db_port/db_name ``` -Make sure the URLs point to wherever your PostgreSQL servers are. You can add multiple replicas. You could have a locally installed pgBouncer with configuration to connect to two different servers based on database name, e.g. “mastodon” going to the primary, “mastodon_replica” going to the replica, so in the file above both URLs would point to the local pgBouncer with the same user, password, host and port, but different database name. There are many possibilities how this could be setup! For more information on Makara, [see their documentation](https://github.com/taskrabbit/makara#databaseyml). +Make sure the URLs point to wherever your PostgreSQL servers are. You can add multiple replicas. You could have a locally installed pgBouncer with a configuration to connect to two different servers based on the database name, e.g. “mastodon” going to the primary, “mastodon_replica” going to the replica, so in the file above both URLs would point to the local pgBouncer with the same user, password, host and port, but different database name. There are many possibilities how this could be set up! For more information on Makara, [see their documentation](https://github.com/taskrabbit/makara#databaseyml). {{< hint style="warning" >}} Make sure the sidekiq processes run with the stock `config/database.yml` to avoid failing jobs and data loss! diff --git a/content/en/admin/tootctl.md b/content/en/admin/tootctl.md index d0976be4..3ae1285e 100644 --- a/content/en/admin/tootctl.md +++ b/content/en/admin/tootctl.md @@ -32,7 +32,7 @@ RAILS_ENV=production bin/tootctl help Erase this server from the federation by broadcasting account Delete activities to all known other servers. This allows a "clean exit" from running a Mastodon server, as it leaves next to no cache behind on other servers. This command is always interactive and requires confirmation twice. -No local data is actually deleted, because emptying the database or deleting the entire VPS is faster. If you run this command then continue to operate the instance anyway, then there will be a state mismatch that might lead to glitches and issues with federation. +No local data is actually deleted because emptying the database or deleting the entire VPS is faster. If you run this command and then continue to operate the instance anyway, then there will be a state mismatch that might lead to glitches and issues with federation. {{< hint style="danger" >}} **Make sure you know exactly what you are doing before running this command.** This operation is NOT reversible, and it can take a long time. The server will be in a BROKEN STATE after this command finishes. A running Sidekiq process is required, so do not shut down the server until the queues are fully cleared. @@ -86,7 +86,7 @@ Generate and broadcast new RSA keys, as part of security maintenance. ### `tootctl accounts create` {#accounts-create} -Create a new user account with given `USERNAME` and provided `--email`. +Create a new user account with the given `USERNAME` and provided `--email`. `USERNAME` : Local username for the new account. {{}} @@ -146,7 +146,7 @@ Modify a user account's role, email, active status, approval mode, or 2FA requir : Approve `USERNAME`'s account, if you are/were in approval mode. `--disable-2fa` -: Remove additional factors and allow login with password. +: Remove additional factors and allow login with a password. `--reset-password` : Resets the password of the given account. @@ -165,7 +165,7 @@ Modify a user account's role, email, active status, approval mode, or 2FA requir ### `tootctl accounts delete` {#accounts-delete} -Delete a user account with given USERNAME. +Delete a user account with the given USERNAME. `USERNAME` : Local username for the new account. {{}} @@ -179,7 +179,7 @@ Delete a user account with given USERNAME. ### `tootctl accounts backup` {#accounts-backup} -Request a backup for a user account with given USERNAME. The backup will be created in Sidekiq asynchronously, and the user will receive an email with a link to it once it's done. +Request a backup for a user account with the given USERNAME. The backup will be created in Sidekiq asynchronously, and the user will receive an email with a link to it once it's done. `USERNAME` : Local username for the new account. {{}} @@ -207,7 +207,7 @@ Remove remote accounts that no longer exist. Queries every single remote account **Version history:**\ 2.6.0 - added\ 2.8.0 - add `--dry-run`\ -3.5.0 - add ability to pass specific domains +3.5.0 - add the ability to pass specific domains --- @@ -230,7 +230,7 @@ Refetch remote user data and files for one or multiple accounts. : The number of workers to use for this task. Defaults to N=5. `--verbose` -: Print additional information while task is processing. +: Print additional information while a task is processing. `--dry-run` : Print expected results only, without performing any actions. @@ -557,7 +557,7 @@ Imports custom emoji from a .tar.gz archive at a given path. The archive should ### `tootctl emoji purge` {#emoji-purge} -Remove all custom emoji. +Remove all custom emojis. `--remote-only` : If provided, remove only from remote domains. diff --git a/content/en/admin/troubleshooting.md b/content/en/admin/troubleshooting.md index 06178075..a56c6061 100644 --- a/content/en/admin/troubleshooting.md +++ b/content/en/admin/troubleshooting.md @@ -11,7 +11,7 @@ menu: All error messages with stack traces are written to the system log. When using systemd, the logs of each systemd service can be browsed with `journalctl -u mastodon-web` (substitute with the correct service name). When using Docker, it’s similar: `docker logs mastodon_web_1` (substitute with the correct container name). -Specific details of server-side errors are _never_ displayed to the public, as they can reveal what your setup looks like internally and give attackers clues how to get in, or how to abuse the system more efficiently. +Specific details of server-side errors are _never_ displayed to the public, as they can reveal what your setup looks like internally and give attackers clues on how to get in, or how to abuse the system more efficiently. Each response from Mastodon’s web server carries a header with a unique request ID, which is also reflected in the logs. By inspecting the headers of the error page, you can easily find the corresponding stack trace in the log. @@ -29,7 +29,7 @@ Check that you are specifying the correct environment with `RAILS_ENV=production ## **I encountered a compilation error while executing `RAILS_ENV=production bundle exec rails assets:precompile`, but no more information is given. How to fix it?** -Usually it's because your server ran out of memory while compiling assets. Use a swapfile or increase the swap space to increase the memory capacity. Run `RAILS_ENV=production bundle exec rake tmp:cache:clear` to clear cache, then execute `RAILS_ENV=production bundle exec rails assets:precompile` to compile again. Make sure you clear the cache after a compilation error, or it will show "Everything's OK" but leave the assets unchanged. +Usually, it's because your server ran out of memory while compiling assets. Use a swapfile or increase the swap space to increase the memory capacity. Run `RAILS_ENV=production bundle exec rake tmp:cache:clear` to clear cache, then execute `RAILS_ENV=production bundle exec rails assets:precompile` to compile again. Make sure you clear the cache after a compilation error, or it will show "Everything's OK" but leave the assets unchanged. ## **I am getting this error: `Read-only file system @ dir_s_mkdir`. Why?** diff --git a/content/en/admin/troubleshooting/index-corruption.md b/content/en/admin/troubleshooting/index-corruption.md index 78a2ef61..585b9428 100644 --- a/content/en/admin/troubleshooting/index-corruption.md +++ b/content/en/admin/troubleshooting/index-corruption.md @@ -15,17 +15,17 @@ Textual values in the database, such as usernames, or status identifiers, are co When setting up a database, Mastodon will use the database server's default locale settings, including the default collation rules, which often is defined by the operating system's settings. Unfortunately, in late 2018, a `glibc` update changed the collation rules for many locales, which means databases using an affected locale would now order textual values differently. -Since the database indexes are algorithmic structures which rely on the ordering of the values they are indexing, some of them would become inconsistent. +Since the database indexes are algorithmic structures that rely on the ordering of the values they are indexing, some of them would become inconsistent. More information: https://wiki.postgresql.org/wiki/Locale_data_changes https://postgresql.verite.pro/blog/2018/08/27/glibc-upgrade.html ## Am I affected by this issue? {#am-i-affected} If your database is not using `C` or `POSIX` for its collation setting (which you can check with `SELECT datcollate FROM pg_database WHERE datname = current_database();`), -your indexes might be inconsistent, if you ever ran with a version of glibc prior to 2.28 and did not immediately reindex your databases after updating to glibc 2.28 or newer. +your indexes might be inconsistent if you ever ran with a version of glibc prior to 2.28 and did not immediately reindex your databases after updating to glibc 2.28 or newer. {{< hint style="info" >}} -You may have found this page because of **PgHero** warnings about "Duplicate Indexes". While such warnings can sometimes be indicative of an issue in deploying or updating Mastodon, **they are not related to database index corruption and not indicative of any functional issue with your database**. +You may have found this page because of PgHero warnings about "Duplicate Indexes". While such warnings can sometimes be indicative of an issue in deploying or updating Mastodon, **they are not related to database index corruption and are not indicative of any functional issue with your database**. {{< /hint >}} You can check whether your indexes are consistent using [PostgreSQL's `amcheck` module](https://www.postgresql.org/docs/10/amcheck.html): as the database server's super user, connect to your Mastodon database and issue the following (this may take a while): @@ -79,7 +79,7 @@ If this succeeds, without returning an error, your database should be consistent ## Fixing the issue {#fixing} -Unless you take action, if you are affected, your database could get more and more inconsistent as the time pass. Therefore, it is important to fix it as soon as possible. +Unless you take action, if you are affected, your database could get more and more inconsistent as time passes. Therefore, it is important to fix it as soon as possible. Mastodon 3.2.2 and later come with a semi-interactive script to fix those corruptions as best as possible. If you're on an earlier version, update to 3.2.2 first. It is possible that running the database migrations to 3.2.2 will fail because of those very corruptions, but the database should then be brought to a state that the maintenance tool bundled with Mastodon 3.2.2 can then recover from. diff --git a/content/en/admin/upgrading.md b/content/en/admin/upgrading.md index 296f3e4f..a47681dc 100644 --- a/content/en/admin/upgrading.md +++ b/content/en/admin/upgrading.md @@ -34,7 +34,7 @@ And navigate to the Mastodon root directory: cd /home/mastodon/live ``` -Download the releases’s code, assuming that the version is called `v3.1.2`: +Download the release’s code, assuming that the version is called `v3.1.2`: ```bash git fetch --tags @@ -69,7 +69,7 @@ systemctl reload mastodon-web The `reload` operation is a zero-downtime restart, also called "phased restart". As such, Mastodon upgrades usually do not require any advance notice to users about planned downtime. In rare cases, you can use the `restart` operation instead, but there will be a (short) felt interruption of service for your users. {{< /hint >}} -The **streaming API** server is also updated and requires a restart, doing so will result in all connected clients being disconnected, which can increase load on your server: +The **streaming API** server is also updated and requires a restart, doing so will result in all connected clients being disconnected, which can increase the load on your server: ```bash systemctl restart mastodon-streaming diff --git a/content/en/api/guidelines.md b/content/en/api/guidelines.md index a3a526a0..e5e43b6c 100644 --- a/content/en/api/guidelines.md +++ b/content/en/api/guidelines.md @@ -9,7 +9,7 @@ menu: ## Login {#login} -**The user must be able to login to any Mastodon server from the app**. This means you must ask for the server's domain and use the app registrations API to dynamically obtain OAuth2 credentials. +**The user must be able to log in to any Mastodon server from the app**. This means you must ask for the server's domain and use the app registrations API to dynamically obtain OAuth2 credentials. {{< page-ref page="client/authorized" >}} @@ -19,11 +19,11 @@ menu: ## Usernames {#username} -**Decentralization must be transparent to the user**. It should be possible to see that a given user is from another server, for example, by displaying their `acct` somewhere. Note that `acct` is equal to `username` for local users, and equal to `username@domain` for remote users. +**Decentralization must be transparent to the user**. It should be possible to see that a given user is from another server, for example, by displaying their `acct` somewhere. Note that `acct` is equal to `username` for local users and equal to `username@domain` for remote users. ## Handling and sorting IDs {#id} -Vanilla Mastodon entity IDs are generated as integers and cast to string. However, this does not mean that IDs _are_ integers, nor should they be cast to integer! Doing so can lead to broken client apps due to integer overflow, so **always treat IDs as strings.** +Vanilla Mastodon entity IDs are generated as integers and cast to string. However, this does not mean that IDs _are_ integers, nor should they be cast to integers! Doing so can lead to broken client apps due to integer overflow, so **always treat IDs as strings.** With that said, because IDs are string representations of numbers, they can still be sorted chronologically very easily by doing the following: @@ -48,11 +48,11 @@ min_id For example, we might fetch `https://mastodon.example/api/v1/accounts/1/statuses` with certain parameters, and we will get the following results in the following cases: -- Setting `?max_id=1` will return no statuses, since there are no statuses with an ID earlier than `1`. -- Setting `?since_id=1` will return the latest statuses, since there have been many statuses since `1`. +- Setting `?max_id=1` will return no statuses since there are no statuses with an ID earlier than `1`. +- Setting `?since_id=1` will return the latest statuses since there have been many statuses since `1`. - Setting `?min_id=1` will return the oldest statuses, as `min_id` sets the cursor. -Some API methods operate on entity IDs that are not publicly exposed in the API response, and are only known to the backend and the database. (This is usually the case for entities that reference other entities, such as Follow entities which reference Accounts, or Favourite entities which reference Statuses, etc.) +Some API methods operate on entity IDs that are not publicly exposed in the API response and are only known to the backend and the database. (This is usually the case for entities that reference other entities, such as Follow entities which reference Accounts, or Favourite entities which reference Statuses, etc.) To get around this, Mastodon may return links to a "prev" and "next" page. These links are made available via the HTTP `Link` header on the response. Consider the following fictitious API call: @@ -91,7 +91,7 @@ Plain text is not available for content from remote servers, and plain text synt ### Mentions, hashtags, and custom emoji {#tags} -Mentions and hashtags are `` tags. Custom emoji remain in their plain text shortcode form. To give those entities their semantic meaning and add special handling, such as opening a mentioned profile within your app instead of as a web page, metadata is included with the [Status]({{< relref "entities/Status" >}}), which can be matched to a particular tag. +Mentions and hashtags are `` tags. Custom emojis remain in their plain text shortcode form. To give those entities their semantic meaning and add special handling, such as opening a mentioned profile within your app instead of as a web page, metadata is included with the [Status]({{< relref "entities/Status" >}}), which can be matched to a particular tag. {{< page-relref ref="entities/Status" caption="Status entity" >}} @@ -103,7 +103,7 @@ Mentions and hashtags are `` tags. Custom emoji remain in their plain text sh ### Link shortening {#links} -Links in Mastodon are not shortened using URL shorteners, and the usage of URL shorteners is heavily discouraged. URLs in text always count for 23 characters, and are intended to be shortened visually. For that purpose, a link is marked up like this: +Links in Mastodon are not shortened using URL shorteners, and the usage of URL shorteners is heavily discouraged. URLs in text always count for 23 characters and are intended to be shortened visually. For that purpose, a link is marked up like this: ```html @@ -113,7 +113,7 @@ Links in Mastodon are not shortened using URL shorteners, and the usage of URL s ``` -The spans with the `invisible` class can be hidden. The middle span is intended to remain visible. It may have no class if the URL is not very long; otherwise it will have an `ellipsis` class. No ellipsis (`…`) character is inserted in the markup; instead, you are expected to insert it yourself if you need it in your app. +The spans with the `invisible` class can be hidden. The middle span is intended to remain visible. It may have no class if the URL is not very long; otherwise, it will have an `ellipsis` class. No ellipsis (`…`) character is inserted in the markup; instead, you are expected to insert it yourself if you need it in your app. ## Filters {#filters} @@ -121,7 +121,7 @@ The spans with the `invisible` class can be hidden. The middle span is intended If a filter applies to a Status, a corresponding FilterResult will be included in the `filtered` attribute. Clients should check this attribute for any matches and use them to apply the intended filter action. -However, client implementations may still want to perform their own rule matching client-side, as this would allow retroactively apply filter changes without re-fetching posts from the server. When doing so, they should take care to not ignore `filtered` entries for which there are other attributes than `keyword_matches`, so as to handle extensions of the filtering system (e.g. `status_matches`). +However, client implementations may still want to perform their own rule matching client-side, as this would allow retroactively applying filter changes without re-fetching posts from the server. When doing so, they should take care to not ignore `filtered` entries for which there are other attributes than `keyword_matches`, so as to handle extensions of the filtering system (e.g. `status_matches`). Matched filters need to be filtered based on context (`home`, `notifications`, `public`, `thread` or `profile`) and expiration date. @@ -138,8 +138,8 @@ Expired filters are not deleted by the server. They should no longer be applied, If `whole_word` is true, the client app should do the following: * Define ‘word constituent characters’ for your app. In the official implementation, it’s `[A-Za-z0-9_]` in JavaScript, and `[[:word:]]` in Ruby. Ruby uses the POSIX character class (Letter | Mark | Decimal_Number | Connector_Punctuation). -* If the phrase starts with a word character, and if the previous character before matched range is a word character, its matched range should be treated to not match. -* If the phrase ends with a word character, and if the next character after matched range is a word character, its matched range should be treated to not match. +* If the phrase starts with a word character, and if the previous character before the matched range is a word character, its matched range should be treated to not match. +* If the phrase ends with a word character, and if the next character after the matched range is a word character, its matched range should be treated to not match. Please check `app/javascript/mastodon/selectors/index.js` and `app/lib/feed_manager.rb` in the Mastodon source code for more details. @@ -149,6 +149,6 @@ Please check `app/javascript/mastodon/selectors/index.js` and `app/lib/feed_mana ## Focal points for cropping media thumbnails {#focal-points} -Server-side preview images are never cropped, to support a variety of apps and user interfaces. Therefore, the cropping must be done by those apps. To crop intelligently, focal points can be used to ensure a certain section of the image is always within the cropped viewport. See this [guide on how focal points are defined](https://github.com/jonom/jquery-focuspoint#1-calculate-your-images-focus-point). In summary, floating points range from -1.0 to 1.0, left-to-right or bottom-to-top. (0,0) is the center of the image. (0.5, 0.5) would be in the center of the upper-right quadrant. (-0.5, -0.5) would be in the center of the lower-left quadrant. For reference, thumbnails in the Mastodon frontend are most commonly 16:9. +Server-side preview images are never cropped, to support a variety of apps and user interfaces. Therefore, the cropping must be done by those apps. To crop intelligently, focal points can be used to ensure a certain section of the image is always within the cropped viewport. See this [guide on how focal points are defined](https://github.com/jonom/jquery-focuspoint#1-calculate-your-images-focus-point). In summary, floating points range from -1.0 to 1.0, left-to-right or bottom-to-top. (0,0) is the center of the image. (0.5, 0.5) would be in the center of the upper-right quadrant. (-0.5, -0.5) would be in the center of the lower-left quadrant. For reference, thumbnails in the Mastodon front end are most commonly 16:9. {{< figure src="assets/focal-points.jpg" caption="A demonstration of various focal points and their coordinates." >}} diff --git a/content/en/api/oauth-scopes.md b/content/en/api/oauth-scopes.md index b42beddf..93512f28 100644 --- a/content/en/api/oauth-scopes.md +++ b/content/en/api/oauth-scopes.md @@ -17,9 +17,9 @@ Multiple scopes can be requested at the same time: During app creation with the Mind the `scope` vs `scopes` difference. This is because `scope` is a standard OAuth parameter name, so it is used in the OAuth methods. Mastodon’s own REST API uses the more appropriate `scopes`. {{< /hint >}} -If you do not specify a `scope` in your authorization request, or a `scopes` in your app creation request, the resulting access token / app will default to `read` access. +If you do not specify a `scope` in your authorization request, or a `scopes` in your app creation request, the resulting access token/app will default to `read` access. -The set of scopes saved during app creation must include all the scopes that you will request in the authorization request, otherwise authorization will fail. +The set of scopes saved during app creation must include all the scopes that you will request in the authorization request, otherwise, authorization will fail. ### Version history {#versions} diff --git a/content/en/client/authorized.md b/content/en/client/authorized.md index b4ec71e0..78226299 100644 --- a/content/en/client/authorized.md +++ b/content/en/client/authorized.md @@ -9,7 +9,7 @@ menu: ## Scopes explained {#scopes} -When we registered our app and when we will authorize our user, we need to define what exactly our generated token will have permission to do. This is done through the use of OAuth scopes. Each API method has an associated scope, and can only be called if the token being used for authorization has been generated with the corresponding scope. +When we register our app and when we authorize our user, we need to define what exactly our generated token will have permission to do. This is done through the use of OAuth scopes. Each API method has an associated scope, and can only be called if the token being used for authorization has been generated with the corresponding scope. Scopes must be a subset. When we created our app, we specified `read write push` -- we could request all available scopes by specifying `read write push`, but it is a better idea to only request what your app will actually need through granular scopes. See [OAuth Scopes]({{< relref "api/oauth-scopes" >}}) for a full list of scopes. Each API method's documentation will also specify the OAuth access level and scope required to call it. diff --git a/content/en/client/intro.md b/content/en/client/intro.md index 432f43ea..6f1a85ab 100644 --- a/content/en/client/intro.md +++ b/content/en/client/intro.md @@ -9,7 +9,7 @@ menu: ## An introduction to REST {#rest} -Mastodon provides access to its data over a REST API. REST stands for REpresentational State Transfer, but for our purposes, just think of it as sending and receiving information about various resources based on the request. The Mastodon REST API uses HTTP for its requests, and JSON for its payloads. +Mastodon provides access to its data over a REST API. REST stands for REpresentational State Transfer, but for our purposes, just think of it as sending and receiving information about various resources based on the request. The Mastodon REST API uses HTTP for its requests and JSON for its payloads. ## Understanding HTTP requests and responses {#http} @@ -64,7 +64,7 @@ curl -X POST \ ### JSON {#json} -*JavaScript Object Notation* as defined in ECMA-404. Quick one page overview: https://www.json.org/ +*JavaScript Object Notation* as defined in ECMA-404. Quick one-page overview: https://www.json.org/ Similar to sending form data, but with an additional header to specify that the data is in JSON format. To send a JSON request with cURL, specify the JSON content type with a header, then send the JSON data as form data: diff --git a/content/en/client/public.md b/content/en/client/public.md index c7d4d314..3cc4897c 100644 --- a/content/en/client/public.md +++ b/content/en/client/public.md @@ -58,7 +58,7 @@ We can do similarly for hashtags by calling [GET /api/v1/timelines/tag/:hashtag] curl https://mastodon.example/api/v1/timelines/tag/cats?limit=2 ``` -We should once again see 2 statuses have been returned in a JSON array of [Status]({{< relref "entities/status" >}}) entities. We can parse the JSON by array, then by object. If we were using Python, our code might look something like this: +We should once again see that 2 statuses have been returned in a JSON array of [Status]({{< relref "entities/status" >}}) entities. We can parse the JSON by array, then by object. If we were using Python, our code might look something like this: ```python import requests @@ -71,7 +71,7 @@ print(statuses[0]["content"]) # this prints the status text ``` {{< hint style="info" >}} -Parsing JSON and using it in your program is outside of the scope of this tutorial, as it will be different depending on your choice of programming language and on the design of your program. Look for other tutorials on how to work with JSON in your programming language of choice. +Parsing JSON and using it in your program is outside of the scope of this tutorial, as it will be different depending on your choice of programming language and the design of your program. Look for other tutorials on how to work with JSON in your programming language of choice. {{< /hint >}} {{< hint style="info" >}} diff --git a/content/en/client/token.md b/content/en/client/token.md index 61d34913..b983c90e 100644 --- a/content/en/client/token.md +++ b/content/en/client/token.md @@ -11,7 +11,7 @@ menu: Up until this point, we've been working with publicly available information, but not all information is public. Some information requires permission before viewing it, in order to audit who is requesting that information (and to potentially revoke or deny access). -This is where [OAuth]({{< relref "spec/oauth" >}}) comes in. OAuth is a mechanism for generating access tokens which can be used to _authenticate (verify)_ that a request is coming from a specific client, and ensure that the requested action is _authorized (allowed)_ by the server's access control policies. +This is where [OAuth]({{< relref "spec/oauth" >}}) comes in. OAuth is a mechanism for generating access tokens that can be used to _authenticate (verify)_ that a request is coming from a specific client, and ensure that the requested action is _authorized (allowed)_ by the server's access control policies. ## Creating our application {#app} @@ -31,7 +31,7 @@ In the above example, we specify the client name and website, which will be show * `redirect_uris` has been set to the "out of band" token generation, which means that any generated tokens will have to be copied and pasted manually. The parameter is called `redirect_uris` because it is possible to define more than one redirect URI, but when generating the token, we will need to provide a URI that is included within this list. * `scopes` allow us to define what permissions we can request later. However, the requested scope later can be a subset of these registered scopes. See [OAuth Scopes]({{< relref "api/oauth-scopes" >}}) for more information. -We should see an Application entity returned, but for now we only care about client_id and client_secret. These values will be used to generate access tokens, so they should be cached for later use. See [POST /api/v1/apps]({{< relref "methods/apps#create" >}}) for more details on registering applications. +We should see an Application entity returned, but for now, we only care about client_id and client_secret. These values will be used to generate access tokens, so they should be cached for later use. See [POST /api/v1/apps]({{< relref "methods/apps#create" >}}) for more details on registering applications. ## Example authentication code flow {#flow} diff --git a/content/en/dev/code.md b/content/en/dev/code.md index 56927084..cda075b5 100644 --- a/content/en/dev/code.md +++ b/content/en/dev/code.md @@ -9,7 +9,7 @@ menu: ### Code structure {#structure} -The following overview should not be seen as complete or authoritative, but as a rough guidance to help you find your way in the application. +The following overview should not be seen as complete or authoritative but as a rough guidance to help you find your way in the application. #### Ruby {#ruby} diff --git a/content/en/dev/overview.md b/content/en/dev/overview.md index b7d64520..64b0759b 100644 --- a/content/en/dev/overview.md +++ b/content/en/dev/overview.md @@ -11,11 +11,11 @@ Mastodon is a Ruby on Rails application with a React.js front-end. It follows s 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. -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. +Tutorials for installing these dependencies can be found on the “Installing from source” page in the Running Mastodon section of the documentation. After following the installation guide in the Running Mastodon section, see the “Setting up a dev environment” page for further instructions on how to configure your environment for development. ### Environments {#environments} -An “environment” is a set of configuration values intended for a specific use case. Some environments could be: development, in which you intend to change the code; test, in which you intend to run the automated test suite; staging, which is meant to preview the code to end-users; and production, which is intended to face end-users. Mastodon comes with configurations for development, test and production. +An “environment” is a set of configuration values intended for a specific use case. Some environments could be: development, in which you intend to change the code; test, in which you intend to run the automated test suite; staging, which is meant to preview the code to end-users; and production, which is intended to face end-users. Mastodon comes with configurations for development, testing and production. The default value of `RAILS_ENV` is `development`, so you don’t need to set anything extra to run Mastodon in development mode. In fact, all of Mastodon’s configuration has correct defaults for the development environment, so you do not need an `.env` file unless you need to customize something. Here are some of the different behaviours between the development environment and the production environment: From f7cc3d601f4f987d214106791aa4cee83216c47a Mon Sep 17 00:00:00 2001 From: Liam M Stojanovic Date: Thu, 7 Dec 2023 14:47:38 -0500 Subject: [PATCH 11/36] Role management (#1268) * default roles, edit roles, assets, formatting --- content/en/admin/roles.md | 98 +++++++++++++++++++++ static/assets/admin-roles-edit-role-ui.png | Bin 0 -> 141657 bytes static/assets/admin-roles-edit-ui.png | Bin 0 -> 22216 bytes static/assets/admin-roles-new-ui.png | Bin 0 -> 110794 bytes static/assets/admin-roles-ui.png | Bin 0 -> 134369 bytes 5 files changed, 98 insertions(+) create mode 100644 content/en/admin/roles.md create mode 100644 static/assets/admin-roles-edit-role-ui.png create mode 100644 static/assets/admin-roles-edit-ui.png create mode 100644 static/assets/admin-roles-new-ui.png create mode 100644 static/assets/admin-roles-ui.png diff --git a/content/en/admin/roles.md b/content/en/admin/roles.md new file mode 100644 index 00000000..079ebdfb --- /dev/null +++ b/content/en/admin/roles.md @@ -0,0 +1,98 @@ +--- +title: Roles +description: Management of roles from the admin dashboard. +menu: + docs: + parent: admin +--- + +# Roles {#roles} +When the database is seeded, roles are derived from the values present in [`~/config/roles.yml`](https://github.com/mastodon/mastodon/blob/main/config/roles.yml). + +{{< page-ref page="entities/Role" >}} + +The resultant [default roles](#default-roles) are `Owner`, `Admin`, and `Moderator`. + +A role and its attributes can be created using [Add role](#add-role), present on the *Roles* (`/admin/roles`) page. + +![](/assets/admin-roles-ui.png) + +An existing role's attributes can be changed using the [edit role](#edit-role) feature. + +## Default roles {#default-roles} +### Base role (*Default permissions*) {#default-base-role} + +Affects all users, including users without an assigned role. + +The only permission flag that can be altered for this role is **Invite Users**. Enabling this permission allows all users to send invitations. + +The base role has a priority of `0`, and this value cannot be altered. + +### Owner {#default-owner-role} + +A role that is assigned the **Administrator** permission flag, bypassing all permissions. Users with the owner role have every [permission flag](/entities/Role/#permission-flags) enabled. + +The role's *Name*, *Badge color*, and *Display badge* attributes can be changed. No permissions can be edited / revoked from this role. + +The owner role has the highest [priority](#role-priority) of any role (`1000`). The owner can modify any other role attributes. No role can be created which supersedes the owner role, as [role priority](#role-priority) for new and existing roles must be <= `999`. + +### Admin {#default-admin-role} + +A role that is assigned all **Moderation** and **Administration** permission flags. + +The **DevOps** permission flag for this role is disabled, but can be enabled by an **Owner** (or a custom role with a higher priority value). + +The role's *Name*, *Badge color*, and *Display badge* attributes can be changed. + +The admin role has a priority of `100`. + +### Moderator {#default-moderator-role} + +A role that is assigned certain **Moderation** permission flags. These include... +- **View Dashboard** +- **View Audit Log** +- **Manage Users** +- **Manage Reports** +- **Manage Taxonomies** + +The role's *Name*, *Badge color*, and *Display badge* attributes can be changed. + +The moderator role has a priority of `10`. + +## Add Role {#add-role} + +The `admin/roles/new` page allows for the creation of a custom role. + +![](/assets/admin-roles-new-ui.png) + +### Input Fields {#add-role-input-fields} + +{{< page-relref ref="entities/Role#name" caption="Name">}} + +Duplicate role names can exist. They are discerned in the database by their `id`, which cannot be set from the web interface. + +{{< page-relref ref="entities/Role#color" caption="Badge color">}} + +### Priority {#role-priority} + +- Defaults to `0` + - Cannot be > `999` + - Can be any negative integer value +- Two roles can have the same priority value + +> "Higher role decides conflict resolution in certain situations. Certain actions can only be performed on roles with a lower priority." + +{{< page-relref ref="entities/Role#highlighted" caption="Display role as badge on user profiles">}} + +{{< page-relref ref="entities/Role#permissions" caption="Permissions">}} + + +## Edit role {#edit-role} + +![](/assets/admin-roles-edit-ui.png) + +An existing role and its attributes can be edited using *Edit* in the role list. [Input fields](#add-role-input-fields) can be changed and saved, just as they can when creating a new role. The role can also be deleted using this form. + +![](/assets/admin-roles-edit-role-ui.png) + +A logged in user with permission to **Manage Roles** will always be able to see every role, but cannot modify roles that exceed or are equal to their assigned role's [priority](#role-priority). \ No newline at end of file diff --git a/static/assets/admin-roles-edit-role-ui.png b/static/assets/admin-roles-edit-role-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..82bcb540acb9d23b704a475015227bfea5748687 GIT binary patch literal 141657 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

Hola mundo

", - "detected_source_language": "en", + "content": "

Hello world

", + "spoiler_text": "Greatings ahead", + "media_attachments": [ + { + "id": 22345792, + "description": "Status author waving at the camera" + } + ], + "poll": null, + "detected_source_language": "es", "provider": "DeepL.com" } ``` +Translation of status with poll: +```json +{ + "content": "

Should I stay or should I go?

", + "spoiler_text": "", + "media_attachments": [], + "poll": [ + { + "id": 34858, + "options": [ + { + "title": "Stay" + }, + { + "title": "Go" + } + ] + } + ], + "detected_source_language": "ja", + "provider": "DeepL.com" +} +``` + + ## Attributes ### `content` {#content} -**Description:** The translated text of the status.\ +**Description:** HTML-encoded translated content of the status.\ **Type:** String (HTML)\ **Version history:**\ 4.0.0 - added +### `spoiler_warning` {#spoiler_warning} + +**Description:** The translated spoiler warning of the status.\ +**Type:** String\ +**Version history:**\ +4.2.0 - added + +### `poll` {#poll} + +**Description:** The translated poll options of the status.\ +**Type:** Array\ +**Version history:**\ +4.2.0 - added + +### `media_attachments` {#media_attachments} + +**Description:** The translated media descriptions of the status.\ +**Type:** Array\ +**Version history:**\ +4.2.0 - added + ### `detected_source_language` {#detected_source_language} **Description:** The language of the source text, as auto-detected by the machine translation provider.\ diff --git a/content/en/methods/statuses.md b/content/en/methods/statuses.md index 3fc2e88c..64dcf1d7 100644 --- a/content/en/methods/statuses.md +++ b/content/en/methods/statuses.md @@ -558,12 +558,45 @@ Authorization #### Response ##### 200: OK -Translating the first "Hello world" post from mastodon.social into Spanish +Translating a status in Spanish with content warning and media into English ```json { - "content": "

Hola mundo

", - "detected_source_language": "en", + "content": "

Hello world

", + "spoiler_text": "Greatings ahead", + "media_attachments": [ + { + "id": 22345792, + "description": "Status author waving at the camera" + } + ], + "poll": null, + "detected_source_language": "es", + "provider": "DeepL.com" +} +``` + +Translating a status with poll into English + +```json +{ + "content": "

Should I stay or should I go?

", + "spoiler_text": null, + "media_attachments": [], + "poll": [ + { + "id": 34858, + "options": [ + { + "title": "Stay" + }, + { + "title": "Go" + } + ] + } + ], + "detected_source_language": "ja", "provider": "DeepL.com" } ``` From c185e7dec0a1a3a4d5855fe95d7aebb52dcbafcd Mon Sep 17 00:00:00 2001 From: Wesley Moore Date: Mon, 11 Dec 2023 04:47:29 +1000 Subject: [PATCH 26/36] Clarify that apps verify_credentials requires app token + read (#1190) --- content/en/methods/apps.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/en/methods/apps.md b/content/en/methods/apps.md index 1abce816..d1dd5b26 100644 --- a/content/en/methods/apps.md +++ b/content/en/methods/apps.md @@ -84,7 +84,7 @@ GET /api/v1/apps/verify_credentials HTTP/1.1 Confirm that the app's OAuth2 credentials work. **Returns:** [Application]({{< relref "entities/application" >}}), but without `client_id` or `client_secret`\ -**OAuth level:** App token\ +**OAuth level:** App token + `read`\ **Version history:**\ 2.0.0 - added\ 2.7.2 - now returns `vapid_key` @@ -94,7 +94,7 @@ Confirm that the app's OAuth2 credentials work. ##### Headers Authorization -: {{}} Provide this header with `Bearer ` to gain authorized access to this API method. +: {{}} Provide this header with `Bearer ` to gain authorized access to this API method. #### Response ##### 200: OK @@ -125,4 +125,4 @@ If the Authorization header contains an invalid token, is malformed, or is not p {{< caption-link url="https://github.com/mastodon/mastodon/blob/main/app/controllers/api/v1/apps_controller.rb" caption="app/controllers/api/v1/apps_controller.rb" >}} -{{< caption-link url="https://github.com/mastodon/mastodon/blob/main/app/controllers/api/v1/apps/credentials_controller.rb" caption="app/controllers/api/v1/apps/credentials_controller.rb" >}} \ No newline at end of file +{{< caption-link url="https://github.com/mastodon/mastodon/blob/main/app/controllers/api/v1/apps/credentials_controller.rb" caption="app/controllers/api/v1/apps/credentials_controller.rb" >}} From ae825222ea31ea5e22b93fe8ab240c1f8926003c Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Sun, 10 Dec 2023 19:10:08 +0000 Subject: [PATCH 27/36] Branding: switch to purple logo and preferred font. (#1359) Signed-off-by: Andy Piper --- README.md | 4 +- assets/manrope.scss | 8 + assets/style.scss | 168 +++++++++++++----- static/brand.svg | 12 +- static/favicon.ico | Bin 9086 -> 4414 bytes .../webfonts/manrope/manrope-variable.woff2 | Bin 0 -> 50128 bytes 6 files changed, 148 insertions(+), 44 deletions(-) create mode 100644 assets/manrope.scss create mode 100644 static/webfonts/manrope/manrope-variable.woff2 diff --git a/README.md b/README.md index 53666116..64eb826b 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,6 @@ Mastodon -The documentation currently uses Hugo to generate a static site from Markdown. +The documentation currently uses Hugo to generate a static site from Markdown. Use `hugo serve` to test the site locally. -View the documentation at +View the live documentation at [https://docs.joinmastodon.org](https://docs.joinmastodon.org) diff --git a/assets/manrope.scss b/assets/manrope.scss new file mode 100644 index 00000000..b36e069b --- /dev/null +++ b/assets/manrope.scss @@ -0,0 +1,8 @@ +@font-face { + font-family: "Manrope"; + font-style: normal; + font-weight: 100 900; + src: + url("/webfonts/manrope-variable.woff2") format("woff2 supports variations"), + url("/webfonts/manrope-variable.woff2") format("woff2-variations"); +} diff --git a/assets/style.scss b/assets/style.scss index 460744ac..0e269684 100644 --- a/assets/style.scss +++ b/assets/style.scss @@ -1,17 +1,17 @@ @import 'fontawesome.scss'; -@import 'roboto.scss'; @import 'roboto-mono.scss'; +@import 'manrope.scss'; -$white: #fff ; // color5 +$white: #fff; // color5 $lightest: #d9e1e8; // color2 -$lighter: #9baec8; // color3 -$darkest: #1F232B; // color1 -$black: #000 ; // color8 -$darker: lighten($darkest, 34%); +$lighter: #9baec8; // color3 +$darkest: #1F232B; // color1 +$black: #000; // color8 +$darker: lighten($darkest, 34%); -$vibrant: #2b90d9; // color4 -$error: #df405a; // color6 -$success: #79bd9a; // color7 +$vibrant: #6364FF; // color4 +$error: #df405a; // color6 +$success: #79bd9a; // color7 $transition-in: 100ms linear; $transition-out: 250ms linear; @@ -24,19 +24,87 @@ $mobile-width: 600px; License: none (public domain) */ -html, body, div, span, applet, object, iframe, -h1, h2, h3, h4, h5, h6, p, blockquote, pre, -a, abbr, acronym, address, big, cite, code, -del, dfn, em, img, ins, kbd, q, s, samp, -small, strike, strong, sub, sup, tt, var, -b, u, i, center, -dl, dt, dd, ol, ul, li, -fieldset, form, label, legend, -table, caption, tbody, tfoot, thead, tr, th, td, -article, aside, canvas, details, embed, -figure, figcaption, footer, header, hgroup, -menu, nav, output, ruby, section, summary, -time, mark, audio, video { +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td, +article, +aside, +canvas, +details, +embed, +figure, +figcaption, +footer, +header, +hgroup, +menu, +nav, +output, +ruby, +section, +summary, +time, +mark, +audio, +video { margin: 0; padding: 0; border: 0; @@ -45,8 +113,17 @@ time, mark, audio, video { } /* HTML5 display-role reset for older browsers */ -article, aside, details, figcaption, figure, -footer, header, hgroup, menu, nav, section { +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +menu, +nav, +section { display: block; } @@ -55,19 +132,24 @@ body { box-sizing: border-box; text-rendering: optimizelegibility; font-feature-settings: "kern"; + -webkit-text-size-adjust: none; text-size-adjust: none; } -ol, ul { +ol, +ul { list-style: none; } -blockquote, q { +blockquote, +q { quotes: none; } -blockquote:before, blockquote:after, -q:before, q:after { +blockquote:before, +blockquote:after, +q:before, +q:after { content: ''; content: none; } @@ -83,7 +165,7 @@ a { body { box-sizing: border-box; - font-family: 'Roboto', sans-serif; + font-family: 'Manrope', sans-serif; text-rendering: optimizeLegibility; background-color: $darkest; color: $lighter; @@ -138,7 +220,7 @@ body { } } - & > ul > li { + &>ul>li { margin-bottom: 26px; &:last-child { @@ -153,7 +235,7 @@ body { text-transform: uppercase; } - & > ul a { + &>ul a { display: block; color: $white; text-decoration: none; @@ -290,6 +372,7 @@ main { line-height: 28px; font-weight: normal; margin-bottom: 26px; + -webkit-hyphens: auto; hyphens: auto; } @@ -345,13 +428,12 @@ main { width: 78px; margin-left: -78px; text-align: right; - padding-top: 4px; padding-right: 15px; content: '\2022'; } } - ol > li { + ol>li { &::before { padding-top: 0; content: counter(post) ". "; @@ -359,8 +441,8 @@ main { } } - li > ul, - li > ol { + li>ul, + li>ol { margin-top: 14px; } @@ -436,6 +518,7 @@ main { font-family: 'Roboto Mono', monospace; background-color: lighten($darkest, 8%); border-radius: 3px; + -webkit-hyphens: none; hyphens: none; white-space: pre; } @@ -451,7 +534,9 @@ main { line-height: 28px; font-weight: normal; margin-bottom: 26px; + -webkit-hyphens: auto; hyphens: auto; + dt { font-weight: 700; background: lighten($darkest, 8%); @@ -459,6 +544,7 @@ main { max-width: max-content; margin-bottom: 4px; } + dd { margin-left: 16px; margin-bottom: 16px; @@ -494,7 +580,7 @@ main { color: inherit; } - & > ul > li { + &>ul>li { margin-left: 0; &::before { @@ -533,7 +619,7 @@ main { margin-bottom: 20px; } - & > a { + &>a { font-weight: 500; color: $vibrant; background: #fff; @@ -737,7 +823,7 @@ main { width: 180px; font-size: 16px; - & > div:first-child { + &>div:first-child { margin-bottom: 2px; } } @@ -786,7 +872,7 @@ main { justify-content: center; flex-direction: row; - & > div { + &>div { display: flex; align-items: center; justify-content: center; @@ -822,7 +908,7 @@ main { color: $lightest; } - .logo-grid > div { + .logo-grid>div { flex-wrap: wrap; } @@ -840,4 +926,4 @@ main { align-content: center; margin-left: 0.25em; } -} \ No newline at end of file +} diff --git a/static/brand.svg b/static/brand.svg index 8b1328e8..b4e7503e 100644 --- a/static/brand.svg +++ b/static/brand.svg @@ -1 +1,11 @@ - + + + + + + + + + + + diff --git a/static/favicon.ico b/static/favicon.ico index 79000c9cc43c2044b5ab5129202e993aa2cf70af..1a06799c19439ed16cfb72ce8b9ef2da283bcede 100644 GIT binary patch literal 4414 zcmd^CYiwKP88&RtA4p>tZrT`xiLDi7gSHfCbFp)e)7%qZj_q@^9p_TmG!1D(LRe#xy~h^p|r@KR^)9oRUN@pN2efIjIPB(fmhn(WmztA1K z5yy_*n70faZolI~smXG_%=8M$(-%t3a|HFmVRM>fl;kksFJ%AG#nR44@^N6apYejp z^tpV=|l~(mqPG)GFnyck8 zR%QKTKF64eco>N9`~lBRY~Sqc^OW()T_9U=Z}aijlEil+WR!8Knv0EBXY0t&I6YBq z1H)LA?a^z+U9XO z$7G!?%`j0*XQ~L3wOned&W5E%5urvYD}zP>3q@e_MWeXw!~B??@+2weg^4<@KhK@N z=lQy(>g@f|CMSqPWjtBbldQKFkkhj|l3CQ-Qqx74qHz`ldvdzoo|jH~!mEgS+KiwiEXXuaWGV|fQ6@BE44&t~J7-~2sh4>rNqCZ;Jq<7a+G z>psRkWi;;cH#w%lEh6UH1dYbVc37=VxN#XQ%IK$9H-#s9hf(Kn%__S3pNiHsJ{6|E0%xu zOGI8hj>v0oAoSy(V!oye3!QZ4Iz$AhHq}?)kB?r0|I3dfXmx|Q)OeSR$@dt4ph@^z zu$7N3x6}FUlv2Sq9t%|+(1L~jZCxD1ylx*B`CbG&sLn%8SJ~rqf41$chJ!{VeE#kA zGyeHI4`Gq|M_j66a)Wq2VEl`1QpsXFp9mBGl1WN0wewi4xtc$IaR9-a_hCus#Zo8L zS>B9j5l_eF$~YGp?cqT3~*gUl|<2;_U~qO!bA#^n5(jc-8tD z|6<8ugdN=obqK0T_hGq1IK%j(7XHB%${8l!uvyB4yQq%3E+mWkuM7+#bo&8B(5)Z_zGNL9S6XoPgl;T$?f3oQOB}PUO+4Ue+zxx!TW&zPw4yl#s zcKSh(plfhL~OY_J&o$ znuY#HSjEhm(2doDRnVrUxAUhrH?jWxA0m3!Lx}3`!Pdz?Z`;@)qiNXu)ys(9xSQ22HE?-s?BvT@vAYLjCG5U-stYf+IJ*SgZtDB{oj1hK|8#3VQ3b_rW{DGpaJlW#C?b}76h zp}P-phZK+Va@H?SHEgjOo_+?&bLWuq<ZGht%jO)L*}jt!g9UqKkY*#3_H`ofAln zkLP@5W}yA!6ym){5jVDiojG=T5Ab+yQU&=Ut05uC>j}{bm6xD; zdZDy-LfQ8il;(CQ9cCzp^iT}7P~9G=q6}4XL6zO4uYjVjfzoM#Vr+);FvVDGpKcfb|E+K&CU~&llB|H5%`UK!~At^Z% zNl8{oYDsr@l8{Qu&P-C2GNc2IbCBem&gn{LeO%-#$y!pB6Xc^3KhS@a`EDqptD5zl ztv~-h&SbuZ4MF%yQkGvxyIh;-@25CIZy(_40lK>Zmm3+E3u&hlDFTyh&h&7T-Qxjz z$hVJTuEb|(E#&t$B&lR4H=F0L;`d_my({H*JE)GADF6F}LAYE#lB)!jkRoIVX+naq gL0BYA5I!Ni54Za`oX#f+yYn2^`c}%@{vYLk0H7TYO#lD@ literal 9086 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� z7bbB_{*|$?T`f=P@lnJ0_c4b&k_;++ba(dU*{$!lwESLTXycOWbuC@rNEUZ+hS(3* z%*yd94-4|Kcd*J}3)XskGC8@LSHeGOJ_m3vO9?C^q%_?6($?5G@@312^UgnE>bAg> z?@(}Y&0^Q81Ts?7oJx8N4j+moJZ}5m!Zf}yYR+-w%| zqT>7DJANO5IkVWy9oaclg3Lc2;~Z{(0=cezr9M@3u;s8koBvT93APAkixd;NEJ&dc z7vzftw%^Qz2&^l>BrlaJriPxxU|^;+PRe0+Hh<5L1nY0QbZ=!-SAo(LWRhp1L4jCB zg5ogZW9$Q&;qm#tC5Es(eRS+zC*3f6_5+tU;FHnQv1`ik=o^=8PM6>tw}o~It)3HI2c+Dw4z52peX{P(6d{C5PI zVer80w`X5w&i!0>!>%GQ0&BQL8>|D%x_!WCSWs~5-`2*)k*|=QX&K>VI+CPiDKU-Aa3c3A z<$ooiBZ3gcCW`LT(^1Ubq5(uud5YO+Emj7x+0C&1<-(&Vu%jY*O0j);!(p_=75g6i z^GhEfs>NR9G2|j>w!MDpU#;ec1?|)k0Z^nG-?xpx2uUvwF6WWe5tJ z-Ghj~qk0fO$X~CVlZ4ZM<*Z2Hdb|o@Kcjt8%^$Jo-y8HaH~tY`r$iZ`B?P3eV&97` zn>{h|?6Lrlv@}%37xiv_?TWkimmGSOjxu4^Q1SjBebyd|WW0OISWK6Sc{C^49Yn6n zyF!^oFDE7jy_IxMasVex+&lf#Kjf_J=0NN42C_x^f-#1L-rYD?qmsOpWA+CY(q|d;iLW^3cl%9T2q8@A_n~i4JU*CvQgNI>?Ozrj2w73c zJ&dDH!j$^gAlPSfv3W5*W@c)l5E_`(5zih^C!r+j)kk#{*#o{ue~wsz2aC>%_#%3AJ;%7JcbO#{o@coH6yIC8|;cSid%m zvn_5lc9wxIc&GD4;m>i98!lj zRbhszi?p_Et`}2vGc{-0Dqv2@{S$8+aS5%{gY_2#POI{x;{4#lX#~kMmmv437y}}C zR>8PTX`LT)X1nxmpw!~ySoc_hgiG{1_edY8S{PLx=SynojQhm!a;c4xGEK(_)NAu8gaHL|%B!T31M-Up zzVEC1|14Qr^feSygg!W*F-qecuw?y+ur=R-FF8^2`u>_WYWM;S;#fUn%M^{=@ zvg8-yMydNzzm_iHpXnby^0-sbGO<*Bu=e#^ z_K**{eb1w^m<(dawS%CFFmUco!Nw$A{F=V3?}k6&y?OcMJ3dn9{2M zx#Tc)P|7Yv-AImDC}Fo_PT4Cxdty`Jn8xv_g<3}RH4UkeVt|t1`#WTM#GS8vUNYB- zMy9e!wRux;?qn&l68HBcERnrP6$8HVRs~Q*M%T~hTbU~OUIyAqdZq(N-I)Vd^y5;T zhj_divHpqNlsi?2LuMtN;gH!0R2FxjB%08Q1eY-06cH9lnizm1_H$*X0~mHOASsCz zI}_2I0GJsavQzD_`da&??gfjBUOJr-U{3M>mvDtc0Gw-=?M~9&&QLIy8u;^hQXs4h(qj(bE{0}0;VGw&5OxSpD zA`x56BoXpaevP6w^w9ISf6axRHE%oi;R|hF4=dF5SFYSgHj0hwil?0yN9>JM*UNbP zXK#%auc3=-n}%D>DqpUyt{%vQFBv6^gX~ij(_pV+k(Zo*Lna@OO;stZQ6ag~6N<1B z{qhqZ3IqwE3%){24Wu4?V&1scgn9cRwT=JqpImZ?bLY3Qfcn`e+O=$Dtsa%vcVQF{ zd}<}(;ou;h(QgBDx&om)Ov{t8(t+_^4PjndDwHV@ zB;yS&Ny!Bhczs28wu8kT^yaCLZfAodRE%7)|5FryTZhgi^bK)fg=@GpqZ>qz zw>6^{w&Ck<>0@AkCquZMkMKC73aYZY66hFId0sE<2-4YVfB;k$g2fD9T<9%dzn%hp zcI*$faq%2#L`g$~XJ=TAwck$9CZZnt5su?Y( zTYVz+J*sGe_8Gt!I=NF?*w?f1g>^j_7@{uoG~2lUo_#_WrDJL#P_`X?6vQEu zy?|IgE7_Lc9>Q7=S%*DkxkO84+rhHpD#u>gyKaLtB*3=*$>%7O(bEQ?cOI=e9wp6A zfiNo}Sa-QOzbg`pB2I?(;2(~}vB#v=R2vFx5(H>GkjC zipf3aS&9LXyy|_M=qc2`9SoGbi6bXuuz68a)b1)_b{%h|xCxH4OU7$lq^15QHt z=@?U{?pQ2}ca-UzHpk-t)A(a~V9Ch*BGeGb(iJi#WsW=*o2(+0iYlov!z4mnE!tRM z(A#=ok;pPTWu%Ggd)1we<<<32QiYG4EhRSh^-fA0G8r&3@@hOyDWFtTe=-s_I7(4oL&QySoE^&lrKJ5Vl&+d$U+fbbjk$_-)8mSqJR z*0{?4`uG&AgDfi3#zScEuzLUDrq6ICxgPX8OY>H`)t(2=cO);ons3{Z`ZfFN~AED#mQ+0k}=zvxb(94-hvLb4d^?@6Y^EPh`P7mIT& z+tVWx3Cs5DGzMbv0eF%`LhH3qCG{Kasm@A_#Sxw75w7^@3bd!K#yc4zoYmC3;4Gp!F|%CQmRV zG%jG)O2KQ!x-Hxwa3|IdS56*Jjj%n=JZnRfpHaXT5V?s1Qf<>|5k_;#y=~I!38#6+ zg_e7p#h?1~f96efaF*RLGTEy=Kn`R6|scyP+hip;7MWcHNi zFv-2oU=^O3m@h@0zeIEG9k=KT)pXha7o77AWcvL!z!u%?9Z6EU976#oBUo-51VpR| zhzW;7fOf)5DD1A%mn1W~M-MDMIK6k8O@M+!Yh3I_#EOPWg7!?&1X}`ueu+MQCqbgq zZ9`@u+E>;#j+;mhiZZ+vA*PIRcNzAs#_J4@y3_d6ocioh-8;F$Ir9!{mvUz;i{b9`2 zoy-|+kz-jfV}Az0hBfIJkMsV{K!5^8O_XV*M}U&)k*n^u$#W?T8aT}U@FMW;HW6Q- zZf8@0(-bTfsDfeAxFe>$198(_QJelyGKOx0C-YZQF zEAnv4n)1yh8=8Y09?$hN+R|Zl@NQQ1_P%m+1zO5J-CuB1t1W>!^zo|;ZP`?e>1iIV zBcG9}7Pq}N31q9!v!{X@6Qdb*GK#WCMEa^pZ6fU1VraDGIG4Y1KxEJ>Kuli;z@nL#(y@g7Sj}{kIkYVazBUYaRVJyg6tD7w{ z%;C`HAG!w~x>`o6*akX;fF3*!3W8~(?riQ_l~-Cuh#Rlu%UM3!Gf-$C!%xEtf`7}U z^eEdK2*N{}7nVaAo{RTgv|? z4EG(5A#Ae1#~xFp1pXIs}DPwlql=FfJ)eR?+Hb0W5)f} z^n^#$;{jDM3LPD;$smJaoct6FG+_l};sxEExvD?8wPrR^I zw=lvGpV9n>CvNE%3FiA;6gn7h6y5PM zG%CqMk=zu6*S?hQuNDrZ`df&P;aB_FD_^^N1*OTK9GY}NXQj%#*&+C!q?{`h(k8c7 zErdClgKdZE%cGr_t9lDEeZOX}sEknWsy~^MV%x@w`0s_22|Mb-*hL{9)lZ(UitPGQsw{DM33(ov z)?3ujl>_;2P)Z-8YNS;om1PN^0>=;eQ_@y1ied<(b=VV!))Ry_5eWnVX9f{*f{JU? zDM-w!x&~*9sl(us;tu(n`*6hyPaaEHV3TkFHhj<-B=4PZ6DkQ%iOZdvRI^0h!1Y<9 z(u+e!u{KSuyEaop5H*@R>zD5r;%NfEDmI&k-Sz>2vBUKjcKww!LvX)-u@ez^i68to zk%tV8H6RQt12<~{XV~V#HJ~;Qy6Lcoq|xC?WiN<_Mx4T6r&PbaP*QDT6hs;)Z5@6S zf2Ek7&o**c?!%tNPFsA>zT4kc$&?cE17yF-xNnsJ9v4Fff!5 z-c)-h=_v1%4ZIm^`6Pm!SY?$n9WEBrB^Bo$iSYFx{8O}Gw>IdihpjND=^iNcx(ksF zU}JqwWF`gtYRRF1X9NcGs6<(f=d(Y;!FfcGZlgT{eD7n~PT2V|+k@R8TS|3_gfKrz z5<_9EYv8oCfRcI%LwZCe{}tD61UP1~Uh9=hX0d%7a{L(RZ@JW9_b=I!^| zwESfO$Dvwjx;M+v6hZ~%PLVA&`Yd)vqH5EFal$%{*+osU-OjQdaO+J=GtUe2oCHx( z5o94LgfpVsW4K3mA#)YHf@1u{jg$~B?h;P$Rb@_Qr%&$Gj>YK7IUF1KC~;wfjJx5l zGuF^POm~pS=aB4v3GoHC`9l+A?#*6>2opTs3PGIqdRtw8)T_IFbMNe^-5CWLG{TNT zeEQ7#UgD`(V8CytmeC8e0Ux!PG+x8bwJ48#$I#ihNgxEZsNwB`&_n zdZA!5pP=8i4ZMJb#EG!BLi_M)yG|q)1zO??oikY4KqhKl6}4xUOB7&jv?% zmQPUwlnnueo`CUg@=mo8N^1jk5e@|Wi*_bWG zuox`lkZqDas>~$^aL11z=FkDswQP9)KuwI_p2%XkMtcg2)oN-exDst~P>eB_pHdc; zXbX`+=$uwykcg!nxEb6G&RfrO$fCC2VZ?CR&@Z_(&GAi!c|I4H$t7mBI@KHaW`wGk zAeeP$CIzzLm~{;74g)9cv-2beME}0fnUgIW*~3SI9+OH+}+FveJ?(f6ts*z@0_Ai0nBR2?IKzKj!b?xlBX|RRj z(X}2k#u@eQ8Sg-g2BeFXpPLFp@pq!cl?Sq#M07wYisFF^Bt4WLSqB{Rqln3g8?4}O zSV{w5LQq|J;O2>beM$*SMY2Jq?|OO@7;+t(&V9EAL$uj~oajuph6buFM{r0s&6xoW z1Nj+(RWsE@T_k|vEbaM!o?pIrb?oJMM4s@qApLkZURL~NS3aPM_3J9z7OefNxz5CV zo`0xk>)J9qoo+~Vrte(lhnSvrnYLCnF5Xx<*lQ3cM5r@m^nFF#rUk-fZCOyA{22CZ zSrBZ|Qg?o7o1Pc^xeUHtUk}}N;c(XT@%Z&v4jJ38V1oK6p0t4$NGcz$?rJst+!uRx zg9|m=bx#SnoA2pKHM3-4tT>-kE(+EQR<@9OC*Z_S6W7>6&IKHB)Cxr#yn=dPR<;g7 zLO=VKeA92lyi#U)=Ab}_^WW1S6#mRzvzh}6zb*Z-qkHfWs8_^#%cx-WuptO$sE;FN zo^XGB+0Q`fT4hy;Em0Hqe2n9tj>NY!mc)x$ZgoQMFU>tn zksJRVZ-o(yN!%Tr+2g+U;p%}3gNptsz{)t7Cx`a4Oz_9)9f3wd zVf1?MTo)iF!66%z>kW)=;coKP5PJ1X!a0g_WR-NMQvG^9wd#W{rZc_W0BWLZRV@EoK%bd z4JC6pmaYPhmq(ZiF`h?v7S8nYP49PYbKCpBnV52-TSOSkK@-x`Hv@91AvIO@u~}7)qF_JfQiVg<9_Dra7%5u#b3P;k;Dee59Hni%0Qx_V zOIdvHSpOc8UIABfcY#yDITfzYwH5s12w4_B3eUy?@q@59(Q{Q|f~~$*f}LZePP;(( zZ!ZQ}t;uqEe(NugfE63*9yu)qNTO1TTLfSU*m+%q%YpfW(tMfn%6k0kqI_OwoKptD z>Wu^GUBiu>*MgVIR#?|S^IGE9aFA6q$tDasS~mBbOOh?D0c97?om}@ivVv|D;>r#x z*GzAH@OLUlUH=)S6Y;%TTW=tK-mR$Ot!JIN-IsRj;D~mNU}6|1V+GgmhU~H>yyxrF z76=)X5P4Fs7%z8_fC`7SiT~o4`r4g8brZy|EWs!4>UYP=oqhx3hJvynU2%}_2MJ@r z(kGXPT)=b7zN0uJ3gOkRMu8vqQXF1|1L(MQnfok?fFIW%&|nB(2nOS5+UKW~GJ;|x zx^o*9B(x+#fxM}yFQ4j$dm40!Zc|MMpf0QgdgZDyh`p)>ASNH-eO5f@TmpNFVT800 zWWt8LHs3E(GuFLaxookEx|nIrWpQ`3>ErTP`$7>RML#&m&b#Nh>!78_iW}Xc zhm|^%S>gP@SIwJK#}6YQG6OFd?FVHn!-us)SNaU4QHH^ayOLsIp*UM~ZH|w(1KwRT zUlh&eX##M1v$AvppHGX3RoNn_+ZRQpOBp#j#|2bO1`mos4=Sl87uFsxC8|!avS=zc ztqI6vO3Tk2%&&*VjC9q0dtbkFaf}FKsXa$qlO`}|XcF%3tF9@GnMbD&47n0qgZY>k zkk4>wOIL3t@TezuW>y=Kb;AbQ*$-2Jcy@`|vDW%nMkW(h2`R}vgxKg5YT$GA|FxTR zpZMvyq}3`PMVaxv!2z7HNBEDN7lyvi#>r<=K-dNyazO$1V(+oSjJnRSKih@~Yc3^# zmiVVLZu7~sz}1*24vwrQO&1&tfvE(n3dXw`h~7hqU9f%T*=O8ZaTBH-Ceem#Mq<6h z(e=)M+|20n3wp7z$>tS=5kjZt_)UzjA!eeVer>ru6c@SeofkD5|6xGD-JH+EvO(gm z)?ksoI5=>YySFfp4xW|-iY|)W?T!T>%Pg_?IM-4hu+XCw!Vs=k;_|Gv&@U9J0nKqS zzPGj6+UKUt4E95mjpfljSLg#C9?O+=xbd-&5cPW@ZN!ov+&KF$OT-Ds)=w1hMptP3S%VI_$WhV6K z`^>U$EjZAD#6-T<nSi{;VL@w zuxsR{KG)8X;c!AAvKk`*r=i^d!q>)Kx6}mc57b{MLWt+pO`fkD z9gem7p7wf64k0(w3Kxfq#`^TQm(mRTtc;>W>${5##fDM{;t)H<5Hs`|^bl{xV3q={ zH{tV+JIwrn7ALRPUA!%qGv1>IQHMKuE0LoZpCOojBnnQ#*$cDJT+rFpMo;HAI43v% z3EBZ=rpIs`f`W58`Cl5UIN)_6-!Q&m{gpIb9gQbqR;@uTm&--COiIuZET@gUxK$2A zYWVa{Wpr&qOb52n;j3+?tX3ivU~cIm=9K25{!<`7MuCw-?QqA*^)Wfd_*&E4R>8Kr+V0!4}^`$=;4iMs>8Gz8 z7$K4FYx5a}{k~Ja)fT>h;|4oU{}ax`fFW$fJBtaji}vqwCXhZ5Z_*@3wCPRlu#zjr zB0u=o2`BOJUrB=|AOXt#x2s^UqGD2HKoe0cnvQ;)1qJAb^WI=|oX!OU{(Wjg<=^{x zX+$7>06CI}-z<;{p?sW!R)-N2BM*GXX|K>?k4&(U2wH*!?m1e;35%r?f#tlG$gNAU z1j51T5%C9lBmkz;x=38qv+Bfn1X=Vz>6XqeTO8_^QE_n^kIe}($QbXz?V@ID4H#9B zV}x-EyeeFcf)xpNVW}g{V;;BMi1TB8ZNU%_yOLks>!|dvVwkBSX5(I%KHGsLFB@d9 zS4Jjv{P+U&>(=3fcWzQTk0FV?1J=6Gp)X!YkH@i!PV@0-77)PgQ%AS&k8&L2Iyqxb zt}FCx=cbb!cR8b!oPx1Mm?TLg#J+}Nb+Mx9+}*)>A~bwBEPB6E=n+}+a8TI|EfxGq zi&rI{Y^fmvL4x?ST8svTP2=?~&H2r~w7FA?mH56ufCycx?>OJZbcoI9EZBDn*#*k6A0awFmbUpo>Y^YbR6{E; zssZZSEu*_5*=%3WAsJ~Ir=Epy;`_H8AmNF>6E+}eCPf}3tdXN#XfENpkUfW&mb~z` zfggXYEJOB00ftNS4GH{&sT=3MH3)e>usnZAS;+p} zmw5Z2fFM>tTQgQ(!o0e&7dMclsi%f%RQ>g;o^Kt&uHu{57H& zUBzral&0o;dVK+}fy99xKeg|}XPjmDp`vt0V`1Yj6mOo|5|hn`E~+|lr}|hH8+Htw z6Ff4RUBpj@Hr+f^IWg#3q5SD<@k4Wzu=d5#(7@{~lS_&W0 z;iWMMa_9+mJ-#CW!%O%e(o6y<6V>p3;`?h7rZtt2N8gXd16F^NGb$qnJn~Ghk;$ zJcanA2{iybI&-?3#!sd2`Xyp;m!-~jsKgvbB_FnD`7*a$R%{MtwAw}4EWh=#pMRa1 zZPeW?d=>==ft9LF{GvpgVj{eCM0Y@@}0(a`AjOoXBpfAM%c_O9NJ zaCtFnbgTqMdq^?vZ=EmLffhSDcbOUew~#~6SFD_@n+45#cVa%ano&zxsbm~ZXPn{V zQrsX$Q2G#vApY&wp)O9dM#jgBLlaA@^=j!qg&;Sqqp9qKmd`hJK%XvLUA>{ZyY~uB z>krG1y2t)$>ObVaKc*(k(eT0^TIPaPP=gdJ%3&s{O4bWWr4PgtX`?$@CGAkdf1|z_ z;xEl=8twYOY070*cqoWFo*zdJXwbQuE{Y8J{V5z#5YwZC;16~(#W)*cUz<93 zSG-N}qa!Xx2@AubwVtjnf%vppDpj&JaC$A6(LYbM^fb;knTSk_4bg(u2ad}YrTJ5|4hmHp-CLsV=w!PiHjB+RmuiqP@f2jv3Gl=k z=c+i&xrahFql3L9K0%GmNOjsGp~|E^L0qCZ5U!IfrG7k>(Y>h^taX0pJ`pQ?l`7~{ zU{|}_J-t-|jhYls;8ZL&SS(yQ@HyFZR`y6zM$K6*CuxkCs3+{o6Y5pkZpa!cJMC8Y z7mOWLTJf<~?<@GSfXCQdC1rORr$|YMb908N2b?OuNZy3cMCkDGn9J#qhT1gycul;G@`!XP9tNJZcIQ75T+t^w}Rq` zvDimzFlMk*q{HILu6@I({-LlNtlqn#5l*3H)i|;W5zcmzge!AOc>8w z20svh-CSP##lD-`6kP#){)$)A+|6D*1?wuV7CwZD10>fupb{vhmZvcK_C=0kAXbQ{ z6^d1etLXjn%%A`CYk2~^3PbsIf0u_=T^0~+(B&K(o7MIRXKBN{J1 z!SC-L)%dZ>)D8)w*xb(<(OMUegUCu~z5JaQ?|UY?C|niXtC_0PMt3~ErqbZ5#0vsB zs5>A}rH2+0&GAHFg+SZbCFP0z2@jSOkkKonw8${0SflVzu85k?2 z;!CJpYcd2Nh;hH(Ho`M+GX#Zo>XD2{McNib-t0B!o;JqnbJQ`hPpn(VLF*h0<`Uh) zhcIPu+L9Ckc^B6~Sx-SbvlbFLl)RbCA_r+MSC6RBZ@&p={rx-Qpy8<_NY3Qnbves{ zz<5+|S6ZTH>i&rYm9Bm;wb0EO@u~B-X2iu4?$(5{juZpTq2HA08N-O3LNGW}9|cUq z((n#(X^8&&DI@#@r>=CCe8n7Bu-NB~#mo}i)nu%1d|xtGb;2kbDiOl1wN|IIqS@D- z4tIFp9rz3$p^3G|)LfhoK6jZpPTTf1?$F2VM|P4mf46VOy>3xx55y^kNHZXP{ef+3 zFfc5Zk4G1_3dzhs7jG7?sz77Fg|Q%pB}yif{;!zmeBMgh5Rgo7ST+N;g-C};@XDd3(zQ0vj- zJm*DGAzx*)saBrk;=|Q^B>FCkWaT^edMv`@c(JK6{ru zDweb6%`L%-82!t@(zPbH zZObb7ihLImC|RgNf4VPjB{1IZasMW=qCfpZg(Fn-I58C0FbO)Y!Id@QMsBQlCzh3o z4oflO&uQ6N?FKhoqN)>mtY99d1V6=}A^(S)4Xv4!U9hfz{)Jngq+PiaVNVaISoJc4 zm77tj-by$(&9;;nWI+=v?lV*JuG-V9{Hy&<<#$Xjr?-YMp2X~o;5C= zVIR3Fiq125IW}R$=4nrg_yrolA9|d>*6sUi9u|#dIp5ojYC|7GCEDYBX*})DOr6m& zg44YEOI>R#)fQ^q9eUD}4&nlW0FWLY_Xa@3||!wzS*UWH)&MNCOK>s(c`|UI|H^I?nd% zmbgu6fjIslCa>!BOP`K!c`PG#d%M67dN!JG1^N|1%h(N7=VytKsVs~GF%C&uc4u19 zp2d4ViV^me{>2_ua4#_6c7lwn5Kf`bYCn5l9O>=kWT~x;q061;b18MLvr<{b~@-G!w4j0x3@Te z6d0^_8>@uF43jJ@ITrdX%DlBEOG)&QMX zm9?kp<`1<~62{uB%xBnY%W&w*$@a$a z<1vRzv_#@&F-nW_pxE>ZYR?-za#rlty73j%6nsicez)pEW)%)F3*ppUbXn(LtuGq``e$kd)0mK;_bLJnq#O-1H? zGf@_H^CEsL8cNyBMdRxq4X*OzPB z{(N*3Jo&0bjc?Lnhe9hVRq=ynl_Oc=aBQe|Zy2`DoMUe`UvoR#T41>kuQaT z7RA}@pgHYJ83|u{{AKs}a>g2-T;ur*r~Lq#adCk+E0@c+BS;>Vu=GsR6aTf@l>pmbI4(sJap$2e58D z7$hAv)}Jd6zl=4gAtaSZBF0TuvYy8o{`jE!{H0r4TTba z7BnX};~$191g1VC<|c%+P$3+(dc3a+0?IoC9Z{IMkZB|BM>ScaO_HoF-w%JW77CiZ}nsCH*()n=$GFu7?5)QNgW|X)>m{8#;O$TS&5_axfiCGPjKVt^+ zI}bRBi^;Lr6?B#-UBgRS_C`yE|23RGH1j`XXOdBbl^*6DwS%S z``)z1zrVGh0A23Dl2t`$XlB7O1urje^}Dkz(mK;6vPnZIBR~WrB|Jt)YVX)cB2?@E znviFiU+{_{Mhu9Ywq29}Obe6%G7Na3RJ1h0vA!t?RaEkL6P~}Y{}!av00;nx^rfHI zS9+&UkzTe^yh8v0d!C(J0|40f-RHG#vAIBS+?o#nHb4LXAOOB8VJ+VF4QQSW6|fdy zLwQ$WxHkjXTIeo6?hZgT*zCZ+Y|#R&TOnoX^`#I{olU5;xm=oK25j}<58aiJvg|4( zgCs1AZJ=Fci2#8Gz@e0{JCnewk3HG+0L~IKf&HQCCD4CnKAE%v>)hjM8KgJvYOpz1 z`-wHcnuVSW*eUbB+dYu}CCY4IZ674h3aJKm`%7#qa5Ya4?7!l|28kd8@H^jvrsGZu zvRliviG?7rCQt_mf=x?@#b7Xuz@NL5g_KI}D1aCMeA;JQs@StGUGK?Av>Tj1tNjT~ zp|lHl-V^^GwFdwD)(&|ZAC!T+2mI4{c^OwDPd6}#1UB_b)S-4Oup9!KGo6mXX>&pW ze;O@?YI*0cF!un>2f_L231;X|$Yu7nqJAXhzzmRQ2#r6gKiL*pDIk*Ta!JP(SnLu} zE*%+-qo%tTp?b7HHgc?}a<3VuRNscWpn7YOnhb612LY{Z>8V`2U|nT9z?}_il(?A% z5{Eb%B61TxEMY9h2S!})001@_AMNr!*^h|MeR%XxJl%@^ruqnMLM@G{4cm2^15&%k z40iyPzqzwwV|=4cyIT>e+Y!tbL^-A>FKc_?DY+xk47n~Xf~FNdV7+|_E-DrP_MFWI zwq;^jG{b$|l+qgN57b{ic@l?saexK7g&11v3bGOaiiRqni8YSx0_zc9gms&H2K5ug zC18dkoC~xd9u&1;)1J|tI)Dm|vql{er$!m^^^rlOF~U)BDH#BL{ZgGrbRH>NHY>D+ zm3nOfBn^#_Pu@hWQo8Zm<)k^YcK8#L(xaxo7g`er-4gpw0*(PO2-h+IAy~&FAa>D? zz*9m2#X#xMB1Lk~mUpH?yLE4g$l=Xt$f5eECRK06GGN(d3tvT3ubrYpXzB_y_5B9h zLmxnKI2TCT5bXkBAuX8G;Jgn+{6Yn=RPUkP2)90#k&YOz`=UYCNPeRXJ{ zpwGVQgR`-Al<2`t>~Ia%D5f0bpODfWkV-Qo&QSm$0N4KR7B!{%Ld_@$r|We|HGYUieKlm@b5bgWOWlB!(QW_&z)vMy4FW2c z)?kR_su~K2)TSB&p?m|&d1l>S!vzL!t>FQM->KmPi}%zB03lE#1iCO)nQL|+^ z*KYU3?UA??ydvLMVa!8NzcAlXA^Q}~M)o$|-Yu0XYUtNk{~lx`;MKRFSuRxuM7Q?$ zD{GuV)msfo|9f1D0u=L49{%T(vY=OcY|h2O>_6l|S&iVv#SCXO8(Z%*Nh`=M&fXjg z;$VuE&Z=bkS(SZRy;)rp#9A~q#FMr4dUb!jMQ8YXSIRV`hCc{`*erq@OpdGHb>CB-z1q!dffQ!)9N4KE4EU--qJXb^uo%NEWj<@}*E zsHy{|PzX}RPyBj)r+Q2;Nz?C&;U7gQppG`m6sk2blXiS;nf$;VN(v|aQ3llvd(Q`X zhZ_YU!iU6|!Acsh)eje%x!7!X*FVO0_>NCv_}=I&)o8jqE9$A5*NBuSkphrrWC(eh zeSKmF8S8hOEmAkdtfmnAcw99(sTtX87VuJRZcz?kO_lEV{Cf$3QEas7vrt4Kf;fna zc<@P9BtSwWLSmSg5&XaFkqpVrx5r)V9LD79%4`Zner?2PP7AW~X``o^cDm_(-h?r} zXwr-`jpYivayMccH|}|O@XXtnebv{En%y_%@ZrlZAOHLU3J4S=xU&T-h7=;SZefKw z)VEfO5Ge|(g`)f3da>ffOOOZ+1KU8ynk%e73O7y?9DI?I+w7Wa5Tz6)Rho1eq58qi z-RnB!?zg?e}adB5~yjp4= z3@;x)RzR?QHFP|Bztmo)gE*Zr9PV{le~Hvt7V^$n#H`WDl&J_cSs=pZTbYp551;Qf zACzfYEMIfF!qtq}y;t4a2tGZ{a{eyFBkgPdPc}8+_(XI-oS^eC3JIe`(4u0xG2&P~ z5_)m^@cIdoL_B|-9Cs2za169zbVh;u)mwdsyQrFOn3nChp7aY8N?N7XXmxr6;6K4c zjD=vO&Vwy-Z%LQiyAHd4gZt@O1<_6mquS_0(;(SRJ)3*CfDO2! zZ>wL6ZT;JmJE#YCvJSf57iDqx=yNY;Bg{+!KIXHCaTkh%oqq`FN}a>0k@V=;?##GE zb`RWyC3KG3@3=z_JK&%rj!o>%?aS{kkn%|=*$Hwakd#!9Dw2KefG~`;Py{%v@M5>6 zO79r&{|)MJrb@Q&2OkI=6w;Zm_dlduo;anITu?qHxZup(&@G%)YjLqoTLRZw`aHfU3et+oV%#wfVPXOK?x*yzRAJIx&ygQnRHMm;H3u+>k~`c|bSX_1ma zJ93^4x_+gWWcJe&TO4iZXZw$dUf0Sjn-&sQ7+5kV2%e0XI7JEj~4%CoCB_V%IaeVRp^D!gP|1%v%fCwJdE*wm5(t z*S&j{4yu)L*TCN%jo47xS#Q`eU{!K5QP>5rsPLnj;lJ$hDJ4{PHV#f^0v|KuIM{Vd z8E0a(IjE_l3T(6H}Vw2|5qYlW9*76320Wky4{5cHQH4yAt7ZBFy_=NTG zh(I7!Vu;DJ`HtM=_Oi}aO5CGsrOH+v4QTEdpk`M6Bo-D90U^VTe&WC&M)!>&rI(yE&b~*#jRf5>enrS!U3bZd~s-{`XRzJH)vTS82yLz2iNbLmZ6IwAU zZWpLPCP6z^smgX0SN!Uv3d0D0r)MjwTLp#jxD4B=3N0^90%(HE7*bBkW+@qicpR5| z{?ttSBRVsy3hk!J^ywrJUqx(r;AUrN;>g)u(Wbh}yy zbMX!&AkfK#9!-Z4J$uq)T-xh4#-%3_?bywWD+Y=oAOs^Qh7%@xzDp}mrw_$`;W&=t zICil{PvF1CdkcNYXhH?G3*yjwYi!mLp9Td)*EY5(lH?DlGRC9%zoeQG(+Ho z_~1RiGCj8^GOn|__p)(BuAI;8m;d!S#x47c`uDTmCNk-sD`N1TA7`tIEGj5z#t-PC zj`q&h%m?#2L48^r!80EnvGaX8)+fhVN9S3wK}9H#WpZB?yPB5_)O+2~6bB+#siecj z?1$OujawM{E4mQ;R9AiRW7X~D-BJ!IHxo+ZhPq5~M)XUg6UXKvYFc@}3pT>p(Y72; Zpu2sfy%HgW0>L=3lJDO)BN;bgxBv$qY`*{i literal 0 HcmV?d00001 From 4f4b1e69355dfe0054412ef470a60fe77beb38b2 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 10 Dec 2023 14:41:43 -0600 Subject: [PATCH 28/36] Add troubleshooting instructions for debugging (#1358) * debugging * add streaming instructions * add streaming log_level to config page --- content/en/admin/config.md | 6 +++++- content/en/admin/troubleshooting.md | 11 +++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/content/en/admin/config.md b/content/en/admin/config.md index d036a8eb..9fde8c04 100644 --- a/content/en/admin/config.md +++ b/content/en/admin/config.md @@ -198,7 +198,11 @@ If set to true, Mastodon will answer requests for files in its `public` director #### `RAILS_LOG_LEVEL` -Determines the amount of logs generated by Mastodon. Defaults to `info`, which generates a log entry about every request served by Mastodon and every background job processed by Mastodon. This can be useful but can get quite noisy and strain the I/O of your machine if there is a lot of traffic/activity. In that case, `warn` is recommended, which will only output information about things that are going wrong, and otherwise stay quiet. Possible values are `debug`, `info`, `warn`, `error`, `fatal` and `unknown`. +Determines the amount of logs generated by Mastodon for the web and Sidekiq processes. Defaults to `info`, which generates a log entry about every request served by Mastodon and every background job processed by Mastodon. This can be useful but can get quite noisy and strain the I/O of your machine if there is a lot of traffic/activity. In that case, `warn` is recommended, which will only output information about things that are going wrong, and otherwise stay quiet. Possible values are `debug`, `info`, `warn`, `error`, `fatal` and `unknown`. + +#### `LOG_LEVEL` + +Determines the amount of logs generated by Mastodon for the streaming processes. Defaults to `info`. Possible values are `silly` and `info`. #### `TRUSTED_PROXY_IP` diff --git a/content/en/admin/troubleshooting.md b/content/en/admin/troubleshooting.md index a56c6061..6ff6cb31 100644 --- a/content/en/admin/troubleshooting.md +++ b/content/en/admin/troubleshooting.md @@ -15,6 +15,17 @@ Specific details of server-side errors are _never_ displayed to the public, as t Each response from Mastodon’s web server carries a header with a unique request ID, which is also reflected in the logs. By inspecting the headers of the error page, you can easily find the corresponding stack trace in the log. +## **I'm not seeing much in my logs. How do I enable additional logging/debugging information?** + +By default your logs will show `info` level logging. To see more debugging messages, you can your `.env.production` file to increase the level, for the relevant service: + +- **Web/Sidekiq:** Set the value of `RAILS_LOG_LEVEL` to `debug` and then restart the service that you're attempting to troubleshoot. +- **Streaming:** Set the value of `LOG_LEVEL` to `silly` and then restart the service that you're attempting to troubleshoot. + +More information on other logging levels for these option can be found on the [Configuring your environment](https://docs.joinmastodon.org/admin/config) page. + +The `debug` or `silly` levels can be very verbose and you should take care to change the log level back to a lower level, once you have completed your troubleshooting. + ## **After an upgrade to a newer version, some pages look weird, like they have unstyled elements. Why?** Check that you have run `RAILS_ENV=production bin/rails assets:precompile` after the upgrade, and restarted Mastodon’s web process, because it looks like it’s serving outdated stylesheets and scripts. It’s also possible that the precompilation fails due to a lack of RAM, as webpack is unfortunately extremely memory-hungry. If that is the case, make sure you have some swap space assigned. Alternatively, it’s possible to precompile the assets on a different machine, then copy over the `public/packs` directory. From e21f2fda03dc9127bb02c3e161e11d96734d97d1 Mon Sep 17 00:00:00 2001 From: Brook Miles Date: Mon, 11 Dec 2023 20:48:04 +0900 Subject: [PATCH 29/36] remove fail2ban duplicate sshd jail specification and enable aggressive mode which includes ddos and extra filters (#1364) --- content/en/admin/prerequisites.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/content/en/admin/prerequisites.md b/content/en/admin/prerequisites.md index 0c6b6829..691d53b0 100644 --- a/content/en/admin/prerequisites.md +++ b/content/en/admin/prerequisites.md @@ -42,11 +42,7 @@ sendername = Fail2Ban [sshd] enabled = true port = 22 - -[sshd-ddos] -enabled = true -filter = sshd -port = 22 +mode = aggressive ``` Finally, restart fail2ban: From 3e8b1c23c3b40195806f1be6c15cc47c9137f272 Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Mon, 11 Dec 2023 14:55:28 +0000 Subject: [PATCH 30/36] Revert "Fix wrong HTML lang attribute on non-English pages (#1247)" (#1361) This reverts commit a54d19e88e00837cea5a8e82303b80e9a48cce9b. --- config.toml | 3 +-- i18n/{en-US.toml => en.toml} | 0 i18n/{zh-CN.toml => zh-cn.toml} | 0 3 files changed, 1 insertion(+), 2 deletions(-) rename i18n/{en-US.toml => en.toml} (100%) rename i18n/{zh-CN.toml => zh-cn.toml} (100%) diff --git a/config.toml b/config.toml index 6d78b544..63150176 100644 --- a/config.toml +++ b/config.toml @@ -1,4 +1,5 @@ baseURL = "https://docs.joinmastodon.org/" +languageCode = "en-us" defaultContentLanguage = "en" title = "Mastodon documentation" pygmentsCodeFences = true @@ -190,7 +191,6 @@ disablePathToLower = true [languages.en] contentDir = "content/en" languageName = "English" - languageCode = "en-US" weight = -99 [languages.pl] @@ -201,7 +201,6 @@ disablePathToLower = true [languages.zh-cn] contentDir = "content/zh-cn" languageName = "简体中文" - languageCode = "zh-CN" weight = 1 [languages.ja] diff --git a/i18n/en-US.toml b/i18n/en.toml similarity index 100% rename from i18n/en-US.toml rename to i18n/en.toml diff --git a/i18n/zh-CN.toml b/i18n/zh-cn.toml similarity index 100% rename from i18n/zh-CN.toml rename to i18n/zh-cn.toml From 6958e585a09b976f26a0f2394b674a16cab98e10 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Mon, 11 Dec 2023 11:15:23 -0600 Subject: [PATCH 31/36] Add load balancing health check endpoints to scaling page (#1363) * load balancing --- content/en/admin/scaling.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/content/en/admin/scaling.md b/content/en/admin/scaling.md index 13071415..434fa1f6 100644 --- a/content/en/admin/scaling.md +++ b/content/en/admin/scaling.md @@ -407,3 +407,20 @@ Make sure the URLs point to wherever your PostgreSQL servers are. You can add mu {{< hint style="warning" >}} Make sure the sidekiq processes run with the stock `config/database.yml` to avoid failing jobs and data loss! {{< /hint >}} + +## Using a web load balancer + +Cloud providers like DigitalOcean, AWS, Hetzner, etc., offer virtual load balancing solutions that distribute network traffic across multiple servers, but provide a single public IP address. + +Scaling your deployment to provision multiple web/Puma servers behind one of these virtual load balancers can help provide more consistent performance by reducing the risk that a single server may become overwhelmed by user traffic, and decrease downtime when performing maintenance or upgrades. You should consult your provider documentation on how to setup and configure a load balancer, but consider that you need to configure your load balancer to monitor the health of the backend web/Puma nodes, otherwise you may send traffic to a service that is not responsive. + +The following endpoints are available to monitor for this purpose: + +- **Web/Puma:** `/health` +- **Streaming API:** `/api/v1/streaming/health` + +These endpoints should both return an HTTP status code of 200, and the text `OK` as a result. + +{{< hint style="info" >}} +You can also use these endpoints for health checks with a third-party monitoring/alerting utility. +{{< /hint >}} \ No newline at end of file From 382db977ae3cc9cbed3c95bacb56438c81d2003d Mon Sep 17 00:00:00 2001 From: KTachibanaM Date: Tue, 12 Dec 2023 01:18:08 +0800 Subject: [PATCH 32/36] Install guide fixes (#1252) * fix instructions for editing nginx configuration so that a snakeoil cert is used * add snakeoil ssl certs for proxying object storage with nginx --- content/en/admin/install.md | 12 +++++++++++- content/en/admin/optional/object-storage-proxy.md | 3 +++ content/zh-cn/admin/install.md | 12 +++++++++++- 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/content/en/admin/install.md b/content/en/admin/install.md index 6d300cd9..756c96cf 100644 --- a/content/en/admin/install.md +++ b/content/en/admin/install.md @@ -199,7 +199,17 @@ cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon ``` -Then edit `/etc/nginx/sites-available/mastodon` to replace `example.com` with your own domain name, and make any other adjustments you might need. +Then edit `/etc/nginx/sites-available/mastodon` to + +1. Replace `example.com` with your own domain name +2. Uncomment the `ssl_certificate` and `ssl_certificate_key` lines and replace the two lines with (ignore this step if you are bringing your own certificate) + +``` +ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; +ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; +``` + +3. Make any other adjustments you might need. Un-comment the lines starting with `ssl_certificate` and `ssl_certificate_key`, updating the path with the correct domain name. diff --git a/content/en/admin/optional/object-storage-proxy.md b/content/en/admin/optional/object-storage-proxy.md index 1ee06e3f..66ad68b6 100644 --- a/content/en/admin/optional/object-storage-proxy.md +++ b/content/en/admin/optional/object-storage-proxy.md @@ -19,6 +19,9 @@ server { server_name files.example.com; root /var/www/html; + ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; + ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; + keepalive_timeout 30; location = / { diff --git a/content/zh-cn/admin/install.md b/content/zh-cn/admin/install.md index 669408e5..6e9f7dc7 100644 --- a/content/zh-cn/admin/install.md +++ b/content/zh-cn/admin/install.md @@ -179,7 +179,17 @@ cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon ``` -编辑 `/etc/nginx/sites-available/mastodon`,替换 `example.com` 为你自己的域名,你可以根据自己的需求做出其它的一些调整。 +编辑 `/etc/nginx/sites-available/mastodon` + +1. 替换 `example.com` 为你自己的域名 +2. 启用 `ssl_certificate` 和 `ssl_certificate_key` 这两行,并把它们替换成如下两行(如果你使用自己的证书的话则可以忽略这一步) + +``` +ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem; +ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key; +``` + +3. 你还可以根据自己的需求做出其它的一些调整。 重载 nginx 以使变更生效: From f6dbc5035b10bcfe89af7a57fb567dcc0490bb17 Mon Sep 17 00:00:00 2001 From: Mike McBride Date: Mon, 11 Dec 2023 16:35:01 -0600 Subject: [PATCH 33/36] Add mobile nav toggle (#1051) * add css toggle for mobile nav * hide toggles on non mobile * default to not checked --- assets/style.scss | 48 ++++++++++++++++++++++++++++++++--- layouts/partials/sidebar.html | 10 ++++++++ 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/assets/style.scss b/assets/style.scss index 0e269684..b3437c61 100644 --- a/assets/style.scss +++ b/assets/style.scss @@ -195,9 +195,51 @@ body { } .sidebar { - @media screen and (max-width: $mobile-width) { - margin-bottom: 60px; - } + @media screen and (max-width: $mobile-width) { + margin-bottom: 60px; + + // css menu toggle for mobile. + // when the checkbox is checked, the menu shows, + // othewise it's hidden. + // it's important for it all to be scoped inside this media query, + // that way on larger screens the menu will always show even if the checkbox is unchecked. + input[type="checkbox"] { + display: none; + } + label { + font-size: 1.2rem; + display: flex; + justify-content: flex-end; + margin-bottom: 2rem; + } + label i { + margin-right: .25rem; + } + input[type="checkbox"]:not(:checked) + label > .menu-open { + display: none; + } + + input[type="checkbox"]:checked + label > .menu-close { + display: none; + } + + & > ul { + display: none; + } + + #mobile-nav-toggle:checked ~ ul { + display: block; + } + } + + // on viewport sizes larger than mobile, always hide the mobile nav toggle. + @media screen and (min-width: $mobile-width) { + .mobile-nav-toggle, + .mobile-nav-toggle + label { + display: none; + } + } + .brand { display: flex; diff --git a/layouts/partials/sidebar.html b/layouts/partials/sidebar.html index f93a3515..67f37a7b 100644 --- a/layouts/partials/sidebar.html +++ b/layouts/partials/sidebar.html @@ -2,6 +2,16 @@
+ + +
    {{ $currentPage := . }} {{ range .Site.Menus.docs.ByWeight }} From a625f3f60e1755e621e3b82facd02ac5a8e1cbbf Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Mon, 11 Dec 2023 16:46:07 -0600 Subject: [PATCH 34/36] Remove nginx default site (#1367) * remove default site * fix default in migration guide --- content/en/admin/install.md | 1 + content/en/admin/migrating.md | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/content/en/admin/install.md b/content/en/admin/install.md index 756c96cf..01ebedf6 100644 --- a/content/en/admin/install.md +++ b/content/en/admin/install.md @@ -197,6 +197,7 @@ Copy the configuration template for nginx from the Mastodon directory: ```bash cp /home/mastodon/live/dist/nginx.conf /etc/nginx/sites-available/mastodon ln -s /etc/nginx/sites-available/mastodon /etc/nginx/sites-enabled/mastodon +rm /etc/nginx/sites-enabled/default ``` Then edit `/etc/nginx/sites-available/mastodon` to diff --git a/content/en/admin/migrating.md b/content/en/admin/migrating.md index 664af51d..0e1c4091 100644 --- a/content/en/admin/migrating.md +++ b/content/en/admin/migrating.md @@ -39,7 +39,7 @@ At a high level, you’ll need to copy over the following: Less crucially, you’ll probably also want to copy the following for convenience: -* The nginx config (under `/etc/nginx/sites-available/default`) +* The nginx config (under `/etc/nginx/sites-available/mastodon`) * The systemd config files (`/etc/systemd/system/mastodon-*.service`), which may contain your server tweaks and customizations * The PgBouncer configuration under `/etc/pgbouncer` (if you’re using it) From 3712250ef255caf6354eb176872b20584e375e1f Mon Sep 17 00:00:00 2001 From: Gabriel Simmer Date: Mon, 11 Dec 2023 22:49:25 +0000 Subject: [PATCH 35/36] Add basic Redis Sentinel documentation (#1311) * Add basic Redis Sentinel documentation Co-authored-by: Andy Piper --- content/en/admin/config.md | 36 ++++++++++++++++++++++++++++++++++++ content/en/admin/scaling.md | 5 +++++ 2 files changed, 41 insertions(+) diff --git a/content/en/admin/config.md b/content/en/admin/config.md index 9fde8c04..9dc2d93c 100644 --- a/content/en/admin/config.md +++ b/content/en/admin/config.md @@ -369,6 +369,42 @@ Defaults to the value of `REDIS_NAMESPACE`. #### `SIDEKIQ_REDIS_URL` +#### `REDIS_SENTINEL` + +Either a single DNS name that resolves one or more A records for [Redis Sentinel](https://redis.io/docs/management/sentinel/), or a comma-delimited list of Redis Sentinel instance IP:PORTs. + +#### `REDIS_SENTINEL_MASTER` + +The name of the Redis Sentinel master to connect to, defaults to `mymaster`. + +#### `REDIS_SENTINEL_PORT` + +If using the DNS name approach for `REDIS_SIDEKIQ_SENTINEL`, defines the port to use to connect to the instances resolved. Defaults to `26379`. + +#### `CACHE_REDIS_SENTINEL` + +Either a single DNS name that resolves one or more A records for [Redis Sentinel](https://redis.io/docs/management/sentinel/), or a comma-delimited list of Redis Sentinel instance IP:PORTs. + +#### `CACHE_REDIS_SENTINEL_MASTER` + +The name of the Redis Sentinel master to connect to, defaults to `mymaster`. + +#### `CACHE_REDIS_SENTINEL_PORT` + +If using the DNS name approach for `CACHE_REDIS_SENTINEL`, defines the port to use to connect to the instances resolved. Defaults to `26379`. + +#### `SIDEKIQ_REDIS_SENTINEL` + +Either a single DNS name that resolves one or more A records for [Redis Sentinel](https://redis.io/docs/management/sentinel/), or a comma-delimited list of Redis Sentinel instance IP:PORTs. + +#### `SIDEKIQ_REDIS_SENTINEL_MASTER` + +The name of the Redis Sentinel master to connect to, defaults to `mymaster`. + +#### `SIDEKIQ_REDIS_SENTINEL_PORT` + +If using the DNS name approach for `SIDEKIQ_REDIS_SENTINEL`, defines the port to use to connect to the instances resolved. Defaults to `26379`. + ### Elasticsearch {#elasticsearch} {{< page-ref page="admin/elasticsearch" >}} diff --git a/content/en/admin/scaling.md b/content/en/admin/scaling.md index 434fa1f6..64ad2336 100644 --- a/content/en/admin/scaling.md +++ b/content/en/admin/scaling.md @@ -373,6 +373,11 @@ systemctl restart mastodon-web.service systemctl restart redis-sidekiq.service ``` + +## Redis Sentinel for High Availability {#redis-sentinel} + +As mentioned, Redis is a critical part of a Mastodon instance's operation. By default, your deployment will use a single Redis instance, or multiple if you've setup a cache. However if that instance goes down it can bring the entire Mastodon instance down as well. To alleviate this, Redis Sentinel can be used to track your Redis instances and automatically direct clients to a new primary if one goes down. You can specify `REDIS_SENTINEL`, which is either a DNS name that resolves to the IPs of your Redis Sentinel instances (e.g a Kubernetes service) or a comma-delimited list of the IP:Port combinations directly, that Mastodon can talk with to determine the current master Redis node. By default Sentinel will set an instance as down and select a new master after a minute of the current master being unreachable, but this can be configured based on your setup. + ## Read-replicas {#read-replicas} To reduce the load on your PostgreSQL server, you may wish to set up hot streaming replication (read replica). [See this guide for an example](https://cloud.google.com/community/tutorials/setting-up-postgres-hot-standby). You can make use of the replica in Mastodon in these ways: From 759c0e8bbd83d55d26f53d7b21a7e6cb71ea58df Mon Sep 17 00:00:00 2001 From: Andy Piper Date: Tue, 12 Dec 2023 09:31:54 +0000 Subject: [PATCH 36/36] Revert "Add basic Redis Sentinel documentation" (#1370) Revert "Add basic Redis Sentinel documentation (#1311)" This reverts commit 3712250ef255caf6354eb176872b20584e375e1f. --- content/en/admin/config.md | 36 ------------------------------------ content/en/admin/scaling.md | 5 ----- 2 files changed, 41 deletions(-) diff --git a/content/en/admin/config.md b/content/en/admin/config.md index 9dc2d93c..9fde8c04 100644 --- a/content/en/admin/config.md +++ b/content/en/admin/config.md @@ -369,42 +369,6 @@ Defaults to the value of `REDIS_NAMESPACE`. #### `SIDEKIQ_REDIS_URL` -#### `REDIS_SENTINEL` - -Either a single DNS name that resolves one or more A records for [Redis Sentinel](https://redis.io/docs/management/sentinel/), or a comma-delimited list of Redis Sentinel instance IP:PORTs. - -#### `REDIS_SENTINEL_MASTER` - -The name of the Redis Sentinel master to connect to, defaults to `mymaster`. - -#### `REDIS_SENTINEL_PORT` - -If using the DNS name approach for `REDIS_SIDEKIQ_SENTINEL`, defines the port to use to connect to the instances resolved. Defaults to `26379`. - -#### `CACHE_REDIS_SENTINEL` - -Either a single DNS name that resolves one or more A records for [Redis Sentinel](https://redis.io/docs/management/sentinel/), or a comma-delimited list of Redis Sentinel instance IP:PORTs. - -#### `CACHE_REDIS_SENTINEL_MASTER` - -The name of the Redis Sentinel master to connect to, defaults to `mymaster`. - -#### `CACHE_REDIS_SENTINEL_PORT` - -If using the DNS name approach for `CACHE_REDIS_SENTINEL`, defines the port to use to connect to the instances resolved. Defaults to `26379`. - -#### `SIDEKIQ_REDIS_SENTINEL` - -Either a single DNS name that resolves one or more A records for [Redis Sentinel](https://redis.io/docs/management/sentinel/), or a comma-delimited list of Redis Sentinel instance IP:PORTs. - -#### `SIDEKIQ_REDIS_SENTINEL_MASTER` - -The name of the Redis Sentinel master to connect to, defaults to `mymaster`. - -#### `SIDEKIQ_REDIS_SENTINEL_PORT` - -If using the DNS name approach for `SIDEKIQ_REDIS_SENTINEL`, defines the port to use to connect to the instances resolved. Defaults to `26379`. - ### Elasticsearch {#elasticsearch} {{< page-ref page="admin/elasticsearch" >}} diff --git a/content/en/admin/scaling.md b/content/en/admin/scaling.md index 64ad2336..434fa1f6 100644 --- a/content/en/admin/scaling.md +++ b/content/en/admin/scaling.md @@ -373,11 +373,6 @@ systemctl restart mastodon-web.service systemctl restart redis-sidekiq.service ``` - -## Redis Sentinel for High Availability {#redis-sentinel} - -As mentioned, Redis is a critical part of a Mastodon instance's operation. By default, your deployment will use a single Redis instance, or multiple if you've setup a cache. However if that instance goes down it can bring the entire Mastodon instance down as well. To alleviate this, Redis Sentinel can be used to track your Redis instances and automatically direct clients to a new primary if one goes down. You can specify `REDIS_SENTINEL`, which is either a DNS name that resolves to the IPs of your Redis Sentinel instances (e.g a Kubernetes service) or a comma-delimited list of the IP:Port combinations directly, that Mastodon can talk with to determine the current master Redis node. By default Sentinel will set an instance as down and select a new master after a minute of the current master being unreachable, but this can be configured based on your setup. - ## Read-replicas {#read-replicas} To reduce the load on your PostgreSQL server, you may wish to set up hot streaming replication (read replica). [See this guide for an example](https://cloud.google.com/community/tutorials/setting-up-postgres-hot-standby). You can make use of the replica in Mastodon in these ways:

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 literal 0 HcmV?d00001 diff --git a/static/assets/admin-roles-new-ui.png b/static/assets/admin-roles-new-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..8a5f9eb74e2c128fc7007fcb637a73539d35020b GIT binary patch literal 110794 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 AhyVZp literal 0 HcmV?d00001 diff --git a/static/assets/admin-roles-ui.png b/static/assets/admin-roles-ui.png new file mode 100644 index 0000000000000000000000000000000000000000..8df6cdf12ff34deeb3d538cd2413b827f222cdbb GIT binary patch literal 134369 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%0A%WcZl1n;&3W&A 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 literal 0 HcmV?d00001 From 128895dbc9313a91c7f936dee5877b15a91dc462 Mon Sep 17 00:00:00 2001 From: trwnh Date: Fri, 8 Dec 2023 08:50:10 -0600 Subject: [PATCH 12/36] Fix copypaste error for FilterResult.status_matches type (#1214) Fix https://github.com/mastodon/mastodon/issues/24900 --- content/en/entities/FilterResult.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/entities/FilterResult.md b/content/en/entities/FilterResult.md index 6b5546d1..0a994e54 100644 --- a/content/en/entities/FilterResult.md +++ b/content/en/entities/FilterResult.md @@ -63,4 +63,4 @@ aliases: [ {{< page-relref ref="methods/filters" caption="/api/v2/filters methods" >}} -{{< caption-link url="https://github.com/mastodon/mastodon/blob/main/app/serializers/rest/filter_result_serializer.rb" caption="app/serializers/rest/filter_result_serializer.rb" >}} \ No newline at end of file +{{< caption-link url="https://github.com/mastodon/mastodon/blob/main/app/serializers/rest/filter_result_serializer.rb" caption="app/serializers/rest/filter_result_serializer.rb" >}} From 251612178dd6f8a60b7b48e0e55852c0a6460cc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=947?= <138787578+Maj-7@users.noreply.github.com> Date: Fri, 8 Dec 2023 23:27:50 +0800 Subject: [PATCH 13/36] Update _index.md (#1245) image in Chinese version doesn't show --- content/zh-cn/_index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/zh-cn/_index.md b/content/zh-cn/_index.md index 2ae3d315..240441b3 100644 --- a/content/zh-cn/_index.md +++ b/content/zh-cn/_index.md @@ -22,7 +22,7 @@ menu: Mastodon站点可以独立运作。和传统网站一样,人们可以在上面注册、发布消息、上传图片、互相聊天。但与传统网站*不同*的是,Mastodon网站之间可以互动,让跨站用户互相交流,就好像只要你知道他们的电子邮件地址,你就可以从你的Gmail帐户发送电子邮件给使用Outlook、Fastmail、Protonmail或任何其他电子邮件供应商的用户。在Mastodon里,**你可以对任何人在任何网站上的地址进行“@”或私信**。 -{{< figure src="assets/image%20%289%29.png" caption="上图从左到右依次为:集中式、联邦式、分布式" >}} +{{< figure src="assets/network-models.jpg" caption="上图从左到右依次为:集中式、联邦式、分布式" >}} ## ActivityPub是什么? {#fediverse} From 70f4386efda20915b937794db4025cf13ae671ab Mon Sep 17 00:00:00 2001 From: Claire Date: Fri, 8 Dec 2023 16:30:02 +0100 Subject: [PATCH 14/36] Update documentation for `/api/v1/accounts/update_credentials` (#1302) This was missing `source[language]` as well as `hide_collections` and the upcoming `indexable`. --- content/en/methods/accounts.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/content/en/methods/accounts.md b/content/en/methods/accounts.md index abb1bb30..9882005f 100644 --- a/content/en/methods/accounts.md +++ b/content/en/methods/accounts.md @@ -313,7 +313,10 @@ Update the user's display and preferences. 1.1.1 - added\ 2.3.0 - added `locked` parameter\ 2.4.0 - added `source[privacy,sensitive]` parameters\ -2.7.0 - added `discoverable` parameter +2.4.2 - added `source[language]` parameter\ +2.7.0 - added `discoverable` parameter\ +4.1.0 - added `hide_collections` parameter\ +4.2.0 - added `indexable` parameter #### Request @@ -345,6 +348,12 @@ bot discoverable : Boolean. Whether the account should be shown in the profile directory. +hide_collections +: Boolean. Whether to hide followers and followed accounts. + +indexable +: Boolean. Whether public posts should be searchable to anyone. + fields_attributes : Hash. The profile fields to be set. Inside this hash, the key is an integer cast to a string (although the exact integer does not matter), and the value is another hash including `name` and `value`. By default, max 4 fields. From e3ea6ccf8f13e15470be8a1b08e87be70a38c734 Mon Sep 17 00:00:00 2001 From: Adam Harvey Date: Fri, 8 Dec 2023 07:40:09 -0800 Subject: [PATCH 15/36] Fix the description of `media_attachments` in `StatusEdit` (#1180) --- content/en/entities/StatusEdit.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/entities/StatusEdit.md b/content/en/entities/StatusEdit.md index f58f34d3..c12996e5 100644 --- a/content/en/entities/StatusEdit.md +++ b/content/en/entities/StatusEdit.md @@ -105,7 +105,7 @@ aliases: [ ### `media_attachments` {#media_attachments} -**Description:** The current state of the poll options at this revision. Note that edits changing the poll options will be collapsed together into one edit, since this action resets the poll.\ +**Description:** The current state of the media attachments at this revision.\ **Type:** Array of [MediaAttachment]({{}})\ **Version history:**\ 3.5.0 - added From a54d19e88e00837cea5a8e82303b80e9a48cce9b Mon Sep 17 00:00:00 2001 From: Avery <76545554+coolavery@users.noreply.github.com> Date: Fri, 8 Dec 2023 10:42:09 -0500 Subject: [PATCH 16/36] Fix wrong HTML lang attribute on non-English pages (#1247) --- config.toml | 3 ++- i18n/{en.toml => en-US.toml} | 0 i18n/{zh-cn.toml => zh-CN.toml} | 0 3 files changed, 2 insertions(+), 1 deletion(-) rename i18n/{en.toml => en-US.toml} (100%) rename i18n/{zh-cn.toml => zh-CN.toml} (100%) diff --git a/config.toml b/config.toml index 63150176..6d78b544 100644 --- a/config.toml +++ b/config.toml @@ -1,5 +1,4 @@ baseURL = "https://docs.joinmastodon.org/" -languageCode = "en-us" defaultContentLanguage = "en" title = "Mastodon documentation" pygmentsCodeFences = true @@ -191,6 +190,7 @@ disablePathToLower = true [languages.en] contentDir = "content/en" languageName = "English" + languageCode = "en-US" weight = -99 [languages.pl] @@ -201,6 +201,7 @@ disablePathToLower = true [languages.zh-cn] contentDir = "content/zh-cn" languageName = "简体中文" + languageCode = "zh-CN" weight = 1 [languages.ja] diff --git a/i18n/en.toml b/i18n/en-US.toml similarity index 100% rename from i18n/en.toml rename to i18n/en-US.toml diff --git a/i18n/zh-cn.toml b/i18n/zh-CN.toml similarity index 100% rename from i18n/zh-cn.toml rename to i18n/zh-CN.toml From 7fca1ab4533f1acc38ba7ce3fe938c3c0ef06ede Mon Sep 17 00:00:00 2001 From: Luke Pighetti Date: Fri, 8 Dec 2023 12:04:30 -0500 Subject: [PATCH 17/36] update Dart package (#1164) --- content/en/client/libraries.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/en/client/libraries.md b/content/en/client/libraries.md index 7fc3f124..9f5bd12c 100644 --- a/content/en/client/libraries.md +++ b/content/en/client/libraries.md @@ -36,8 +36,9 @@ Remember to check how recently the library was updated, and whether it includes * [mastodon-api-crystal](https://github.com/renatolond/mastodon-api-crystal) -## Dart +## Dart {#dart} +* [mastodon_dart](https://pub.dev/packages/mastodon_dart) * [mastodon-api](https://github.com/mastodon-dart/mastodon-api) * [mastodon-oauth](https://github.com/mastodon-dart/mastodon-oauth2) * [mastodon](https://github.com/mykdavies/Mastodon) From 6ae7a7334bf5401abcf9da9a88846e82c9ff5fda Mon Sep 17 00:00:00 2001 From: Sophie Bertsch Date: Fri, 8 Dec 2023 22:19:04 +0100 Subject: [PATCH 18/36] Fix link to tootctl (#847) Assuming that this documentation is run inside the /live (Mastodon home directory), the current link is broken. The proposed change fixes this error and thus refers to the tootctl inside the bin directory --- content/en/admin/troubleshooting/index-corruption.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/en/admin/troubleshooting/index-corruption.md b/content/en/admin/troubleshooting/index-corruption.md index 585b9428..b0fa0f62 100644 --- a/content/en/admin/troubleshooting/index-corruption.md +++ b/content/en/admin/troubleshooting/index-corruption.md @@ -86,7 +86,7 @@ Mastodon 3.2.2 and later come with a semi-interactive script to fix those corrup Before attempting to fix your database, **stop Mastodon and make a backup of your database**. Then, with **Mastodon still stopped**, run the maintenance script: ``` -RAILS_ENV=production tootctl maintenance fix-duplicates +RAILS_ENV=production bin/tootctl maintenance fix-duplicates ``` The script will walk through the database to automatically find duplicates and fix them. In some cases, those operations are destructive. In the most destructive cases, you will be asked to choose which record to keep and which records to discard. In all cases, walking through the whole database in search of duplicates is an extremely long operation. From 5cfda9d588c56e391afc0e0abf8a5b5ccacb5806 Mon Sep 17 00:00:00 2001 From: Maurizio De Magnis Date: Fri, 8 Dec 2023 22:21:43 +0100 Subject: [PATCH 19/36] Fixes Fail2Ban's directive (#969) Without `filter = sshd` and after restarting the service I see this error in Fail2Ban's logs (`/var/log/fail2ban.log`): ``` 2022-11-03 11:24:36,225 fail2ban.transmitter [1283507]: ERROR Jail 'sshd-ddos' skipped, because of wrong configuration: Unable to read the filter 'sshd-ddos' ``` I added the statement as per [this article](https://serverfault.com/a/1050315) and it worked. --- content/en/admin/prerequisites.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/en/admin/prerequisites.md b/content/en/admin/prerequisites.md index e6c3029d..6f5a3a42 100644 --- a/content/en/admin/prerequisites.md +++ b/content/en/admin/prerequisites.md @@ -45,6 +45,7 @@ port = 22 [sshd-ddos] enabled = true +filter = sshd port = 22 ``` From 5bed9cfe820052a4ba95118adbc0509ec8bbe6f9 Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Fri, 8 Dec 2023 22:23:03 +0100 Subject: [PATCH 20/36] Document /api/v1/instance/translation_languages (#1189) --- content/en/methods/instance.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/content/en/methods/instance.md b/content/en/methods/instance.md index a6f1823c..072caa23 100644 --- a/content/en/methods/instance.md +++ b/content/en/methods/instance.md @@ -491,6 +491,36 @@ Obtain an extended description of this server --- +## View translation languages {#translation_languages} + +```http +GET /api/v1/instance/translation_languages HTTP/1.1 +``` + +Translation language pairs supported by the translation engine used by the server. + +**Returns:** Object with source language codes as keys and arrays of target language codes as values.\ +**OAuth:** Public\ +**Version history:**\ +4.2.0 - added + +#### Response +##### 200: OK + +All source and target language pairs supported by the server. + +In the following sample response showing support for translating a status written in English (`en`) into German (`de`) or Spanish (`es`). The source language code `und` indicates that the server supports auto-detection the language of statuses with an empty `language` attribute and translating these into either British English (`en-GB`), German or Spanish. + +```json +{ + "en": ["de", "es"], + // [...] + "und": ["en-GB", "de", "es"] +} +``` + +--- + ## (DEPRECATED) View server information (V1) {#v1} ```http From 8a274aaf39cd00624de8c9b431b22e6803294213 Mon Sep 17 00:00:00 2001 From: bt90 Date: Fri, 8 Dec 2023 22:24:53 +0100 Subject: [PATCH 21/36] Allow incoming HTTP/3 connections (en) (#1066) --- content/en/admin/prerequisites.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/content/en/admin/prerequisites.md b/content/en/admin/prerequisites.md index 6f5a3a42..0c6b6829 100644 --- a/content/en/admin/prerequisites.md +++ b/content/en/admin/prerequisites.md @@ -81,6 +81,8 @@ Edit `/etc/iptables/rules.v4` and put this inside: # Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL). -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT +# (optional) Allow HTTP/3 connections from anywhere. +-A INPUT -p udp --dport 443 -j ACCEPT # Allow SSH connections # The -dport number should be the same port number you set in sshd_config @@ -125,6 +127,8 @@ If your server is also reachable over IPv6, edit `/etc/iptables/rules.v6` and ad # Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL). -A INPUT -p tcp --dport 80 -j ACCEPT -A INPUT -p tcp --dport 443 -j ACCEPT +# (optional) Allow HTTP/3 connections from anywhere. +-A INPUT -p udp --dport 443 -j ACCEPT # Allow SSH connections # The -dport number should be the same port number you set in sshd_config From b87c68c120478e29ed2b4f2d1d5a55f193b82a4a Mon Sep 17 00:00:00 2001 From: Manish Roy <34767051+ManVTish@users.noreply.github.com> Date: Sat, 9 Dec 2023 02:55:44 +0530 Subject: [PATCH 22/36] Fix notification query param LIMIT doc #24684 (#1210) * Fix notification query param LIMIT doc The notification query param LIMIT should return 40 notifications as default & Maximum notifications depends on the LIMIT param as evident from the code in api/v1/notifications_controller * LIMIT param default & max notifications updated * limit param doc updated --- content/en/methods/notifications.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/content/en/methods/notifications.md b/content/en/methods/notifications.md index 1dc7ae24..aeb6a7d9 100644 --- a/content/en/methods/notifications.md +++ b/content/en/methods/notifications.md @@ -46,7 +46,8 @@ Types to filter include: 3.1.0 - added `follow_request` type\ 3.3.0 - added `status` type; both `min_id` and `max_id` can be used at the same time now\ 3.5.0 - added `types`; add `update` and `admin.sign_up` types\ -4.0.0 - added `admin.report` type +4.0.0 - added `admin.report` type\ +4.1.0 - notification limit changed from 15 (max 30) to 40 (max 80) #### Request @@ -67,7 +68,7 @@ min_id : String. Returns results immediately newer than this ID. In effect, sets a cursor at this ID and paginates forward. limit -: Integer. Maximum number of results to return. Defaults to 15 notifications. Max 30 notifications. +: Integer. Maximum number of results to return. Defaults to 40 notifications. Max 80 notifications. types[] : Array of String. Types to include in the result. @@ -394,4 +395,4 @@ Invalid or missing Authorization header. {{< page-relref ref="methods/push" caption="push API methods" >}} -{{< caption-link url="https://github.com/mastodon/mastodon/blob/main/app/controllers/api/v1/notifications_controller.rb" caption="app/controllers/api/v1/notifications_controller.rb" >}} \ No newline at end of file +{{< caption-link url="https://github.com/mastodon/mastodon/blob/main/app/controllers/api/v1/notifications_controller.rb" caption="app/controllers/api/v1/notifications_controller.rb" >}} From 921fb57ff498c01cf2184732f27c4434b24515a6 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 10 Dec 2023 12:07:04 -0600 Subject: [PATCH 23/36] add batch delete variables (#1354) --- content/en/admin/config.md | 8 ++++++++ content/zh-cn/admin/config.md | 2 ++ 2 files changed, 10 insertions(+) diff --git a/content/en/admin/config.md b/content/en/admin/config.md index 7c002f69..ed36827a 100644 --- a/content/en/admin/config.md +++ b/content/en/admin/config.md @@ -548,6 +548,14 @@ You must serve the files with CORS headers, otherwise some functions of Mastodon #### `S3_FORCE_SINGLE_REQUEST` +#### `S3_BATCH_DELETE_LIMIT` + +The official [Amazon S3 API](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html) can handle deleting 1,000 objects in one batch job, but some providers may have issues handling this many in one request, or offer lower limits. Defaults to `1000`. + +#### `S3_BATCH_DELETE_RETRY` + +During batch delete operations, S3 providers may perodically fail or timeout while processing deletion requests. Mastodon will backoff and retry the request up to the maximum number of times. Defaults to `3`. + ### Swift {#swift} #### `SWIFT_ENABLED` diff --git a/content/zh-cn/admin/config.md b/content/zh-cn/admin/config.md index ecc07478..58561bc4 100644 --- a/content/zh-cn/admin/config.md +++ b/content/zh-cn/admin/config.md @@ -148,6 +148,8 @@ Mastodon使用环境变量作为其的配置。 * `S3_HOSTNAME` * `S3_ENDPOINT` * `S3_SIGNATURE_VERSION` +* `S3_BATCH_DELETE_LIMIT` +* `S3_BATCH_DELETE_RETRY` ### Swift {#swift} From 94aa9f71a7cc3afb420f46b2a6b351f3bd5339a8 Mon Sep 17 00:00:00 2001 From: Michael Stanclift Date: Sun, 10 Dec 2023 12:40:20 -0600 Subject: [PATCH 24/36] Consistent use of Postgres and PgBouncer (#1353) * fix pgbouncer * pghero --- content/en/admin/config.md | 2 +- content/en/admin/migrating.md | 12 ++++++------ content/en/admin/scaling.md | 24 ++++++++++++------------ content/en/dev/setup.md | 2 +- content/en/entities/Role.md | 2 +- content/zh-cn/admin/migrating.md | 10 +++++----- content/zh-cn/admin/scaling.md | 4 ++-- 7 files changed, 28 insertions(+), 28 deletions(-) diff --git a/content/en/admin/config.md b/content/en/admin/config.md index ed36827a..d036a8eb 100644 --- a/content/en/admin/config.md +++ b/content/en/admin/config.md @@ -315,7 +315,7 @@ Defines how many database connections to pool in the process. This value should #### `DB_SSLMODE` -Postgres's [SSL mode](https://www.postgresql.org/docs/10/libpq-ssl.html). Defaults to `prefer`. +PostgreSQL [SSL mode](https://www.postgresql.org/docs/10/libpq-ssl.html). Defaults to `prefer`. #### `DATABASE_URL` diff --git a/content/en/admin/migrating.md b/content/en/admin/migrating.md index f108daf0..664af51d 100644 --- a/content/en/admin/migrating.md +++ b/content/en/admin/migrating.md @@ -17,7 +17,7 @@ This guide was written with Ubuntu Server in mind; your mileage may vary for oth 1. Set up a new Mastodon server using the [Production Guide]({{< relref "install" >}}) (however, don’t run `mastodon:setup`). 2. Stop Mastodon on the old server (e.g. `systemctl stop 'mastodon-*.service'`). -3. Dump and load the Postgres database using the instructions below. +3. Dump and load the PostgreSQL database using the instructions below. 4. Copy the `system/` files using the instructions below. (Note: if you’re using S3, you can skip this step.) 5. Copy the `.env.production` file. 6. Run `RAILS_ENV=production bundle exec rails assets:precompile` to compile Mastodon @@ -34,18 +34,18 @@ This guide was written with Ubuntu Server in mind; your mileage may vary for oth At a high level, you’ll need to copy over the following: * The `~/live/public/system` directory, which contains user-uploaded images and videos (if using S3, you don’t need this) -* The Postgres database (using [pg_dump](https://www.postgresql.org/docs/9.1/static/backup-dump.html)) +* The PostgreSQL database (using [pg_dump](https://www.postgresql.org/docs/9.1/static/backup-dump.html)) * The `~/live/.env.production` file, which contains server config and secrets Less crucially, you’ll probably also want to copy the following for convenience: * The nginx config (under `/etc/nginx/sites-available/default`) * The systemd config files (`/etc/systemd/system/mastodon-*.service`), which may contain your server tweaks and customizations -* The pgbouncer configuration under `/etc/pgbouncer` (if you’re using it) +* The PgBouncer configuration under `/etc/pgbouncer` (if you’re using it) -### Dump and load Postgres {#dump-and-load-postgres} +### Dump and load PostgreSQL {#dump-and-load-postgresql} -Instead of running `mastodon:setup`, we’re going to create an empty Postgres database using the `template0` database (which is useful when restoring a Postgres dump, [as described in the pg_dump documentation](https://www.postgresql.org/docs/9.1/static/backup-dump.html#BACKUP-DUMP-RESTORE)). +Instead of running `mastodon:setup`, we’re going to create an empty PostgreSQL database using the `template0` database (which is useful when restoring a PostgreSQL dump, [as described in the pg_dump documentation](https://www.postgresql.org/docs/9.1/static/backup-dump.html#BACKUP-DUMP-RESTORE)). Run this as the `mastodon` user on your old system: @@ -80,7 +80,7 @@ You’ll want to re-run this if any of the files on the old server change. You should also copy over the `.env.production` file, which contains secrets. -Optionally, you may copy over the nginx, systemd, and pgbouncer config files, or rewrite them from scratch. +Optionally, you may copy over the nginx, systemd, and PgBouncer config files, or rewrite them from scratch. ### During migration {#during-migration} diff --git a/content/en/admin/scaling.md b/content/en/admin/scaling.md index 0c323e0e..13071415 100644 --- a/content/en/admin/scaling.md +++ b/content/en/admin/scaling.md @@ -123,13 +123,13 @@ As a solution, it is possible to start different Sidekiq processes for the queue **Make sure you only have one `scheduler` queue running!!** -## Transaction pooling with pgBouncer {#pgbouncer} +## Transaction pooling with PgBouncer {#pgbouncer} ### Why you might need PgBouncer {#pgbouncer-why} -If you start running out of available Postgres connections (the default is 100) then you may find PgBouncer to be a good solution. This document describes some common gotchas as well as good configuration defaults for Mastodon. +If you start running out of available PostgreSQL connections (the default is 100) then you may find PgBouncer to be a good solution. This document describes some common gotchas as well as good configuration defaults for Mastodon. -User roles with `DevOps` permissions in Mastodon can monitor the current usage of Postgres connections through the PgHero link in the Administration view. Generally, the number of connections open is equal to the total threads in Puma, Sidekiq, and the streaming API combined. +User roles with `DevOps` permissions in Mastodon can monitor the current usage of PostgreSQL connections through the PgHero link in the Administration view. Generally, the number of connections open is equal to the total threads in Puma, Sidekiq, and the streaming API combined. ### Installing PgBouncer {#pgbouncer-install} @@ -143,7 +143,7 @@ sudo apt install pgbouncer #### Setting a password {#pgbouncer-password} -First off, if your `mastodon` user in Postgres is set up without a password, you will need to set a password. +First off, if your `mastodon` user in PostgreSQL is set up without a password, you will need to set a password. Here’s how you might reset the password: @@ -193,7 +193,7 @@ In both cases, the password is just `password`. Edit `/etc/pgbouncer/pgbouncer.ini` -Add a line under `[databases]` listing the Postgres databases you want to connect to. Here we’ll just have PgBouncer use the same username/password and database name to connect to the underlying Postgres database: +Add a line under `[databases]` listing the PostgreSQL databases you want to connect to. Here we’ll just have PgBouncer use the same username/password and database name to connect to the underlying PostgreSQL database: ```text [databases] @@ -219,13 +219,13 @@ Make sure the `pgbouncer` user is an admin: admin_users = pgbouncer ``` -Mastodon requires a different pooling mode than the default session-based one. Specifically, it needs a transaction-based pooling mode. This means that a Postgres connection is established at the start of a transaction and terminated upon its completion. Therefore, it's essential to change the `pool_mode` setting from `session` to `transaction`: +Mastodon requires a different pooling mode than the default session-based one. Specifically, it needs a transaction-based pooling mode. This means that a PostgreSQL connection is established at the start of a transaction and terminated upon its completion. Therefore, it's essential to change the `pool_mode` setting from `session` to `transaction`: ```ini pool_mode = transaction ``` -Next up, `max_client_conn` defines how many connections PgBouncer itself will accept, and `default_pool_size` puts a limit on how many Postgres connections will be opened under the hood. (In PgHero the number of connections reported will correspond to `default_pool_size` because it has no knowledge of PgBouncer.) +Next up, `max_client_conn` defines how many connections PgBouncer itself will accept, and `default_pool_size` puts a limit on how many PostgreSQL connections will be opened under the hood. (In PgHero the number of connections reported will correspond to `default_pool_size` because it has no knowledge of PgBouncer.) The defaults are fine to start, and you can always increase them later: @@ -234,7 +234,7 @@ max_client_conn = 100 default_pool_size = 20 ``` -Don’t forget to reload or restart pgbouncer after making your changes: +Don’t forget to reload or restart PgBouncer after making your changes: ```bash sudo systemctl reload pgbouncer @@ -242,7 +242,7 @@ sudo systemctl reload pgbouncer #### Debugging that it all works {#pgbouncer-debug} -You should be able to connect to PgBouncer just like you would with Postgres: +You should be able to connect to PgBouncer just like you would with PostgreSQL: ```bash psql -p 6432 -U mastodon mastodon_production @@ -266,7 +266,7 @@ PREPARED_STATEMENTS=false Since we’re using transaction-based pooling, we can’t use prepared statements. -Next up, configure Mastodon to use port 6432 (PgBouncer) instead of 5432 (Postgres) and you should be good to go: +Next up, configure Mastodon to use port 6432 (PgBouncer) instead of 5432 (PostgreSQL) and you should be good to go: ```bash DB_HOST=localhost @@ -277,7 +277,7 @@ DB_PORT=6432 ``` {{< hint style="warning" >}} -You cannot use pgBouncer to perform `db:migrate` tasks. But this is easy to work around. If your postgres and pgbouncer are on the same host, it can be as simple as defining `DB_PORT=5432` together with `RAILS_ENV=production` when calling the task, for example: `RAILS_ENV=production DB_PORT=5432 bundle exec rails db:migrate` (you can specify `DB_HOST` too if it’s different, etc) +You cannot use PgBouncer to perform `db:migrate` tasks. But this is easy to work around. If your PostgreSQL and PgBouncer are on the same host, it can be as simple as defining `DB_PORT=5432` together with `RAILS_ENV=production` when calling the task, for example: `RAILS_ENV=production DB_PORT=5432 bundle exec rails db:migrate` (you can specify `DB_HOST` too if it’s different, etc) {{< /hint >}} #### Administering PgBouncer {#pgbouncer-admin} @@ -402,7 +402,7 @@ production: url: postgresql://db_user:db_password@db_host:db_port/db_name ``` -Make sure the URLs point to wherever your PostgreSQL servers are. You can add multiple replicas. You could have a locally installed pgBouncer with a configuration to connect to two different servers based on the database name, e.g. “mastodon” going to the primary, “mastodon_replica” going to the replica, so in the file above both URLs would point to the local pgBouncer with the same user, password, host and port, but different database name. There are many possibilities how this could be set up! For more information on Makara, [see their documentation](https://github.com/taskrabbit/makara#databaseyml). +Make sure the URLs point to wherever your PostgreSQL servers are. You can add multiple replicas. You could have a locally installed PgBouncer with a configuration to connect to two different servers based on the database name, e.g. “mastodon” going to the primary, “mastodon_replica” going to the replica, so in the file above both URLs would point to the local PgBouncer with the same user, password, host and port, but different database name. There are many possibilities how this could be set up! For more information on Makara, [see their documentation](https://github.com/taskrabbit/makara#databaseyml). {{< hint style="warning" >}} Make sure the sidekiq processes run with the stock `config/database.yml` to avoid failing jobs and data loss! diff --git a/content/en/dev/setup.md b/content/en/dev/setup.md index 9477bda7..4898a863 100644 --- a/content/en/dev/setup.md +++ b/content/en/dev/setup.md @@ -53,7 +53,7 @@ bundle install yarn install ``` -In the development environment, Mastodon will use PostgreSQL as the currently signed-in Linux user using the `ident` method. Ensure that you have created a Postgres user and database for your current signed-in user: +In the development environment, Mastodon will use PostgreSQL as the currently signed-in Linux user using the `ident` method. Ensure that you have created a PostgreSQL user and database for your current signed-in user: ```sh sudo -u postgres createuser $YOUR_USERNAME_HERE --createdb diff --git a/content/en/entities/Role.md b/content/en/entities/Role.md index 679fe02a..0d8edb95 100644 --- a/content/en/entities/Role.md +++ b/content/en/entities/Role.md @@ -69,7 +69,7 @@ To determine the permissions available to a certain role, convert the `permissio : **Administrator**. Users with this permission bypass all permissions. 0x2 -: **Devops**. Allows users to access Sidekiq and pgHero dashboards. +: **Devops**. Allows users to access Sidekiq and PgHero dashboards. 0x4 : **View Audit Log**. Allows users to see history of admin actions. diff --git a/content/zh-cn/admin/migrating.md b/content/zh-cn/admin/migrating.md index 11732a3b..c1910695 100644 --- a/content/zh-cn/admin/migrating.md +++ b/content/zh-cn/admin/migrating.md @@ -17,7 +17,7 @@ menu: 1. 依照[产品指南]({{< relref "install" >}})安装新的Mastodon服务器(切记,不要运行 `mastodon:setup`)。 2. 停止旧服务器上的Mastodon(`systemctl stop 'mastodon-*.service'`)。 -3. 依照如下指示,导出并导入Postgres数据库。 +3. 依照如下指示,导出并导入PostgreSQL数据库。 4. 依照如下指示,复制 `system/` 目录下文件。(注意:如果你使用S3存储,你可以跳过此步)。 5. 复制 `.env.production` 文件。 6. 运行 `RAILS_ENV=production bundle exec rails assets:precompile` 编译 Mastodon。 @@ -34,18 +34,18 @@ menu: 你必须需要复制如下内容: * `~/live/public/system`目录,里面包含了用户上传的图片与视频(如果使用S3,可跳过此步) -* Postgres数据库(使用[pg_dump](https://www.postgresql.org/docs/9.1/static/backup-dump.html)) +* PostgreSQL数据库(使用[pg_dump](https://www.postgresql.org/docs/9.1/static/backup-dump.html)) * `~/live/.env.production`文件,里面包含了服务器配置与密钥 不太重要的部分,为了方便起见,你也可以复制如下内容: * nginx配置文件(位于`/etc/nginx/sites-available/default`) * systemd配置文件(`/etc/systemd/system/mastodon-*.service`),里面可能包括一些你服务器的调优与个性化 -* pgbouncer配置文件,位于 `/etc/pgbouncer` (如果你使用pgbouncer的话) +* PgBouncer配置文件,位于 `/etc/pgbouncer` (如果你使用PgBouncer的话) -### 导出并导入Postgres数据库 {#dump-and-load-postgres} +### 导出并导入PostgreSQL数据库 {#dump-and-load-postgresql} -不要运行`mastodon:setup`,而是创建一个名为`template0`的空白Postgres数据库(当导入Postgres导出文件时,这是很有用的,参见[pg_dump文档](https://www.postgresql.org/docs/9.1/static/backup-dump.html#BACKUP-DUMP-RESTORE))。 +不要运行`mastodon:setup`,而是创建一个名为`template0`的空白PostgreSQL数据库(当导入PostgreSQL导出文件时,这是很有用的,参见[pg_dump文档](https://www.postgresql.org/docs/9.1/static/backup-dump.html#BACKUP-DUMP-RESTORE))。 在你的旧系统,使用`mastodon`用户运行如下命令: diff --git a/content/zh-cn/admin/scaling.md b/content/zh-cn/admin/scaling.md index e9e43d06..fe39a8e9 100644 --- a/content/zh-cn/admin/scaling.md +++ b/content/zh-cn/admin/scaling.md @@ -101,7 +101,7 @@ sudo apt install pgbouncer #### 设置密码 {#pgbouncer-password} 首先,如果你的Postgres中`mastodon`帐户没有设置密码的话,你需要设置一个密码。 -First off, if your `mastodon` user in Postgres is set up without a password, you will need to set a password. +First off, if your `mastodon` user in PostgreSQL is set up without a password, you will need to set a password. 下面是如何重置密码: @@ -212,7 +212,7 @@ PREPARED_STATEMENTS=false 因为我们使用基于事务(transaction-based)的连接池,我们不能使用参数化查询(prepared statement)。 -接下来,配置Mastodon使用6432端口(PgBouncer)而不是5432端口(Postgres)就可以了: +接下来,配置Mastodon使用6432端口(PgBouncer)而不是5432端口(PostgreSQL)就可以了: ```bash DB_HOST=localhost From 0ca2155229b0d81ea82e1382d15c80b47c56f66e Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Sun, 10 Dec 2023 19:44:53 +0100 Subject: [PATCH 25/36] New translations attributes (#1203) --- content/en/entities/Translation.md | 64 ++++++++++++++++++++++++++++-- content/en/methods/statuses.md | 39 ++++++++++++++++-- 2 files changed, 96 insertions(+), 7 deletions(-) diff --git a/content/en/entities/Translation.md b/content/en/entities/Translation.md index 67d0c475..0b664c1c 100644 --- a/content/en/entities/Translation.md +++ b/content/en/entities/Translation.md @@ -10,25 +10,81 @@ aliases: [ ] --- -## Example +## Examples + +Translation of status with content warning and media ```json { - "content": "