Skip to content
  • 0 Votes
    1 Posts
    0 Views
    pureacetone@qoto.orgP
    Перевод на русский с интеграцией хэштегов прямо в текст.---# Настройка Fedi-сервера Snac для сети Yggdrasil | DevZone#Fediverse #Yggdrasil #SelfHosting #P2P #LinuxВремя чтения: 15 минут11 маяВскоре после моих [размышлений о p2p](https://devzone.org.ua/post/hrabli-p2p) я решил попробовать развернуть собственный экспериментальный инстанс #Fediverse. Причём сделать это средствами оверлейной сети #Yggdrasil, так как я не планирую покупать выделенный IP или VPS для этой игрушки; вместо этого сервер будет хоститься за модемом — на одноплатнике или даже на ПК, когда я в сети, с динамическим адресом за NAT.Эта заметка в первую очередь написана для себя, но может быть полезна тем, кто, как и я, только начинает эксперименты с администрированием собственного узла Fediverse и интересуется альтернативными сетями в контексте #Linux.## Что такое Snac#Snac #ActivityPub #Minimalism[Snac](https://codeberg.org/grunfink/snac2) — это минималистичная альтернатива серверу #Mastodon, написанная на C, без JavaScript и без необходимости установки PostgreSQL. Все данные профилей хранятся в JSON-файлах. Недавно в сервер была добавлена [поддержка IPv6](https://codeberg.org/grunfink/snac2/pulls/256), поэтому он корректно работает и с диапазоном Yggdrasil `0200::/7`.Поскольку Yggdrasil позволяет бесплатно генерировать неограниченное количество статических IP (на основе приватного ключа #Ed25519), в DNS здесь обычно нет необходимости. Опционально можно прикрутить #Alfis, но лично я этого не делаю (в том числе из-за до сих пор нерешённой проблемы #364), поэтому и не навязываю его в рамках протокола ActivityPub — формат будет просто `username@IPv6`, без необходимости что-то обновлять или «майнить» позже.## Установка#BuildFromSource #LinuxAdmin1. Точный список пакетов для Debian я не знаю — система не новая и многое уже установлено. Согласно [README](https://codeberg.org/grunfink/snac2#building-and-installation), мне понадобились только `libssl-dev` и `libcurl4-openssl-dev` (в Fedora — примерно то же самое, но с суффиксом `-devel`).2. Создаём отдельного системного пользователя для изоляции от потенциальных уязвимостей: ``` useradd -m snac ```3. Для удобства меняем shell на bash в `/etc/passwd`.4. Логинимся `su snac` и переходим в домашний каталог: `cd`.5. Качаем исходники: `git clone https://codeberg.org/grunfink/snac2.git`6. Переходим в каталог проекта: `cd snac2`.7. Компилируем и устанавливаем: `make && sudo make install`.8. Инициализируем хранилище сервера: `snac init /home/snac/storage`.9. Добавляем первого пользователя: `snac adduser /home/snac/storage`.10. Выходим обратно под root: `exit`.## Конфигурация#Networking #YggdrasilУ меня уже установлен и настроен узел Yggdrasil. Если интересно — см. [предыдущую публикацию](https://devzone.org.ua/post/yggdrasil-mereza-z-detsentralizovanym-routynhom) или [официальную документацию](https://yggdrasil-network.github.io/documentation.html).### Адрес подсети Yggdrasil#IPv6Этот шаг можно пропустить и использовать основной адрес `2*`, если порты `80` или `8001` свободны. Но важно понимать: в API ActivityPub сервер Snac сообщает свой адрес другим узлам, и те кэшируют его как часть ID. Поскольку адрес хранится в файлах, а не в БД, заменить его потом будет сложно. Поэтому лучше сразу выделить отдельный адрес, особенно для продакшена.1. `yggdrasilctl getself` — узнаём свой IP и диапазон IPv6.2. `ifconfig lo inet6 add IP` — вместо IP указываем произвольный адрес из полученного диапазона, например `3xx:xxxx:xxxx:xxxx::fed/64`.️ Данные, добавленные через `ifconfig`, не сохраняются после перезагрузки. Команду нужно прописать, например, в `/etc/netplan/01-ygglo.yaml`, `/etc/network/interfaces` или в `systemd`-сервис `yggdrasil.service` (через `ExecStartPost=`).### Nginx-прокси#Nginx #ReverseProxyНа сервере уже установлен Nginx, занимающий порт `80`. Менять это я не хочу, как и светить Snac на стандартном порту `8001`. Поэтому, имея выделенный IPv6-адрес, просто проксирую API на `80`, используя пример из [оригинальной конфигурации](https://codeberg.org/grunfink/snac2/src/branch/master/examples/nginx-alpine-ssl/default.conf```nginxserver { listen [3xx:xxxx:xxxx:xxxx::fed]:80; server_name 3xx:xxxx:xxxx:xxxx::fed; location @proxy { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_redirect off; proxy_pass http://[3xx:xxxx:xxxx:xxxx::fed]:8001; } location /.well-known/webfinger { try_files $uri @proxy; } location /.well-known/nodeinfo { try_files $uri @proxy; } location / { try_files $uri @proxy; } location /fedi/ { try_files $uri @proxy; }}```SSL здесь намеренно отсутствует: #Yggdrasil уже обеспечивает защищённый канал, и дополнительный слой не нужен.Административный API (`admin` и `oauth`) я ограничил по IP, поскольку у клиентов Yggdrasil адреса тоже статические:```nginxlocation ~ /([^\/]+/admin|oauth) { allow ADMIN_IP; deny all; try_files $uri @proxy;}```### Конфигурация Snac#JSON #ConfigРедактируем `/home/snac/storage/server.json`, созданный командой `snac init`:```json{ "host": "[3xx:xxxx:xxxx:xxxx::fed]", "address": "3xx:xxxx:xxxx:xxxx::fed", "port": 8001, "protocol": "http"}```В моём случае протокол намеренно `http`.### Доступ через iptables / ufw#FirewallОткрываю порт только для диапазона Yggdrasil:```ufw allow from 0200::/7 to any port 80```Если не используете Nginx — указывайте реальный порт, например `8001`.### systemd#SystemdНа основе [официального примера](https://codeberg.org/grunfink/snac2/src/branch/master/examples/snac.service```ini[Unit]After=network-online.targetWants=network-online.target[Service]User=snacExecStart=/usr/local/bin/snac httpd /home/snac/storage[Install]WantedBy=multi-user.target```## Бэкапы#Backup #RsyncТак как база — это файлы, резервное копирование тривиально. Использую `rsync` через `crontab -e`:```@daily rsync -av --delete /home/snac/storage /path/to/snac/daily@weekly rsync -av --delete /home/snac/storage /path/to/snac/weekly@monthly rsync -av --delete /home/snac/storage /path/to/snac/monthly```## Использование#FediverseAdminПосле запуска (`snac httpd /home/snac/storage` или через systemd) можно открыть`http://[3xx:xxxx:xxxx:xxxx::fed]` в браузере.### Тест взаимодействия#ActivityPubДля проверки федерации разверните второй узел в Yggdrasil и попробуйте подписку или переписку через Web UI или клиент.### Настройка браузера#Firefox #IPv6При первом использовании Yggdrasil-сайтов в Firefox может понадобиться изменить параметры в `about:config`:* `browser.fixup.fallback-to-https = false`* `browser.fixup.alternate.enabled = false`---#Fediverse #YggdrasilNetwork #Decentralization #AltNet #SelfHosted Fediverse - the social network of the futurehttps://fediverse-decentralize.blogspot.com/2026/01/blog-post_10.html