- PVSM.RU - https://www.pvsm.ru -

Необычные способы хостинга

Необычные способы хостинга - 1 [1]

Где разместить сайт? Оказывается, для хостинга [2] необязательно покупать VPS [2] или домашний сервер. Можно поступить более креативно: например, захостить сайт на смартфоне. Причём желательно извлечь из него аккумулятор, чтобы смартфон работал напрямую от сети. А есть ещё более оригинальный вариант: бесплатный хостинг [2] в социальных сетях.

Сайт на хостинге Bluesky

Bluesky [3] — это децентрализованная социальная сеть с 30 млн пользователей [4], альтернатива твиттеру (Х), с мостом в телеграм [5] и другими интересными фишками. Внешне выглядит примерно как твиттер, только без рекомендаций:

Необычные способы хостинга - 2

Приложение спроектировано без единого центра управления, его не может контролировать ни одна компания. Очевидно, идея появилась после того, как Илон Маск купил твиттер.

Bluesky изначально стремился использовать существующую P2P-экосистему в интернете [6]:

Необычные способы хостинга - 3

В децентрализованной сети у каждого пользователя своё приложение в своём «персональном дата-сервере» PDS (Personal Data Server) [7]. У этих хостов/контейнеров есть уникальные URL типа morel.us-east.host.bsky.network. Хосты общаются по протоколу AT Protocol [8]. Подписка на других пользователей аналогична RSS-подписке. И главное, что домены (аккаунты) пользователей обладают портативностью, то есть владелец может «уйти» в другую соцсеть, сохранив подписчиков. Портативность аккаунтов в децентрализованной сети — главная особенность AT Protocol.

Bluesky — это юридическое лицо типа Public Benefit LLC (PBLLC) [9], то есть некоммерческая корпорация, которая декларирует основной целью принесение пользы обществу [10]. Сотрудники компании являются её совладельцами.

Недавно один из пользователей Bluesky нашёл способ эксплуатировать AT Protocol не по назначению, а именно — для хостинга [2] сайтов. Вот пример сайта [11], который размещается на хостинге [2] Bluesky. Правда, он представляет собой всего лишь одну страничку с парой сотен байт текста. Но интерес представляет сам факт, что такое возможно:

Необычные способы хостинга - 4

В своём блоге автор подробно разъясняет [12], как он «хакнул» Bluesky, а точнее AT Protocol (хак был этичный, с предварительного уведомления администрации Bluesky).

▍ Хостинг произвольных блобов

Личный PDS (Personal Data Server) пользователя размещается на хостинге [2] Bluesky и работает по протоколу AT Protocol. Прямой доступ к PDS возможен через точку входа PDS Entryway [13] по уникальному адресу типа morel.us-east.host.bsky.network.

Каждый пост, который создаёт пользователь в Bluesky — это на самом деле комбинация записей [14] и блобов [15], которые он загружает в свой контейнер PDS. Блобы — это любые медиафайлы, которые туда можно загружать, они хранятся отдельно от записей. Согласно спецификации, это могут быть файлы любого формата, которым присваиваются уникальные адреса в виды контент-хеша (CID).

Типы постов определены в лексиконе [16] Bluesky (app.bsky.*), а типы записей — в лексиконе AT Protocol (com.atproto.*). Спецификация разрешает создание записей любого типа, определённого в лексиконе или подсхеме [17]. В свою очередь, блобы закачиваются на сервер заранее, помещаются во временное хранилище, но становятся доступными только после появления ссылки на блоб в записи.

Для публикации контента в PDS сначала нужно получить токен аутентификации:

curl -X POST 'https://bsky.social/xrpc/com.atproto.server.createSession' 
-H 'Content-Type: application/json' 
-d '{"identifier": "'"$BSKY_HANDLE"'", "password": "'"$BSKY_PWD"'"}'

Поле accessJWT field из ответа в дальнейшем будет использоваться как $ACCESS_JWT.

Для закачки блоба в репозиторий используется метод com-atproto-repo-upload-blob [18]. Контент сайта — это простой файл index.html.

