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. Uncategorized
  3. Перевод на русский с интеграцией хэштегов прямо в текст.

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

Scheduled Pinned Locked Moved Uncategorized
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 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
    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