<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Yuriy Gavrilov: posts tagged s3</title>
<link>https://gavrilov.info/tags/s3/</link>
<description>Welcome to my personal place for love, peace and happiness 🤖 Yuiry Gavrilov</description>
<author></author>
<language>en</language>
<generator>Aegea 11.4 (v4171e)</generator>

<itunes:owner>
<itunes:name></itunes:name>
<itunes:email>yvgavrilov@gmail.com</itunes:email>
</itunes:owner>
<itunes:subtitle>Welcome to my personal place for love, peace and happiness 🤖 Yuiry Gavrilov</itunes:subtitle>
<itunes:image href="https://gavrilov.info/pictures/userpic/userpic-square@2x.jpg?1643451008" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Сравнительный анализ self-hosted S3-совместимых хранилищ</title>
<guid isPermaLink="false">299</guid>
<link>https://gavrilov.info/all/sravnitelny-analiz-self-hosted-s3-sovmestimyh-hranilisch/</link>
<pubDate>Mon, 08 Dec 2025 00:50:17 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/sravnitelny-analiz-self-hosted-s3-sovmestimyh-hranilisch/</comments>
<description>
&lt;p&gt;Четкое сравнение семи self-hosted S3-совместимых решений для хранения данных.&lt;/p&gt;
&lt;p&gt;Оригинал тут: &lt;a href="https://www.repoflow.io/blog/benchmarking-self-hosted-s3-compatible-storage-a-practical-performance-comparison"&gt;Команда RepoFlow. 9 августа 2025 г.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Локальное (self-hosted) объектное хранилище — это отличный выбор для разработчиков и команд, которые хотят иметь полный контроль над хранением и доступом к своим данным. Независимо от того, заменяете ли вы Amazon S3, размещаете внутренние файлы, создаете CI-конвейер или обслуживаете репозитории пакетов, уровень хранения может значительно повлиять на скорость и стабильность.&lt;/p&gt;
&lt;p&gt;Мы протестировали семь популярных решений для объектного хранения, поддерживающих протокол S3. Цель состояла в том, чтобы сравнить их производительность в идентичных условиях, используя реальные операции загрузки и скачивания.&lt;/p&gt;
&lt;h3&gt;Тестируемые решения&lt;/h3&gt;
&lt;p&gt;Каждое из следующих решений было развернуто с помощью Docker на одном и том же сервере без монтирования томов и без специальной настройки:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;`MinIO`&lt;/li&gt;
&lt;li&gt;`Ceph`&lt;/li&gt;
&lt;li&gt;`SeaweedFS`&lt;/li&gt;
&lt;li&gt;`Garage`&lt;/li&gt;
&lt;li&gt;`Zenko` (Scality Cloudserver)&lt;/li&gt;
&lt;li&gt;`LocalStack`&lt;/li&gt;
&lt;li&gt;`RustFS`&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;Скорость последовательного скачивания&lt;/h3&gt;
&lt;p&gt;Средняя скорость скачивания одного файла разного размера.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.42.26.png" width="1270" height="656" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости последовательного скачивания для малых файлов размером 50 КБ и 200 КБ. По оси Y — скорость в МБ/с, по оси X — размер файла. Сравниваются Garage, Localstack, Minio, Zenko, Ceph, RustFS, SeaweedFS.]&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.42.57.png" width="1264" height="650" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости последовательного скачивания для больших файлов размером 10 МБ, 50 МБ, 100 МБ и 1 ГБ. По оси Y — скорость в МБ/с, по оси X — размер файла. Сравниваются те же решения.]&lt;/p&gt;
&lt;h3&gt;Скорость последовательной загрузки&lt;/h3&gt;
&lt;p&gt;Средняя скорость загрузки одного файла разного размера.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.43.18.png" width="1278" height="648" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости последовательной загрузки для малых файлов размером 50 КБ и 200 КБ. По оси Y — скорость в МБ/с, по оси X — размер файла. Сравниваются те же решения.]&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.43.34.png" width="1252" height="636" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости последовательной загрузки для больших файлов размером 10 МБ, 50 МБ, 100 МБ и 1 ГБ. По оси Y — скорость в МБ/с, по оси X — размер файла. Сравниваются те же решения.]&lt;/p&gt;
&lt;h3&gt;Производительность листинга&lt;/h3&gt;
&lt;p&gt;Измеряет время, необходимое для получения списка всех 2000 тестовых объектов в бакете с использованием разных размеров страницы (100, 500 и 1000 результатов на запрос).&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.44.02.png" width="1280" height="648" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График производительности листинга. По оси Y — время в мс, по оси X — количество результатов на страницу (100, 500, 1000). Сравниваются те же решения.]&lt;/p&gt;
&lt;h3&gt;Скорость параллельной загрузки&lt;/h3&gt;
&lt;p&gt;Измеряет время, необходимое для параллельной загрузки нескольких файлов одинакового размера. Скорость загрузки рассчитывается по формуле:&lt;/p&gt;
&lt;p&gt;(number of files × file size) ÷ total time&lt;/p&gt;
&lt;h4&gt;Скорость параллельной загрузки – файлы 1 МБ&lt;/h4&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.44.22.png" width="1304" height="748" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости параллельной загрузки файлов размером 1 МБ. По оси Y — скорость в МБ/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]&lt;/p&gt;
&lt;h4&gt;Скорость параллельной загрузки – файлы 10 МБ&lt;/h4&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.45.06.png" width="1254" height="650" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости параллельной загрузки файлов размером 10 МБ. По оси Y — скорость в МБ/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]&lt;/p&gt;
&lt;h4&gt;Скорость параллельной загрузки – файлы 100 МБ&lt;/h4&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.45.23.png" width="1278" height="652" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости параллельной загрузки файлов размером 100 МБ. По оси Y — скорость в МБ/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]&lt;/p&gt;
&lt;h3&gt;Скорость параллельного скачивания&lt;/h3&gt;
&lt;p&gt;Измеряет время, необходимое для параллельного скачивания нескольких файлов одинакового размера. Скорость скачивания рассчитывается по формуле:&lt;/p&gt;
&lt;p&gt;(number of files × file size) ÷ total time&lt;/p&gt;
&lt;h4&gt;Скорость параллельного скачивания – файлы 1 МБ&lt;/h4&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.45.45.png" width="1278" height="650" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости параллельного скачивания файлов размером 1 МБ. По оси Y — скорость в МБ/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]&lt;/p&gt;
&lt;h4&gt;Скорость параллельного скачивания – файлы 10 МБ&lt;/h4&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.46.02.png" width="1280" height="644" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости параллельного скачивания файлов размером 10 МБ. По оси Y — скорость в МБ/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]&lt;/p&gt;
&lt;h4&gt;Скорость параллельного скачивания – файлы 100 МБ&lt;/h4&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2025-12-08-v-00.46.17.png" width="1284" height="670" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;[Изображение: График скорости параллельного скачивания файлов размером 100 МБ. По оси Y — скорость в МБ/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]&lt;/p&gt;
&lt;h3&gt;Как проводились тесты&lt;/h3&gt;
&lt;p&gt;Для каждого решения мы:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Загружали и скачивали файлы 7 различных размеров: 50 КБ, 200 КБ, 1 МБ, 10 МБ, 50 МБ, 100 МБ и 1 ГБ.&lt;/li&gt;
&lt;li&gt;Повторяли каждую загрузку и скачивание 20 раз для получения стабильных средних значений.&lt;/li&gt;
&lt;li&gt;Измеряли среднюю скорость загрузки и скачивания в мегабайтах в секунду (МБ/с).&lt;/li&gt;
&lt;li&gt;Выполняли все тесты на одной и той же машине, используя стандартный Docker-контейнер для каждой системы хранения, без внешних томов, монтирования или кешей.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Все решения тестировались в одноузловой конфигурации для обеспечения согласованности. Хотя некоторые системы (например, `Ceph`) спроектированы для лучшей производительности в кластерной среде, мы использовали одинаковые условия для всех решений, чтобы гарантировать справедливое сравнение.&lt;/p&gt;
&lt;h3&gt;Заключительные мысли&lt;/h3&gt;
&lt;p&gt;Эти результаты показывают, как каждое решение вело себя в нашей конкретной тестовой среде с одним узлом. Их следует рассматривать как относительное сравнение соотношений производительности, а не как абсолютные жесткие значения, которые будут применимы в любой конфигурации.&lt;/p&gt;
&lt;p&gt;При выборе подходящего решения для хранения данных учитывайте типичные размеры файлов, которые вы будете хранить, поскольку одни системы лучше справляются с маленькими файлами, а другие преуспевают с большими. Также подумайте об основных возможностях, которые вам требуются, таких как масштабируемость, репликация, долговечность или встроенный графический интерфейс. Наконец, помните, что производительность может сильно отличаться между одноузловыми и многоузловыми кластерами.&lt;/p&gt;
&lt;p&gt;Наши тесты предоставляют базовый уровень для понимания того, как эти системы соотносятся в идентичных условиях, но ваша реальная производительность будет зависеть от вашего конкретного оборудования, рабочей нагрузки и конфигурации.&lt;/p&gt;
</description>
</item>

