Прошло уже месяца два как я начал миграцию из Twitter в Mastodon (далее прописью). Мастодон это полный аналог твиттера, только ты можешь поднять свой сервер и все сервера соединены между собой, так что ты можешь общаться со всей сетью. Контента, особенно англоязычного, в мастодоне море, журналисты, NASA, все крупные новостные издания уже там и среди моих подписок. Если не хочется возни, то можно на любом сервере завести себе аккаунт где открыта регистрация. Есть веб клиенты и приложения для android и ios. Все это называется федеративная сеть. Не нравится модератор сервера, заводишь свой или мигрируешь на другой. Все реже появляюсь в твиттере теперь. Но просто создать аккаунт в мастодоне было не интересно так что я поднял себе инстанс (так называют сервера мастодона обычно), о чем и напишу.

Особо хочу отметить адекватность и интересность обитателей. Пока что это сеть не пораженная раком как твиттер. Так что шитпостинга и неадекватов там мало. И как в твиттере нет одного Илона, нашего всего, Маска, способного забанить кого угодно по желанию левой пятки. Мало того так как админ сервера вы, вы можете банить целые сервера федиверса так что всякая гадость, с вашей точки зрения, быстро остается в изоляции и может совершенно спокойно коммуницировать межу собой на своих серверах и между своих серверов внутри своего сегмента федиверса. Есть много инстансов где пускают только по приглашению или вообще не пускают. При этом они могут читать всех, их могут читать все, но они могут забанить кого не хотят видеть. В общем все честно и спокойно, все живут с кем хотят и как хотят, и могут общаться. Инстансов сотни, может уже тысячи. С миллионами пользователей уже.

Итак, настройка сервера. Купил себе доменное имя anyqn.com. Далее купил себе VPS на DigitalOcean. Его прелесть в том, что есть готовый образ для развертывания, с сервером. Mastodon droplet https://marketplace.digitalocean.com/apps/mastodon. Немного про нее написано тут https://blog.joinmastodon.org/2019/04/mastodon-now-available-on-digitalocean/

Прописал DNS чтобы он выводил на дроплет с установленным мастодоном. Это делается не сложно и описано тут https://docs.digitalocean.com/tutorials/dns-registrars/ и тут https://docs.digitalocean.com/products/networking/dns/how-to/add-subdomain/ Суть состоит в том, что нужно купить доменное имя после чего у провайдера прописать в качестве DNS серверов для этого доменного имени DNS сервера DigitalOcean. После этого все обращения к домену будут обрабатываться этими серверами, а уже в панели управления DigitalOcean можно сделать чтобы поддомены вели на конкретный дроплет (VPS сервер), который вы запустили с мастодоном на борту. В моем случае мастодон поднят на mtdn.anyqn.com и если зайти то откроется нормальный веб интерфейс. Корневой домен я не захотел превращать в мастодон хост так как мне нужно еще сервисы поднимать. Хорошо бы страничку на корне сделать, но никак руки не дойдут.

При установке готовой сборки мастодона на VPS будут заданы некоторые вопросы, чтобы приложение могло работать потом. Среди них важно чтобы было задано как раз верное имя хоста, ведущее на дроплет, так как будет сгенерирован конфиг nginx для этого имени. Вторая важная штука это имя smtp сервера, который будет использоваться приложением чтобы слать письма с подтверждениями аккаунтов при регистрации. Чтобы не платить за сервис рассылки я просто сделал ящик в gmail.com и сгенерировал к нему smtp логин и пароль. Так как миллионов пользователей на своем домашнем сервере не ожидаю. Это примерно описано тут — «Sign in with App Passwords» и тут — «Send email from a printer, scanner, or app», так же можно легко найти много статей о том как настроить smtp доступ к почте для отправки писем. Можно использовать protonmail там рассылки можно делать пожирнее. В итоге в конфиге (установка по умолчанию) /home/mastodon/live/.env.production на сервере появятся проперти

SMTP_SERVER=smtp.gmail.com SMTP_PORT=587 SMTP_LOGIN=adm@gmail.com SMTP_PASSWORD= SMTP_AUTH_METHOD=plain SMTP_OPENSSL_VERIFY_MODE=client_once SMTP_FROM_ADDRESS=Mastodon notifications@mtdn.anyqn.com

