Title: Snac. Или как я соскучился по твиттеру (нынешнему Икс)
Author: Viva Calman
Date: 2026-04-26 13:58:14
Correction code: 177720110511203

screen.png

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

Но все меняется, твиттер сначала начал закручивать гайки сам, потом начали закручивать гайки снаружи, затруднив доступ к нему, ну а дальше он превратился в X, и, хоть суть его не слишком поменялась, атмосфера (и люди) стали уже не те. Я и сам стал другим, так что в твиттер я если сейчас и захожу, то только в очень помутненном состоянии сознания.

Ладно, это лирика. Должен признаться, я довольно сильно скучал по формату микроблога. Не по большим заметкам, как здесь, а просто по коротким записям с парой фоточек, мемов и тому подобному. Большие заметки требуют напряжения и времени. Их нужно обдумывать, их нужно писать. Они должны быть достаточно емкими на содержание, чтобы не лить воду ради объема (в конце концов, я не SEO-шник, который делает лонгрид из новости в два предложения). А иногда ведь хочется просто запостить мем с комментарием, или шутку в три слова.

На волне этой тоски, я завел себе пару телеграм-каналов (ссылки на них висят в MOTD наверху главной), и веду их уже довольно давно, делая примерно то же, что я делал в твиттере. Но все же, удовлетворения от них, как было от написания шитпоста в твиттер, у меня нет. Да и сами телеграм-каналы ограничены телеграмом, что не слишком мне по душе: меня раздражают такие закрытые "экосистемы", из которых невозможно вырваться. Да, да, я знаю, что в таких системах обычно и собираются просмотры, потому что люди заперты и смотрят то, что им выпало в клиенте (если они, конечно же, подписались), но идеологически мне это не по душе.

Так что, с определенного момента я начал смотреть на fediverse и его activitypub-решения. Кто не знает, fediverse - это содружество социальных платформ, которые используют упомянутый activitypub для того, чтобы общаться между собой, но при этом оставаться децентрализованными. Проще говоря, ты можешь поднять у себя инстанс мастодона, и твои сообщения смогут репостить в другие инстансы, в том числе и не только те, которые используют мастодон. Главная фишка всего этого - self-hosted философия и децентрализованность, которая позволяет инстансам жить независимо.

Решений много. Есть аналог реддита, который называется Lemmy. Есть аналог твиттера, всем известный Mastodon. Есть fediverse-аналог инстаграмма, под названием Pixelfed, есть соцсеточки типа Diaspora. Но, по моим ощущениям, в основном доминируют микроблоггинговые платформы. Pleroma, Akkoma, GoToSocial - нет им числа. Так как именно это направление меня и интересовало больше всего, я начал поиски того, что же мне подойдет.

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

Сначала я целился на GoToSocial. Штука очень легкая, простая, один бинарник на Go, легко контейнеризуется. В общем, все бы хорошо, да только слишком уж активная идеология у разработчиков. Я ничего не имею против их взглядов, но я не хочу, чтобы мой личный инстанс был витриной для их самовыражения. Извините, ребят.

Поэтому, следующим, что я попробовал собрать, оказались Pleroma и ее форк Akkoma. Они написаны на Elixir, но, тут победила моя лень — я не нашел подходящих образов докера, чтобы это запустить, а собирать самому было таааак лень, что в итоге я сдался. Софт, наверное, хороший, но больно хлопотно его ставить. Да, признаюсь, старею, хочется поменьше двигаться.

И тут мне на глаза попался Snac. Это еще более минималистичная реализация activitypub, чем GoToSocial, написана на сишечке и, внезапно, она есть в репозиториях Alpine linux, что позволило мне очень легко собрать образ и запустить его. По сути, все, что нужно, это просто поставить пакет.

у меня получился такой Dockerfile:

# Dockerfile
FROM alpine:3.23
RUN apk update && apk add --no-cache snac
WORKDIR /data
EXPOSE 8001
CMD ["snac", "httpd", "/data/data"]

и вот такой docker-compose.yml

#docker-compose,yml
services:
snac:
    image: localhost/snac:alpine
    ports:
    - XXX:8001
    volumes:
    - /path/to/your/data:/data:z,U
restart: unless-stopped

Никакой мистики. Кстати, вместо докера я решил использовать podman, что конечно иногда вызывает проблемы, но в теории, дает больше безопасности и контроля, чем оригинальный docker. Про это я еще отдельную заметку напишу попозже, как и про машину, где это все запускается.

Один нюанс. Перед тем, как все это запускать, нужно проинициализировать инстанс snac. Я поступил просто:

docker compose run snac sh

И в консоли выполнил

snac init /data

а также добавил своего пользователя. Все команды можно увидеть, запустив snac без аргументов. Важное замечание — для авторизации snac использует basic-авторизацию, то есть, никаких короткоживущих токенов или чего-то подобного. Все, как тридцать лет назад. И так как заголовок basic-авторизации не шифруется, то наличие https становится обязательным.

После запуска контейнера и небольшой настройки nginx я получил свой инстанс: shitpost.viva-calman.net/calman. Для красоты я навернул на него скачанную из интернета CSS-ку, в которой, для удобства чтения, сделал шрифт покрупнее.

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

Само собой, не обошлось без мыслей "а что можно сделать лучше?". После первых опытов, мне захотелось сделать отдельный скрипт, который будет жать картинки на диске — сейчас snac просто грузит их, как есть, но я не вижу смысла хранить их в полном разрешении: у меня нет ничего, что требовало бы рассматривания в десятках мегапикселей, а отдавать мегабайты на диске просто так мне жалко. Мысли о том, как это реализовать, уже имеются, как сделаю, напишу в отдельной заметке.

^HOME