<item>
<title>Storj купил cunoFS</title>
<guid isPermaLink="false">172</guid>
<link>https://gavrilov.info/all/storj-kupil-cunofs/</link>
<pubDate>Sat, 12 Oct 2024 15:56:14 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/storj-kupil-cunofs/</comments>
<description>
&lt;p&gt;Getting started with cunoFS#&lt;br /&gt;
cunoFS is a scalable, high-performance POSIX compatibility layer that lets you interact with files stored on object storage such as Amazon S3, Azure Blob Storage, Google Cloud Storage, or any S3-compatible object store hosted in the cloud or locally.&lt;/p&gt;
&lt;p&gt;Интересно, теперь наверное встроить в себя или новое что то придумает.&lt;/p&gt;
</description>
</item>

<item>
<title>Запускаем Garage S3 в Docker</title>
<guid isPermaLink="false">91</guid>
<link>https://gavrilov.info/all/zapuskaem-garage-s3-v-docker/</link>
<pubDate>Sat, 09 Dec 2023 23:25:46 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/zapuskaem-garage-s3-v-docker/</comments>
<description>
&lt;p&gt;Создаем проект, просто папку, где все будем хранить:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;mkdir garage
cd garage&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Создаем файл настроек томл:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;nano  garage.toml&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Пишем туда этот текст:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;metadata_dir = &amp;quot;/var/lib/garage/meta&amp;quot;
data_dir = &amp;quot;/var/lib/garage/data&amp;quot;
db_engine = &amp;quot;lmdb&amp;quot;

