Перевод на русский с интеграцией хэштегов прямо в текст.
-
Перевод на русский с интеграцией хэштегов прямо в текст.
---
# Настройка 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`, без необходимости что-то обновлять или «майнить» позже.
## Установка
1. Точный список пакетов для 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`.## Конфигурация
У меня уже установлен и настроен узел Yggdrasil. Если интересно — см. [предыдущую публикацию](https://devzone.org.ua/post/yggdrasil-mereza-z-detsentralizovanym-routynhom) или [официальную документацию](https://yggdrasil-network.github.io/documentation.html).
### Адрес подсети Yggdrasil
Этот шаг можно пропустить и использовать основной адрес `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, занимающий порт `80`. Менять это я не хочу, как и светить Snac на стандартном порту `8001`. Поэтому, имея выделенный IPv6-адрес, просто проксирую API на `80`, используя пример из [оригинальной конфигурации](https://codeberg.org/grunfink/snac2/src/branch/master/examples/nginx-alpine-ssl/default.conf

```nginx
server {
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 адреса тоже статические:
```nginx
location ~ /([^\/]+/admin|oauth) {
allow ADMIN_IP;
deny all;
try_files $uri @proxy;
}
```### Конфигурация Snac
Редактируем `/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
Открываю порт только для диапазона Yggdrasil:
```
ufw allow from 0200::/7 to any port 80
```Если не используете Nginx — указывайте реальный порт, например `8001`.
### systemd
На основе [официального примера](https://codeberg.org/grunfink/snac2/src/branch/master/examples/snac.service

```ini
[Unit]
After=network-online.target
Wants=network-online.target[Service]
User=snac
ExecStart=/usr/local/bin/snac httpd /home/snac/storage[Install]
WantedBy=multi-user.target
```## Бэкапы
Так как база — это файлы, резервное копирование тривиально. Использую `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
```## Использование
После запуска (`snac httpd /home/snac/storage` или через systemd) можно открыть
`http://[3xx:xxxx:xxxx:xxxx::fed]` в браузере.### Тест взаимодействия
Для проверки федерации разверните второй узел в Yggdrasil и попробуйте подписку или переписку через Web UI или клиент.
### Настройка браузера
При первом использовании 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 future
https://fediverse-decentralize.blogspot.com/2026/01/blog-post_10.html -
T tag-activitypub@relay.fedi.buzz shared this topic