Подписка на актора ActivityPub

Эта тема посвящена подписке на актора ActivityPub в Discourse с помощью плагина Discourse ActivityPub и является продолжением темы Настройка актора ActivityPub. Если вы не уверены, что это означает, сначала перейдите в тему Плагин Discourse ActivityPub.

Инструкция

Чтобы подписаться на актора ActivityPub:

  1. Настройте актора для категории или тега, для которого вы хотите выполнить подписку.
  2. Получите «обработчик» (handle) актора, на которого хотите подписаться (см. ниже).
  3. Перейдите на вкладку «Федерация» в списке тем категории или тега из шага 1.
  4. Нажмите «Новая подписка», введите обработчик из шага 2 и нажмите «Найти» (см. ниже).
  5. Когда актор будет найден, нажмите «Подписаться».

Обработчики акторов

Большинство сервисов ActivityPub используют протокол WebFinger для обнаружения акторов по их «обработчику». Обычно он имеет формат:

username@domain

Иногда перед именем пользователя стоит символ, например @.

Discourse

Чтобы получить обработчик актора Discourse, перейдите на вкладку «Федерация» в списке тем актора.

Обработчик на скриншоте: announcements@test.pavilion.tech

Mastodon

Чтобы получить обработчик актора Mastodon, откройте профиль актора.

Обработчик на скриншоте: @angusmcleod@mastodon.social

Поиск актора

Когда вы вводите обработчик актора в модальном окне «Новая подписка» и нажимаете «Найти», плагин выполняет поиск обработчика с помощью WebFinger. Этот поиск может не завершиться успешно. Если результаты не найдены:

  1. Проверьте скопированный обработчик.
  2. Убедитесь, что в домене обработчика работает сервер с поддержкой ActivityPub.
  3. Попробуйте выполнить поиск обработчика в другом сервисе ActivityPub.

Если вы выполнили указанные выше шаги и считаете, что проблема может быть связана с вашим сайтом или плагином:

  1. Убедитесь, что включена настройка сайта activity pub verbose logging.
  2. Повторите поиск.
  3. Проверьте /logs на наличие логов с меткой “ActivityPub”.
  4. Сообщите о любых найденных проблемах в ответе на эту тему.
2 лайка

Привет @angus, спасибо за отличный гайд!

Пока что мне удаётся федерировать посты и ответы между Discourse и Mastodon, но не между разными инстансами Discourse. Мои федерированные категории в Discourse открыты для всех, но для создания аккаунта на инстансах требуется приглашение. Как вы думаете, может ли это быть связано с проблемой?

Также ответы на федерированные посты, созданные другими людьми, не распространяются на другие инстансы, участвующие в обсуждении. Это нормально и ожидаемо?

Спасибо!

Возможно! Давайте протестирую этот сценарий и вернусь к вам.

Discourse публикует активности в теме для всех участников темы, даже если они не подписаны на соответствующего актора (т. е. категорию или тег). Поэтому это не является ожидаемым поведением. Это может быть проблема на стороне Discourse (пожалуйста, проверьте логи и сообщите, если заметите что-то необычное). Также это может быть проблема на платформе, где вы ожидаете увидеть ответы.

Может быть, приведёте пример?

1 лайк

Извините, @angus, мне нужно перенести мой экземпляр на другой сервер. Когда я включил ActivityPub на двух моих экземплярах Discourse, мой Raspberry Pi 4 с 8 ГБ оперативной памяти не справился с трафиком ActivityPub, постоянно перегревался и зависал. Я предоставлю обновление, если попробую запустить ActivityPub на экспериментальном экземпляре.

Есть ли какие-либо предложения по полному исключению домена приложения из списка после его активации в ActivityPub?

Я практически не могу использовать предыдущие поддомены из-за интенсивного трафика, который они всё ещё получают, хотя я и отписался от аккаунтов категорий в экземпляре Mastodon, который я использую.

Привет, Роб, жаль слышать, что у тебя возникли проблемы. Плагин ActivityPub уже включает ряд защитных механизмов для обработки высоких нагрузок, в частности следующие настройки сайта:

  • activity_pub_rate_limit_post_to_inbox_per_minute: По умолчанию значение равно 10. Это означает, что по умолчанию обрабатывается 10 входящих POST-запросов с одного IP-адреса в минуту. Попробуй уменьшить это значение.

  • activity_pub_rate_limit_get_objects_per_minute: По умолчанию значение равно 30 с одного IP-адреса в минуту. Это означает, что по умолчанию обрабатывается 30 GET-запросов с одного IP-адреса в минуту. Попробуй уменьшить это значение.

  • activity_pub_blocked_request_origins: Эта настройка позволяет заблокировать все запросы с домена (доменов), которые могут вызывать у тебя проблемы.

  • activity_pub_allowed_request_origins: Эта настройка позволяет разрешить запросы только с определённых доменов, что означает блокировку запросов из всех остальных источников.

Если проблема действительно вызвана высокой нагрузкой, решение заключается в использовании вышеуказанных защитных механизмов, если только у тебя нет контроля над серверами, с которых поступает трафик.

Спасибо за совет, Энгус. Я очень это ценю. Я разверну еще один экземпляр Discourse на экспериментальном сервере, который не повлияет на мои другие службы, и попробую снова, следуя вашим рекомендациям.

Я не уверен, на каком уровне моей инфраструктуры кроется проблема, но, возможно, это обратный прокси.

Я использую Cosmos Server как монитор сервера, интерфейс управления контейнерами Docker и обратный прокси для моих других контейнеров Docker, таких как Discourse и других служб. Мне кажется, что обратный прокси также должен быть настроен соответствующим образом для адекватного ограничения скорости входящих подключений ActivityPub.

Возможно, именно входящие запросы синхронизации ActivityPub с внешнего сервера Mastodon перегрузили обратный прокси, что привело к максимальной загрузке оперативной памяти, процессора и сети, а также к перегреву.

Я обновлю информацию, как только получу следующую партию Raspberry Pi и у меня появится свободная плата для использования в качестве экспериментального сервера.

Спасибо за ваши предложения!

1 лайк

Спасибо за ваши отличные видео. Не упустил ли я объяснение того, как подписчики могут отвечать или взаимодействовать по этим темам? Мне интересно, не станет ли это лёгким «сервером» для команды социальных сетей.

Какова наиболее вероятная причина ошибки 403, когда пользователь Mastodon пытается найти аккаунт Discourse?

В Mastodon по этому идентификатору ничего не находится, а Discourse выдает следующее:

Запрос GET к https://foorumi.katiska.eu/ap/actor/2a8f2bdb5a547366558a0906d6bf6a5c завершился с ошибкой: 403 Forbidden

То же самое происходит и для /inbox