replication_mode = &amp;quot;none&amp;quot;

rpc_bind_addr = &amp;quot;[::]:3901&amp;quot;
rpc_public_addr = &amp;quot;127.0.0.1:3901&amp;quot;
rpc_secret = &amp;quot;3e59650cc67421460a80eafc4d45611ebb63a214296d8f32f51135041ff514f5&amp;quot;

[s3_api]
s3_region = &amp;quot;garage&amp;quot;
api_bind_addr = &amp;quot;[::]:3900&amp;quot;
root_domain = &amp;quot;localhost&amp;quot;

[s3_web]
bind_addr = &amp;quot;[::]:3902&amp;quot;
root_domain = &amp;quot;localhost&amp;quot;
index = &amp;quot;index.html&amp;quot;

[k2v_api]
api_bind_addr = &amp;quot;[::]:3904&amp;quot;

[admin]
api_bind_addr = &amp;quot;0.0.0.0:3903&amp;quot;
admin_token = &amp;quot;472070e320469b2f048f77dcad4149e0c608ef01ecf0ac863c416287a1127a9e&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Далее создаем папку для хранения метаданных и самих данных:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;mkdir meta
mkdir data&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Теперь запускаем docker:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;docker run \
  -d \
  --name garaged \
  --restart always \
  -p 3900:3900 -p 3901:3901 -p 3902:3902 -p 3903:3903 -p 3904:3904 \
  -v ./garage.toml:/etc/garage.toml \
  -v ./meta:/var/lib/garage/meta \
  -v ./data:/var/lib/garage/data \
  dxflrs/garage:v0.9.0&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Проверяем, что все хорошо:&lt;/p&gt;