<h1>This Website is Hosted on Bluesky</h1>

<p>
This website is just a blob uploaded to Bluesky via the API. Curious about how
this works? Check out the write-up on <a
href="https://danielmangum.com/posts/this-website-is-hosted-on-bluesky/">danielmangum.com</a>.
</p>

Для его закачки используется следующая команда:

curl -X POST 'https://bsky.social/xrpc/com.atproto.repo.uploadBlob' 
-H 'Authorization: Bearer '"$ACCESS_JWT"'' 
-H 'Content-Type: text/html' 
--data-binary '@index.html'

Ответ:

{
  "blob": {
    "$type": "blob",
    "ref": {
      "$link": "bafkreic5fmelmhqoqxfjz2siw5ey43ixwlzg5gvv2pkkz7o25ikepv4zeq"
    },
    "mimeType": "text/html",
    "size": 268
  }
}

Возвращаемый $link можно использовать в качестве идентификатора (cid [19]) для вызова блоба с помощью метода getBlob.

curl -L 'https://bsky.social/xrpc/com.atproto.sync.getBlob?did='"$DID"'&cid='"$LINK"''

Чтобы этот блоб стал доступен, на него нужно сослаться в какой-нибудь записи. Например, можно добавить в пост встроенное изображение [20], для валидации указав mimeType как image/jpeg.

В коде AT Protocol можно посмотреть, как конкретно протокол определяет ссылки на блобы в записи [21].

Важно отметить, что он поддерживает подключение новых лексиконов. Например, мы можем создать запись нового типа com.danielmangum.hack.website, включив в неё ссылку на закачанный блоб HTML:

curl -X POST 'https://bsky.social/xrpc/com.atproto.repo.createRecord' 
-H 'Authorization: Bearer '"$ACCESS_JWT"'' 
-H 'Content-Type: application/json' 
-d '{
  "repo": "danielmangum.com",
  "collection": "com.danielmangum.hack.website",
  "record": {
    "$type": "com.danielmangum.hack.website",
    "website": {
      "$type": "blob",
      "ref": {
        "$link": "bafkreic5fmelmhqoqxfjz2siw5ey43ixwlzg5gvv2pkkz7o25ikepv4zeq"
      },
      "mimeType": "text/html",
      "size": 268
    }
  }
}'

{
  "uri": "at://did:plc:j22nebhg6aek3kt2mex5ng7e/com.danielmangum.hack.website/3lbnguuzckm2u",
  "cid": "bafyreicjcptshc7lmgb7abxlvcb5fmqqjdj6neie23szyum7rcaowmm5qm",
  "commit": {
    "cid": "bafyreid6apjjy56xoyenxmg5xv356twh22n3hayecoxlf6mflpltlzpuwu",
    "rev": "3lbnguuzmd42u"
  },
  "validationStatus": "unknown"
}

И всё, после этого блоб доступен для просмотра даже неаутентифицированными пользователями, то есть кем угодно:

curl -L 'https://bsky.social/xrpc/com.atproto.sync.getBlob?did='"$DID"'&cid=bafkreic5fmelmhqoqxfjz2siw5ey43ixwlzg5gvv2pkkz7o25ikepv4zeq'

<h1>This Website is Hosted on Bluesky</h1>

<p>
This website is just a blob uploaded to Bluesky via the API. Curious about how
this works? Check out the write-up on <a
href="https://danielmangum.com/posts/this-website-is-hosted-on-bluesky/">danielmangum.com</a>.
</p>

Сайт открывается в браузере как положено. С одной стороны, AT Protocol здесь используется не по назначению. С другой стороны, в будущем его вполне могут приспособить для этой цели. Свободная и открытая платформа хостинга [2] PDS, которая включает не только личные контейнеры для социальных сетей, но и личные сайты пользователей, почему нет. То есть личные сайты и вообще произвольные бинарные файлы могут стать частью личных контейнеров PDS. Это до сих пор не разрешено исключительно из соображений безопасности [22].