После того как я настроил мастодон понадобилась небольшая настройка сервера, не обязательная но полезная. Первое, что я сделал это установил https://jemalloc.net/ это реализация библиотеки для выделения памяти, которая умеет меньше фрагментировать ее, прочитаете если захотите, что это и зачем. Есть аналог от гугла если надо, но мне он показался шибко сложным, я не стал возиться. Помимо этого в /etc/environment прописал LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.2 чтобы при старте приложений использовалась именно эта библиотека. Особо я не разбирался в пользе этого дела, так что если есть рекомендации по точной настройке или еще какие, будут признателен, пишите в комментах.

Второе, что я сделал это установил ядро liquorix.

curl 'https://liquorix.net/install-liquorix.sh' | sudo bash

сделано это было потому, что во-первых оно свежее, а во вторых там в отличии от родного для дроплета есть модуль zram. После установки ядра и перезагрузки дроплета

systemctl poweroff -i (чтобы все закрылось прилично) я установил zram-config

apt-get install zram-config

по умолчанию это приведет к тому, что половина оперативной памяти будет выделена (не сразу, а по мере необходимости) под сжатые страницы памяти. Это позволит расширить RAM на сервере где-то на треть, а мне как раз надо было это сделать чтобы запустить свой сервис и не платить лишнего. Помимо этого сделал дополнительный файл подкачки на диске, описано тут https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04 С меньшим приоритетом чем сжатый в памяти. Чтобы в случае чего не приходил OOMKiller прибивая все подряд, лучше пусть тормозит, никакой нагрузки все равно нет. В итоге с моими сервисами все зажило и стало стоить на 10 баксов дешевле.

В идеале я бы еще ksm включил, но к сожалению он работает только в случае если приложения явно помечают память как пригодную для дедупликации страниц, а это делают только виртуалки. Способа запустить его для обычных процессов принудительно я не нашел, во всяком случае не нашел простого и удобного, а не брошенного десять лет назад автором. Может есть еще какие то вещи чтобы как-то оптимизировать потребление памяти, если есть советы, пишите в комменте. Самое дорогое это память.

Потом полезно настроить cron правила для очистки кэша, сам Mastodon этого не умеет к сожалению. Иначе релей быстро забьет диск инстанса, там гигабайты в день. Набираем команду su - mastodon, потом crontab -e и в файл пишем

SHELL=/bin/bash
PATH=/home/mastodon/.rbenv/shims:/home/mastodon/.rbenv/bin:/usr/local/bin:/usr/bin:/bin

0 3 * * * RAILS_ENV=production /home/mastodon/live/bin/tootctl media remove --days 1
0 4 * * * RAILS_ENV=production /home/mastodon/live/bin/tootctl preview_cards remove --days 1
0 5 * * * RAILS_ENV=production /home/mastodon/live/bin/tootctl statuses remove --days 1

Следующий важный этап настройки сервера состоит в том чтобы зайти уже в веб интерфейсе, в админку и задать в разделе "администрирование"->"ретрансляторы" собственно ретранслятор. Это такой специальный сервер, который собирает посты с сотен инстансов мастодона и между ними рассылает. Для работы федиверса эти сервера не нужны особенно. Нужно это чтобы на вашем сервере пока нет у вас подписок и множества пользователей, был контент. Если вы подписались на кого-то мастодон и сам начнет собирать ленту сервера, на пользователя на котором вы подписались, но на пустом сервере где вы один ретранслятор полезная штука, он соберет ленты и пришлет вам, а уж среди лент вы найдете на кого подписаться и как-то все пойдет в рост.

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

Пришлось гуглить рестрансляторы мастодона. Но потом я понял, что можно найти сайт с статистикой по федиверсу, например этот https://the-federation.info/platform/44 потом найти на нем большие инстансы мастодона и просто зайти на релейные (ретранслятор, синоним) урлы. Там они прям списком есть. Это вообще интересный сайтик, рекомендую к изучению, список проектов на основе ActivityPub, ноды, релеи и пр. Вот например релей https://relay.mastodon.kr/inbox

Тут нужно отметить, что к урлу надо для конкретно мастодон релея приставить inbox, именно это является точкой входа для инстанса мастодона чтобы собрать ленту. На основе ActivityPub протокола есть не одна реализация серверов и другие пользуются другими точками входа.