&lt;p&gt;Для удобства зарегистрируем alias так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;alias garage=&amp;quot;docker exec -ti garaged /garage&amp;quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Теперь можно запускать команды быстрее.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;garage status
==== HEALTHY NODES ====
ID                Hostname      Address         Tags              Zone  Capacity  DataAvail
851017ec5989840f  e3428f26541f  127.0.0.1:3901  NO ROLE ASSIGNED&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Добавим роль:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;garage layout assign -z dc1 -c 1G 851017ec5989840f
Role changes are staged but not yet commited.
Use `garage layout show` to view staged role changes,
and `garage layout apply` to enact staged changes.&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Применим роль:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;garage layout apply --version 1 

==== COMPUTATION OF A NEW PARTITION ASSIGNATION ====

Partitions are replicated 1 times on at least 1 distinct zones.

Optimal partition size:                     3.9 MB
Usable capacity / total cluster capacity:   1000.0 MB / 1000.0 MB (100.0 %)
Effective capacity (replication factor 1):  1000.0 MB

dc1                 Tags  Partitions        Capacity   Usable capacity
  851017ec5989840f        256 (256 new)     1000.0 MB  1000.0 MB (100.0%)
  TOTAL                   256 (256 unique)  1000.0 MB  1000.0 MB (100.0%)


New cluster layout with updated role assignment has been applied in cluster.
Data will now be moved around between nodes accordingly.&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Можно создавать бакет:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;garage bucket create gavrilov 

Bucket gavrilov was created.&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Генерируем ключи:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;garage key create gavrilov-key

Key name: gavrilov-key
Key ID: GK6d2fd5f2bb22374c2b626fb2
Secret key: 5118548e77dcd660705662f18742e4d9f0cd5d37409c2e3bfa53a50f00e33886
Can create buckets: false

Key-specific bucket aliases:

Authorized buckets:&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Добавляем доступ ключей в бакет:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;garage bucket allow \                             
  --read \
  --write \
  --owner \
  gavrilov \
  --key gavrilov-key

New permissions for GK6d2fd5f2bb22374c2b626fb2 on gavrilov: read true, write true, owner true.&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;И последний штрих доступ через web:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;garage bucket website gavrilov --allow

Website access allowed for gavrilov&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Теперь можно настроить доступ s3 клиента и что то положить в бакет:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;mc alias set garage http://localhost:3900 GK6d2fd5f2bb22374c2b626fb2 5118548e77dcd660705662f18742e4d9f0cd5d37409c2e3bfa53a50f00e33886