Кроме того, произвольный контент можно встраивать непосредственно в посты [23]. В данном случае HTML не будет рендериться, но другое приложение может запросить его и отрендерить как положено.

Повторим, что хакер перед публикацией эксперимента уведомил администрацию Bluesky, и они были не против. Это даёт основания полагать, что данная функциональность рассматривается не столько как баг, а скорее как фича [24].

Домашний сервер на телефоне Android

Современные телефоны с гигабайтами оперативки и сотнями гигабайт флеш-памяти отлично подходят для хостинга [2] сайтов, тем более что многие смартфоны работают в режиме постоянного соединения с интернетом. Однако стоковая версия Android почему-то не разрешает такую функциональность. Но это можно исправить, если установить на телефон Linux и контейнеры Docker, с которыми распространяется практически любое ПО. Отличная альтернатива Raspberri Pi и хороший способ утилизировать старые телефоны.

В этом руководстве [25] разъясняется, как установить postmarketOS (дистрибутив Linux на базе Alpine) на смартфон. Руководство актуально для совместимых моделей [26]. На персональном компьютере должны присутствовать Fastboot [27] (скачать в составе SDK) и файлы boot и img для PostmarketOS. На смартфоне требуется предварительно включить режим разработчика (Developer Mode) и USB-отладку (USB Debugging).

Необычные способы хостинга - 5

Файлы boot и img от PostmarketOS скачиваем для конкретной модели смартфона [26].

Потом действуем согласно пошаговой инструкции [25]:

  1. Войти в режим Fastboot
  2. Записать PostmarketOS на телефон в соответствии с инструкциями для конкретной модели телефона
  3. После перезагрузки ввести дефолтный пинкод 147147
  4. Открыть консоль на смартфоне и ввести следующие команды:
    sudo apk update

    sudo service sshd start

    sudo rc-update add sshd

    Необычные способы хостинга - 6

  5. Подключиться к телефону с компьютера по SSH:
    ssh user@IP_Address_of_the_phone

  6. Установить Docker на телефон:
    sudo apk add docker

    sudo service docker start

    sudo rc-update add docker default

  7. Можно установить Portainer [28] для управления контейнерами:
    sudo docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest

  8. Запустить докер-контейнеры с необходимым софтом, в том числе для сервера

Затем можно подключиться к сервису Portainer на телефоне с компьютерного браузера по адресу и порту IP_телефона:9443. С компьютера удобно управлять контейнерами на смартфоне:

Необычные способы хостинга - 7

Вторая часть [29] руководства посвящена тому, как извлечь аккумулятор, чтобы смартфон работал напрямую от электрической сети. Дело в том, что встроенный аккумулятор не даёт телефону работать от сети, а вместо этого непрерывно заряжается и разряжается сам. Это представляет опасность, потому что аккумулятор нагревается и может вздуться, тем более у него ограниченный ресурс на количество циклов заряда/разряда. В общем, его лучше извлечь.

Необычные способы хостинга - 8

Смартфон без аккумулятора питается от сети через модифицированный кабель USB-C, который обманывает встроенную систему управления питанием. Если аккумулятор удалён, то в таком режиме смартфон может работать практически вечно.

Несколько шагов по удалению аккумулятора и переделке контура энергопитания:

  1. Аккуратно извлечь аккумулятор, не повредив микросхему Battery Management System (BMS), к которой он подключён

    Необычные способы хостинга - 9

  2. Спаять простую цепь с диодом MUR460 и кабелем USB-C

    Необычные способы хостинга - 10
    Необычные способы хостинга - 11

  3. Подключить цепь к телефону, вставить кабель USB-C в разъём. Если всё работает нормально, можно залить конструкцию клеем для надёжности

    Необычные способы хостинга - 12

  4. Установить серверный софт. В докер-контейнерах можно поставить что угодно: веб-сервер, торрент-клиент для скачивания файлов, медиасервер для раздачи файлов на домашние устройства, персональное облако для резервного копирования и прочих нужд (вроде Nextcloud)

    Необычные способы хостинга - 13

