Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

NodeBB

  1. Home
  2. World
  3. Перевод на русский с интеграцией хэштегов прямо в текст.

Перевод на русский с интеграцией хэштегов прямо в текст.

Scheduled Pinned Locked Moved World
fediverseyggdrasilselfhostingp2plinux
1 Posts 1 Posters 0 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • pureacetone@qoto.orgP This user is from outside of this forum
    pureacetone@qoto.orgP This user is from outside of this forum
    pureacetone@qoto.org
    wrote on last edited by
    #1

    Перевод на русский с интеграцией хэштегов прямо в текст.

    ---

    # Настройка 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 #LinuxAdmin

    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`.

    ## Конфигурация

    #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😞

    ```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

    #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.target
    Wants=network-online.target

    [Service]
    User=snac
    ExecStart=/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 future
    https://fediverse-decentralize.blogspot.com/2026/01/blog-post_10.html

    1 Reply Last reply
    1
    0
    • tag-activitypub@relay.fedi.buzzT tag-activitypub@relay.fedi.buzz shared this topic on

    Hello! It looks like you're interested in this conversation, but you don't have an account yet.

    Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

    With your input, this post could be even better 💗

    Register Login
    Reply
    • Reply as topic
    Log in to reply
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes


    • Login

    • Don't have an account? Register

    • Login or register to search.
    Powered by NodeBB Contributors
    • First post
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • World
    • Users
    • Groups