echo &amp;quot;hello world from s3&amp;quot; | mc pipe garage/gavrilov/index.html&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Открываем браузер и смотрим файлик: &lt;a href="http://gavrilov.localhost:3902/"&gt;http://gavrilov.localhost:3902/&lt;/a&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2023-12-09-v-23.20.24.png" width="1896" height="416" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;ps: На официальном сайте docker запускают с аргументом&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;--network host&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;, но у меня почему-то  так не работало. Порты закрыты были все. Потом разберусь ¯\_(ツ)_/¯ .&lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;Кстати есть уже альфа rustfs &lt;a href="https://github.com/rustfs/rustfs"&gt;https://github.com/rustfs/rustfs&lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>S3 Storage</title>
<guid isPermaLink="false">90</guid>
<link>https://gavrilov.info/all/s3-storage/</link>
<pubDate>Sat, 09 Dec 2023 19:08:32 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/s3-storage/</comments>
<description>
&lt;ol start="1"&gt;
&lt;li&gt;Garage – Французский опенсорс для домашнего использования и небольшой нагрузки. Но написан на Rust&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="https://garagehq.deuxfleurs.fr"&gt;garagehq.deuxfleurs&lt;/a&gt; Тут можно почитать, как утверждают разраотчики, то это можно напускать даже на тостере :), в прочем они скорее всего правы, учитывая язык разработки.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2023-12-09-v-18.17.11.png" width="1934" height="1496" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;a href="https://crates.io/crates/garage"&gt;https://crates.io/crates/garage&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;SeaweedFS – А этот написан на Go. Вот, что они про себя пишут: быстрая распределенная система хранения больших двоичных объектов, файлов и озер данных для миллиардов файлов! Хранилище BLOB-объектов имеет поиск на диске O(1) и многоуровневое облако. Filer поддерживает Cloud Drive, активно-активную репликацию между DC, Kubernetes, монтирование POSIX FUSE, S3 API, S3 Gateway, Hadoop, WebDAV, шифрование, Erasure Coding. Есть хорошее сравнение с другими решениями тут: &lt;a href="https://github.com/seaweedfs/seaweedfs#compared-to-other-file-systems."&gt;https://github.com/seaweedfs/seaweedfs#compared-to-other-file-systems.&lt;/a&gt; И есть статья на Медиуме&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="https://a.gavrilov.info/data/posts/Seaweedfs%20Distributed%20Storage%20Part%201:%20Introduction.%20%7C%20by%20Ali%20Hussein%20Safar%20%7C%20Medium.pdf"&gt;Seaweedfs – part1&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://a.gavrilov.info/data/posts/Seaweedfs%20Distributed%20Storage%20Part%202:%20Reading%20and%20Writing%20Files’%20Process.%20%7C%20by%20Ali%20Hussein%20Safar%20%7C%20M.pdf"&gt;Seaweedfs – part2&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://a.gavrilov.info/data/posts/Seaweedfs%20Distributed%20Storage%20Part%203:%20Features.%20%7C%20by%20Ali%20Hussein%20Safar%20%7C%20Medium.pdf"&gt;Seaweedfs – part3&lt;/a&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2023-12-09-v-18.27.52.png" width="2484" height="1382" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;a href="https://github.com/seaweedfs/seaweedfs"&gt;https://github.com/seaweedfs/seaweedfs&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;JuiceFS – Кажется китайский софт, написан на GO, есть комьюнити версия и платная для высоконагруженных решений. Подходит для big data.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2023-12-09-v-18.28.25.png" width="2550" height="1350" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;&lt;a href="https://github.com/juicedata/juicefs"&gt;https://github.com/juicedata/juicefs&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Статичный хостинг сайтов по протоколу s3 от Storj</title>
<guid isPermaLink="false">28</guid>
<link>https://gavrilov.info/all/statichny-hosting-saytov-po-protokolu-s3-ot-storj/</link>
<pubDate>Tue, 19 Jul 2022 19:15:03 +0300</pubDate>
<author></author>
<comments>https://gavrilov.info/all/statichny-hosting-saytov-po-protokolu-s3-ot-storj/</comments>
<description>
&lt;p&gt;Иногда достаточно простой страницы, которую мы хотим опубликовать в интернет. Хостингов много разных, а хочется не только страницу сделать, но и выложить там фотки например гигов на 150 с последнего отпуска. Конечно можно купить хостинг Яндекс диск или еще Гугл и шарить папки, но кто ищет легких путей)) не я точно.&lt;/p&gt;
&lt;p&gt;Ниже я расскажу как создать хостинг статичных страничек на протоколе s3 от Storj&lt;/p&gt;
&lt;p&gt;Вот коротко, что требуется:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Аккаунт&lt;/li&gt;
&lt;li&gt;Папку&lt;/li&gt;
&lt;li&gt;Uplink&lt;/li&gt;
&lt;li&gt;Домен и DNS&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;А теперь подробнее:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Заводим аккаунт на &lt;a href="https://www.storj.io"&gt;https://www.storj.io&lt;/a&gt; – тут просто, выбираем регион из трех Европа, Азия или США. Сразу скажу, что логины отличаются в разных регионах и стоит запомнить в каком регионе вы регистрируетесь.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2022-07-19-v-18.23.30.png" width="2076" height="1350" alt="" /&gt;
&lt;/div&gt;
&lt;ol start="2"&gt;
&lt;li&gt;После регистрации заходим в раздел Bucket и создаем новый с любым названием. Например, “site”. Имейте ввиду, что регистр важен и лучше использовать маленькие буквы. При создании бакета потребуется придумать пароль. ВАЖНО! Если его забыть то ничего восстановить не получится. Так что придумываем надежный пароль и помним его сильно))). Можно, кстати не придумывать и положиться на систему и она сгенерирует автоматически ключевую фразу в несколько слов. Выучить предложение наизусть в этом случае будет сложно, да и печатать долго. Ладно будем считать пакет создан.&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2022-07-19-v-18.33.27.png" width="1204" height="1196" alt="" /&gt;
&lt;/div&gt;
&lt;ol start="3"&gt;
&lt;li&gt;На этом этапе нужен uplink. Скачать его можно тут: &lt;a href="https://docs.storj.io/dcs/downloads/download-uplink-cli/"&gt;https://docs.storj.io/dcs/downloads/download-uplink-cli/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Далее настраиваем доступы API вводим команду:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;uplink setup&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Но погодите, у нас же нет еще ключей! А их мы должны взять в личном кабинете и предварительно сгенерировать. При генерации ключей можно давать полный доступ. Эти ключи не будут использоваться публично. Они нужны для работы Uplink, который запускается локально на вашем ПК.&lt;/p&gt;
&lt;p&gt;Что бы сделать ключ заходим в аккаунт storj, меню Access и наживаем “Create Keys for CLI”. Там выбираем API и полные права. После генерации система выдаст две строки: ‘satellite address as “&lt; nodeid&gt;@&lt;address&gt;:&lt;port &gt;” и API Key’. Запоминаем их и возвращаемся к Uplink. Он попросит сначала выбрать регион. Далее указать строку сателлиты, а за тем API Key. А в самом конце попросит ключ фразу от папки (бакета). На последнем этапе лучше не ошибаться, так как сообщений об ошибке не будет потому как это пароль шифрования, а не доступа. Если пароль будет другим, то вы не увидите там файлов. В общем не ошибаемся на этом этапе и аккуратно вводим пароль. Еще дополню, что можно запутаться с паролями и папками и правами для простоты можете создать один общий пароль или создавать для каждой папки свой пароль и свои API ключи. В прочем делайте, как вам нравится.&lt;/p&gt;
&lt;p&gt;и так Uplink работает. А если нет то вот инструкция: &lt;a href="https://docs.storj.io/dcs/api-reference/uplink-cli/setup-command/"&gt;https://docs.storj.io/dcs/api-reference/uplink-cli/setup-command/&lt;/a&gt;&lt;/p&gt;
&lt;ol start="4"&gt;
&lt;li&gt;Генерируем общий доступ для нашей папки site. Для этого нужно выполнить команду:&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;uplink share --dns www.example.com sj://bucket/prefix&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В итоге uplink выдаст настройки DNS, которые мы указываем у своего провайдера.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;$ORIGIN example.com.
$TTL    3600
www.example.com    INCNAMElink.storjshare.io.
txt-www.example.comINTXT  storj-root:bucket/prefix
txt-www.example.comINTXT  storj-access:jqaz8xihdea93jfbaks8324jrhq1&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Все! Кладем в папку site index.html и радуемся.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://gavrilov.info/pictures/Snimok-ekrana-2022-07-19-v-19.08.54.png" width="936" height="278" alt="" /&gt;
&lt;/div&gt;
</description>
</item>


</channel>
</rss>