Некоторые меры предосторожности и правила безопасности:

  1. Перед операцией полностью разрядить аккумулятор для минимизации рисков
  2. Аккуратно обращаться с ним, избегая проколов или других повреждений
  3. Начинать операцию только при полной уверенности в своих силах, а также при наличии профессиональных инструментов

Хостинг [2] сайтов на смартфоне удобен, но не лишён недостатков. К сожалению, у большинства смартфонов отсутствует порт Ethernet, так что приходится работать по WiFi, что снижает надёжность и привносит лишнюю задержку в передачу пакетов. Отсутствует нативная поддержка внешних накопителей SSD, HDD и NAS, так что их приходится подключать через ненадёжные USB-переходники.

Но это всё равно отличный способ использовать старые телефоны вместо того, чтобы их выбрасывать.

© 2025 ООО «МТ ФИНАНС»

Автор: programmerguru

Источник [30]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ssh/412483

Ссылки в тексте:

[1] Image: https://habr.com/ru/companies/ruvds/articles/887446/

[2] хостинга: https://www.reg.ru/?rlink=reflink-717

[3] Bluesky: https://bsky.app/

[4] 30 млн пользователей: https://bsky.app/profile/bsky.app/post/3lgu4lg6j2k2v

[5] мостом в телеграм: https://mastogr.am/

[6] P2P-экосистему в интернете: https://gitlab.com/bluesky-community1/decentralized-ecosystem/-/blob/master/README.md

[7] PDS (Personal Data Server): https://atproto.com/guides/glossary#pds-personal-data-server

[8] AT Protocol: https://atproto.com/

[9] Public Benefit LLC (PBLLC): https://bsky.social/about/blog/2-7-2022-overview

[10] декларирует основной целью принесение пользы обществу: https://habr.com/ru/companies/ruvds/articles/865310/

[11] Вот пример сайта: https://porcini.us-east.host.bsky.network/xrpc/com.atproto.sync.getBlob?did=did:plc:j22nebhg6aek3kt2mex5ng7e&cid=bafkreic5fmelmhqoqxfjz2siw5ey43ixwlzg5gvv2pkkz7o25ikepv4zeq

[12] разъясняет: https://danielmangum.com/posts/this-website-is-hosted-on-bluesky/

[13] PDS Entryway: https://docs.bsky.app/docs/advanced-guides/entryway

[14] записей: https://atproto.com/guides/glossary#record

[15] блобов: https://atproto.com/specs/blob

[16] лексиконе: https://atproto.com/specs/lexicon

[17] подсхеме: https://docs.bsky.app/docs/advanced-guides/custom-schemas#sub-schemas

[18] com-atproto-repo-upload-blob: https://docs.bsky.app/docs/api/com-atproto-repo-upload-blob

[19] cid: https://atproto.com/guides/glossary#cid-content-id

[20] встроенное изображение: https://docs.bsky.app/docs/advanced-guides/posts#images-embeds

[21] определяет ссылки на блобы в записи: https://github.com/bluesky-social/atproto/blob/b5c6bce9703faa7a8eb7f629d34f173116cb37b8/packages/lexicon/src/blob-refs.ts#L26

[22] из соображений безопасности: https://atproto.com/specs/blob#security-considerations

[23] встраивать непосредственно в посты: https://bsky.app/profile/danielmangum.com/post/3lbpfxwnjoq23

[24] скорее как фича: https://github.com/bluesky-social/atproto/issues/523

[25] этом руководстве: https://crackoverflow.com/docs/system_administration/containerization/install-docker-natively-on-android-phone-and-use-it-as-a-home-server/

[26] совместимых моделей: https://postmarketos.org/install/

[27] Fastboot: https://android.googlesource.com/platform/system/core/+/master/fastboot/#fastboot

[28] Portainer: https://www.portainer.io/

[29] Вторая часть: https://crackoverflow.com/docs/system_administration/containerization/turn_android_phone_to_batteryless_home_server/

[30] Источник: https://habr.com/ru/companies/ruvds/articles/887446/?utm_source=habrahabr&utm_medium=rss&utm_campaign=887446