К сожалению рестрансляторы не открыты, так что пришлось заходить на них и смотреть в описаниях кто их держит, а потом через мастододн с ними связываться и просить разрешить моему инстансу пользоваться релеем. Это понятно так как трафика много и релей не резиновый. Мне написали в первом же релее, что пока ресурсов свободных нет, но через неделю написали, что открыли доступ и я добавил релей в свой инстанс в настройках. Лента стала гораздо богаче, но к тому времени я уже нагуглил списки интересных юзеров и сам на них подписался так что лента ожила. Например список можно найти тут — Some useful Mastodon lists? или тут — Get Started on Mastodon.

Когда я в твиттер только пришел, тоже было неясно на кого тут подписаться и вообще, что происходит. В мастодоне это чувство облегчается тем, что пользователи стараются собрать любопытные аккаунты в список и опубликовать. Так полегче.

После того как с этим стало понятно я просто стал регулярно постить что-то, мне с других серверов начали отвечать, возникли подписки, жизнь как то пошла. Часть известных мне в твиттере людей переехала в мастодон, правда не поднимая свой сервер. Но терять общение в твиттере я не захотел и потому написал себе синк между твиттером и мастодоном. Он работает путем публикации твитов если я опубликую в мастодоне что-то и ответов если они в твиттере появились, но он их уже публикует в мастодоне взяв из твиттера. К сожалению Twitter заблокировал мое приложение и пока молчит почему, так что в не совсем законченном виде я опубликовал то, что есть тут https://github.com/3DRaven/mastodoit

Само приложение состоит из клиента и сервера. Сервер нужен только для того чтобы скрыть clientsecret, который мне выдал твиттер для доступа к апи. Сервер ничего важного не запоминает, можно посмотреть это в исходниках. Никакие токены на нем не хранятся. Все токены хранятся на клиенте, как собственно и большая часть коннектов делается из клиента. К сожалению полностью клиентское открытое решение сделать не вышло так как для того чтобы аутентифицировать запрос нужно обладать как токеном приложения, так и токеном пользователя. Но вы можете поднять свой сервер просто зарегистрировавшись как разработчик в твиттере и получив ключи.

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

В целом в итоге все получилось, никаких проблем, багов или прочих неприятностей я не обнаружил.

Комментарии (7)


  1. Tuxman
    02.02.2023 07:36
    +5

    Как поднять инстанс Mastodon?

    купил себе VPS на DigitalOcean. Его прелесть в том, что есть готовый образ для развертывания, с сервером. Mastodon droplet

    Не спортивно, поэтому и статья не так интересна.


    1. kpmy
      02.02.2023 08:45

      Гораздо больше азарта в процедуре обновления такого инстанса с приготовленной старой версии до актуальной.


    1. 3draven Автор
      02.02.2023 13:00

      А статья и не для спортсменов написана ;)


  1. dmitryrf
    02.02.2023 09:57
    +2

    Так что шитпостинга и неадекватов там мало.

    Ну и зачем такая сеть нужна?


  1. gleb_the_human
    02.02.2023 10:42
    +1

    Ура децентрализации!


  1. clu66er
    02.02.2023 10:57

    Справедливости ради, инстанс может быть далеко не только Мастодона:
    хоть джиры, хоть кубера, тысячи их...


  1. Nasreddin_Hodja
    03.02.2023 06:50

    Мастодон это полный аналог твиттера

    И вот это они зря. Твитероподобный интерфейс предполагает общение уровня "вбросил и забыл". Ну то есть как в чатах. Никаких долгоживущих дискуссий, одну и ту же тему могут поднимать каждый раз заново, потому что предыдущую уже не найдёшь, да и если найдёшь, твой коммент там уже никто не прочитает. И тематических разделов нет (теги не то, их добавлять ничто не обязывает, модераторы не исправляют теги у чужих постов, в результате по тегам много мусора).

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

    Контента, особенно англоязычного, в мастодоне море

    Что-то за год я там ничего интересного не нашёл. Каких-то живых тематических сообществ не встречал, а на каждого пользователя я не хочу подписываться, мне не удобно собирать в ленту все посты подряд, предпочитаю время от времени заходить по закладкам почитать, когда есть свободное время.

    Особо хочу отметить адекватность и интересность обитателей. Пока что это сеть не пораженная раком как твиттер. Так что шитпостинга и неадекватов там мало.

    Это не совсем так. 99% постов там вода как в твиттере. Ну и это не удивительно, твиттероподобный интерфейс этому способствует.

    Ну и русскоязычная часть федиверса совсем мелкая, даже пересекался с автором там ))