{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Yuriy Gavrilov: posts tagged s3",
    "_rss_description": "Welcome to my personal place for love, peace and happiness 🤖 Yuiry Gavrilov",
    "_rss_language": "en",
    "_itunes_email": "yvgavrilov@gmail.com",
    "_itunes_categories_xml": "",
    "_itunes_image": "https:\/\/gavrilov.info\/pictures\/userpic\/userpic-square@2x.jpg?1643451008",
    "_itunes_explicit": "no",
    "home_page_url": "https:\/\/gavrilov.info\/tags\/s3\/",
    "feed_url": "https:\/\/gavrilov.info\/tags\/s3\/json\/",
    "icon": "https:\/\/gavrilov.info\/pictures\/userpic\/userpic@2x.jpg?1643451008",
    "authors": [
        {
            "name": "Yuriy Gavrilov - B[u]g - for charity.gavrilov.eth",
            "url": "https:\/\/gavrilov.info\/",
            "avatar": "https:\/\/gavrilov.info\/pictures\/userpic\/userpic@2x.jpg?1643451008"
        }
    ],
    "items": [
        {
            "id": "299",
            "url": "https:\/\/gavrilov.info\/all\/sravnitelny-analiz-self-hosted-s3-sovmestimyh-hranilisch\/",
            "title": "Сравнительный анализ self-hosted S3-совместимых хранилищ",
            "content_html": "<p>Четкое сравнение семи self-hosted S3-совместимых решений для хранения данных.<\/p>\n<p>Оригинал тут: <a href=\"https:\/\/www.repoflow.io\/blog\/benchmarking-self-hosted-s3-compatible-storage-a-practical-performance-comparison\">Команда RepoFlow. 9 августа 2025 г.<\/a><\/p>\n<p>Локальное (self-hosted) объектное хранилище — это отличный выбор для разработчиков и команд, которые хотят иметь полный контроль над хранением и доступом к своим данным. Независимо от того, заменяете ли вы Amazon S3, размещаете внутренние файлы, создаете CI-конвейер или обслуживаете репозитории пакетов, уровень хранения может значительно повлиять на скорость и стабильность.<\/p>\n<p>Мы протестировали семь популярных решений для объектного хранения, поддерживающих протокол S3. Цель состояла в том, чтобы сравнить их производительность в идентичных условиях, используя реальные операции загрузки и скачивания.<\/p>\n<h3>Тестируемые решения<\/h3>\n<p>Каждое из следующих решений было развернуто с помощью Docker на одном и том же сервере без монтирования томов и без специальной настройки:<\/p>\n<ol start=\"1\">\n<li>`MinIO`<\/li>\n<li>`Ceph`<\/li>\n<li>`SeaweedFS`<\/li>\n<li>`Garage`<\/li>\n<li>`Zenko` (Scality Cloudserver)<\/li>\n<li>`LocalStack`<\/li>\n<li>`RustFS`<\/li>\n<\/ol>\n<h3>Скорость последовательного скачивания<\/h3>\n<p>Средняя скорость скачивания одного файла разного размера.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.42.26.png\" width=\"1270\" height=\"656\" alt=\"\" \/>\n<\/div>\n<p>[Изображение: График скорости последовательного скачивания для малых файлов размером 50 КБ и 200 КБ. По оси Y — скорость в МБ\/с, по оси X — размер файла. Сравниваются Garage, Localstack, Minio, Zenko, Ceph, RustFS, SeaweedFS.]<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.42.57.png\" width=\"1264\" height=\"650\" alt=\"\" \/>\n<\/div>\n<p>[Изображение: График скорости последовательного скачивания для больших файлов размером 10 МБ, 50 МБ, 100 МБ и 1 ГБ. По оси Y — скорость в МБ\/с, по оси X — размер файла. Сравниваются те же решения.]<\/p>\n<h3>Скорость последовательной загрузки<\/h3>\n<p>Средняя скорость загрузки одного файла разного размера.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.43.18.png\" width=\"1278\" height=\"648\" alt=\"\" \/>\n<\/div>\n<p>[Изображение: График скорости последовательной загрузки для малых файлов размером 50 КБ и 200 КБ. По оси Y — скорость в МБ\/с, по оси X — размер файла. Сравниваются те же решения.]<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.43.34.png\" width=\"1252\" height=\"636\" alt=\"\" \/>\n<\/div>\n<p>[Изображение: График скорости последовательной загрузки для больших файлов размером 10 МБ, 50 МБ, 100 МБ и 1 ГБ. По оси Y — скорость в МБ\/с, по оси X — размер файла. Сравниваются те же решения.]<\/p>\n<h3>Производительность листинга<\/h3>\n<p>Измеряет время, необходимое для получения списка всех 2000 тестовых объектов в бакете с использованием разных размеров страницы (100, 500 и 1000 результатов на запрос).<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.44.02.png\" width=\"1280\" height=\"648\" alt=\"\" \/>\n<\/div>\n<p>[Изображение: График производительности листинга. По оси Y — время в мс, по оси X — количество результатов на страницу (100, 500, 1000). Сравниваются те же решения.]<\/p>\n<h3>Скорость параллельной загрузки<\/h3>\n<p>Измеряет время, необходимое для параллельной загрузки нескольких файлов одинакового размера. Скорость загрузки рассчитывается по формуле:<\/p>\n<p>(number of files × file size) ÷ total time<\/p>\n<h4>Скорость параллельной загрузки – файлы 1 МБ<\/h4>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.44.22.png\" width=\"1304\" height=\"748\" alt=\"\" \/>\n<\/div>\n<p>[Изображение: График скорости параллельной загрузки файлов размером 1 МБ. По оси Y — скорость в МБ\/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]<\/p>\n<h4>Скорость параллельной загрузки – файлы 10 МБ<\/h4>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.45.06.png\" width=\"1254\" height=\"650\" alt=\"\" \/>\n<\/div>\n<p>[Изображение: График скорости параллельной загрузки файлов размером 10 МБ. По оси Y — скорость в МБ\/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]<\/p>\n<h4>Скорость параллельной загрузки – файлы 100 МБ<\/h4>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.45.23.png\" width=\"1278\" height=\"652\" alt=\"\" \/>\n<\/div>\n<p>[Изображение: График скорости параллельной загрузки файлов размером 100 МБ. По оси Y — скорость в МБ\/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]<\/p>\n<h3>Скорость параллельного скачивания<\/h3>\n<p>Измеряет время, необходимое для параллельного скачивания нескольких файлов одинакового размера. Скорость скачивания рассчитывается по формуле:<\/p>\n<p>(number of files × file size) ÷ total time<\/p>\n<h4>Скорость параллельного скачивания – файлы 1 МБ<\/h4>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.45.45.png\" width=\"1278\" height=\"650\" alt=\"\" \/>\n<\/div>\n<p>[Изображение: График скорости параллельного скачивания файлов размером 1 МБ. По оси Y — скорость в МБ\/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]<\/p>\n<h4>Скорость параллельного скачивания – файлы 10 МБ<\/h4>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.46.02.png\" width=\"1280\" height=\"644\" alt=\"\" \/>\n<\/div>\n<p>[Изображение: График скорости параллельного скачивания файлов размером 10 МБ. По оси Y — скорость в МБ\/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]<\/p>\n<h4>Скорость параллельного скачивания – файлы 100 МБ<\/h4>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.46.17.png\" width=\"1284\" height=\"670\" alt=\"\" \/>\n<\/div>\n<p>[Изображение: График скорости параллельного скачивания файлов размером 100 МБ. По оси Y — скорость в МБ\/с, по оси X — количество параллельных потоков (5, 10, 20). Сравниваются те же решения.]<\/p>\n<h3>Как проводились тесты<\/h3>\n<p>Для каждого решения мы:<\/p>\n<ol start=\"1\">\n<li>Загружали и скачивали файлы 7 различных размеров: 50 КБ, 200 КБ, 1 МБ, 10 МБ, 50 МБ, 100 МБ и 1 ГБ.<\/li>\n<li>Повторяли каждую загрузку и скачивание 20 раз для получения стабильных средних значений.<\/li>\n<li>Измеряли среднюю скорость загрузки и скачивания в мегабайтах в секунду (МБ\/с).<\/li>\n<li>Выполняли все тесты на одной и той же машине, используя стандартный Docker-контейнер для каждой системы хранения, без внешних томов, монтирования или кешей.<\/li>\n<\/ol>\n<p>Все решения тестировались в одноузловой конфигурации для обеспечения согласованности. Хотя некоторые системы (например, `Ceph`) спроектированы для лучшей производительности в кластерной среде, мы использовали одинаковые условия для всех решений, чтобы гарантировать справедливое сравнение.<\/p>\n<h3>Заключительные мысли<\/h3>\n<p>Эти результаты показывают, как каждое решение вело себя в нашей конкретной тестовой среде с одним узлом. Их следует рассматривать как относительное сравнение соотношений производительности, а не как абсолютные жесткие значения, которые будут применимы в любой конфигурации.<\/p>\n<p>При выборе подходящего решения для хранения данных учитывайте типичные размеры файлов, которые вы будете хранить, поскольку одни системы лучше справляются с маленькими файлами, а другие преуспевают с большими. Также подумайте об основных возможностях, которые вам требуются, таких как масштабируемость, репликация, долговечность или встроенный графический интерфейс. Наконец, помните, что производительность может сильно отличаться между одноузловыми и многоузловыми кластерами.<\/p>\n<p>Наши тесты предоставляют базовый уровень для понимания того, как эти системы соотносятся в идентичных условиях, но ваша реальная производительность будет зависеть от вашего конкретного оборудования, рабочей нагрузки и конфигурации.<\/p>\n",
            "date_published": "2025-12-08T00:50:17+03:00",
            "date_modified": "2025-12-08T00:50:03+03:00",
            "tags": [
                "big data",
                "Data Engineer",
                "Dev",
                "k3s",
                "Programming",
                "s3"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.42.26.png",
            "_date_published_rfc2822": "Mon, 08 Dec 2025 00:50:17 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "299",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.42.26.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.42.57.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.43.18.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.43.34.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.44.02.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.44.22.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.45.06.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.45.23.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.45.45.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.46.02.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2025-12-08-v-00.46.17.png"
                ]
            }
        },
        {
            "id": "172",
            "url": "https:\/\/gavrilov.info\/all\/storj-kupil-cunofs\/",
            "title": "Storj купил cunoFS",
            "content_html": "<p>Getting started with cunoFS#<br \/>\ncunoFS 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.<\/p>\n<p>Интересно, теперь наверное встроить в себя или новое что то придумает.<\/p>\n",
            "date_published": "2024-10-12T15:56:14+03:00",
            "date_modified": "2024-10-12T15:56:10+03:00",
            "tags": [
                "s3",
                "Storj"
            ],
            "_date_published_rfc2822": "Sat, 12 Oct 2024 15:56:14 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "172",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": []
            }
        },
        {
            "id": "91",
            "url": "https:\/\/gavrilov.info\/all\/zapuskaem-garage-s3-v-docker\/",
            "title": "Запускаем Garage S3 в Docker",
            "content_html": "<p>Создаем проект, просто папку, где все будем хранить:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mkdir garage\ncd garage<\/code><\/pre><p>Создаем файл настроек томл:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">nano  garage.toml<\/code><\/pre><p>Пишем туда этот текст:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">metadata_dir = &quot;\/var\/lib\/garage\/meta&quot;\ndata_dir = &quot;\/var\/lib\/garage\/data&quot;\ndb_engine = &quot;lmdb&quot;\n\nreplication_mode = &quot;none&quot;\n\nrpc_bind_addr = &quot;[::]:3901&quot;\nrpc_public_addr = &quot;127.0.0.1:3901&quot;\nrpc_secret = &quot;3e59650cc67421460a80eafc4d45611ebb63a214296d8f32f51135041ff514f5&quot;\n\n[s3_api]\ns3_region = &quot;garage&quot;\napi_bind_addr = &quot;[::]:3900&quot;\nroot_domain = &quot;localhost&quot;\n\n[s3_web]\nbind_addr = &quot;[::]:3902&quot;\nroot_domain = &quot;localhost&quot;\nindex = &quot;index.html&quot;\n\n[k2v_api]\napi_bind_addr = &quot;[::]:3904&quot;\n\n[admin]\napi_bind_addr = &quot;0.0.0.0:3903&quot;\nadmin_token = &quot;472070e320469b2f048f77dcad4149e0c608ef01ecf0ac863c416287a1127a9e&quot;<\/code><\/pre><p>Далее создаем папку для хранения метаданных и самих данных:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mkdir meta\nmkdir data<\/code><\/pre><p>Теперь запускаем docker:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">docker run \\\n  -d \\\n  --name garaged \\\n  --restart always \\\n  -p 3900:3900 -p 3901:3901 -p 3902:3902 -p 3903:3903 -p 3904:3904 \\\n  -v .\/garage.toml:\/etc\/garage.toml \\\n  -v .\/meta:\/var\/lib\/garage\/meta \\\n  -v .\/data:\/var\/lib\/garage\/data \\\n  dxflrs\/garage:v0.9.0<\/code><\/pre><p>Проверяем, что все хорошо:<\/p>\n<p>Для удобства зарегистрируем alias так:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">alias garage=&quot;docker exec -ti garaged \/garage&quot;<\/code><\/pre><p>Теперь можно запускать команды быстрее.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">garage status\n==== HEALTHY NODES ====\nID                Hostname      Address         Tags              Zone  Capacity  DataAvail\n851017ec5989840f  e3428f26541f  127.0.0.1:3901  NO ROLE ASSIGNED<\/code><\/pre><p>Добавим роль:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">garage layout assign -z dc1 -c 1G 851017ec5989840f\nRole changes are staged but not yet commited.\nUse `garage layout show` to view staged role changes,\nand `garage layout apply` to enact staged changes.<\/code><\/pre><p>Применим роль:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">garage layout apply --version 1 \n\n==== COMPUTATION OF A NEW PARTITION ASSIGNATION ====\n\nPartitions are replicated 1 times on at least 1 distinct zones.\n\nOptimal partition size:                     3.9 MB\nUsable capacity \/ total cluster capacity:   1000.0 MB \/ 1000.0 MB (100.0 %)\nEffective capacity (replication factor 1):  1000.0 MB\n\ndc1                 Tags  Partitions        Capacity   Usable capacity\n  851017ec5989840f        256 (256 new)     1000.0 MB  1000.0 MB (100.0%)\n  TOTAL                   256 (256 unique)  1000.0 MB  1000.0 MB (100.0%)\n\n\nNew cluster layout with updated role assignment has been applied in cluster.\nData will now be moved around between nodes accordingly.<\/code><\/pre><p>Можно создавать бакет:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">garage bucket create gavrilov \n\nBucket gavrilov was created.<\/code><\/pre><p>Генерируем ключи:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">garage key create gavrilov-key\n\nKey name: gavrilov-key\nKey ID: GK6d2fd5f2bb22374c2b626fb2\nSecret key: 5118548e77dcd660705662f18742e4d9f0cd5d37409c2e3bfa53a50f00e33886\nCan create buckets: false\n\nKey-specific bucket aliases:\n\nAuthorized buckets:<\/code><\/pre><p>Добавляем доступ ключей в бакет:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">garage bucket allow \\                             \n  --read \\\n  --write \\\n  --owner \\\n  gavrilov \\\n  --key gavrilov-key\n\nNew permissions for GK6d2fd5f2bb22374c2b626fb2 on gavrilov: read true, write true, owner true.<\/code><\/pre><p>И последний штрих доступ через web:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">garage bucket website gavrilov --allow\n\nWebsite access allowed for gavrilov<\/code><\/pre><p>Теперь можно настроить доступ s3 клиента и что то положить в бакет:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">mc alias set garage http:\/\/localhost:3900 GK6d2fd5f2bb22374c2b626fb2 5118548e77dcd660705662f18742e4d9f0cd5d37409c2e3bfa53a50f00e33886\n\necho &quot;hello world from s3&quot; | mc pipe garage\/gavrilov\/index.html<\/code><\/pre><p>Открываем браузер и смотрим файлик: <a href=\"http:\/\/gavrilov.localhost:3902\/\">http:\/\/gavrilov.localhost:3902\/<\/a><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-23.20.24.png\" width=\"1896\" height=\"416\" alt=\"\" \/>\n<\/div>\n<p>ps: На официальном сайте docker запускают с аргументом<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">--network host<\/code><\/pre><p>, но у меня почему-то  так не работало. Порты закрыты были все. Потом разберусь ¯\\_(ツ)_\/¯ .<\/p>\n<hr \/>\n<p>Кстати есть уже альфа rustfs <a href=\"https:\/\/github.com\/rustfs\/rustfs\">https:\/\/github.com\/rustfs\/rustfs<\/a><\/p>\n",
            "date_published": "2023-12-09T23:25:46+03:00",
            "date_modified": "2025-09-24T23:37:58+03:00",
            "tags": [
                "Open Source",
                "s3"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-23.20.24.png",
            "_date_published_rfc2822": "Sat, 09 Dec 2023 23:25:46 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "91",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-23.20.24.png"
                ]
            }
        },
        {
            "id": "90",
            "url": "https:\/\/gavrilov.info\/all\/s3-storage\/",
            "title": "S3 Storage",
            "content_html": "<ol start=\"1\">\n<li>Garage – Французский опенсорс для домашнего использования и небольшой нагрузки. Но написан на Rust<\/li>\n<\/ol>\n<p><a href=\"https:\/\/garagehq.deuxfleurs.fr\">garagehq.deuxfleurs<\/a> Тут можно почитать, как утверждают разраотчики, то это можно напускать даже на тостере :), в прочем они скорее всего правы, учитывая язык разработки.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-18.17.11.png\" width=\"1934\" height=\"1496\" alt=\"\" \/>\n<div class=\"e2-text-caption\"><a href=\"https:\/\/crates.io\/crates\/garage\">https:\/\/crates.io\/crates\/garage<\/a><\/div>\n<\/div>\n<ol start=\"2\">\n<li>SeaweedFS – А этот написан на Go. Вот, что они про себя пишут: быстрая распределенная система хранения больших двоичных объектов, файлов и озер данных для миллиардов файлов! Хранилище BLOB-объектов имеет поиск на диске O(1) и многоуровневое облако. Filer поддерживает Cloud Drive, активно-активную репликацию между DC, Kubernetes, монтирование POSIX FUSE, S3 API, S3 Gateway, Hadoop, WebDAV, шифрование, Erasure Coding. Есть хорошее сравнение с другими решениями тут: <a href=\"https:\/\/github.com\/seaweedfs\/seaweedfs#compared-to-other-file-systems.\">https:\/\/github.com\/seaweedfs\/seaweedfs#compared-to-other-file-systems.<\/a> И есть статья на Медиуме<\/li>\n<\/ol>\n<p><a href=\"https:\/\/a.gavrilov.info\/data\/posts\/Seaweedfs%20Distributed%20Storage%20Part%201:%20Introduction.%20%7C%20by%20Ali%20Hussein%20Safar%20%7C%20Medium.pdf\">Seaweedfs – part1<\/a><br \/>\n<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\">Seaweedfs – part2<\/a><br \/>\n<a href=\"https:\/\/a.gavrilov.info\/data\/posts\/Seaweedfs%20Distributed%20Storage%20Part%203:%20Features.%20%7C%20by%20Ali%20Hussein%20Safar%20%7C%20Medium.pdf\">Seaweedfs – part3<\/a><\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-18.27.52.png\" width=\"2484\" height=\"1382\" alt=\"\" \/>\n<div class=\"e2-text-caption\"><a href=\"https:\/\/github.com\/seaweedfs\/seaweedfs\">https:\/\/github.com\/seaweedfs\/seaweedfs<\/a><\/div>\n<\/div>\n<ol start=\"3\">\n<li>JuiceFS – Кажется китайский софт, написан на GO, есть комьюнити версия и платная для высоконагруженных решений. Подходит для big data.<\/li>\n<\/ol>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-18.28.25.png\" width=\"2550\" height=\"1350\" alt=\"\" \/>\n<div class=\"e2-text-caption\"><a href=\"https:\/\/github.com\/juicedata\/juicefs\">https:\/\/github.com\/juicedata\/juicefs<\/a><\/div>\n<\/div>\n",
            "date_published": "2023-12-09T19:08:32+03:00",
            "date_modified": "2023-12-09T19:11:31+03:00",
            "tags": [
                "big data",
                "Open Source",
                "s3"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-18.17.11.png",
            "_date_published_rfc2822": "Sat, 09 Dec 2023 19:08:32 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "90",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-18.17.11.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-18.27.52.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2023-12-09-v-18.28.25.png"
                ]
            }
        },
        {
            "id": "28",
            "url": "https:\/\/gavrilov.info\/all\/statichny-hosting-saytov-po-protokolu-s3-ot-storj\/",
            "title": "Статичный хостинг сайтов по протоколу s3 от Storj",
            "content_html": "<p>Иногда достаточно простой страницы, которую мы хотим опубликовать в интернет. Хостингов много разных, а хочется не только страницу сделать, но и выложить там фотки например гигов на 150 с последнего отпуска. Конечно можно купить хостинг Яндекс диск или еще Гугл и шарить папки, но кто ищет легких путей)) не я точно.<\/p>\n<p>Ниже я расскажу как создать хостинг статичных страничек на протоколе s3 от Storj<\/p>\n<p>Вот коротко, что требуется:<\/p>\n<ol start=\"1\">\n<li>Аккаунт<\/li>\n<li>Папку<\/li>\n<li>Uplink<\/li>\n<li>Домен и DNS<\/li>\n<\/ol>\n<p>А теперь подробнее:<\/p>\n<ol start=\"1\">\n<li>Заводим аккаунт на <a href=\"https:\/\/www.storj.io\">https:\/\/www.storj.io<\/a> – тут просто, выбираем регион из трех Европа, Азия или США. Сразу скажу, что логины отличаются в разных регионах и стоит запомнить в каком регионе вы регистрируетесь.<\/li>\n<\/ol>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2022-07-19-v-18.23.30.png\" width=\"2076\" height=\"1350\" alt=\"\" \/>\n<\/div>\n<ol start=\"2\">\n<li>После регистрации заходим в раздел Bucket и создаем новый с любым названием. Например, “site”. Имейте ввиду, что регистр важен и лучше использовать маленькие буквы. При создании бакета потребуется придумать пароль. ВАЖНО! Если его забыть то ничего восстановить не получится. Так что придумываем надежный пароль и помним его сильно))). Можно, кстати не придумывать и положиться на систему и она сгенерирует автоматически ключевую фразу в несколько слов. Выучить предложение наизусть в этом случае будет сложно, да и печатать долго. Ладно будем считать пакет создан.<\/li>\n<\/ol>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2022-07-19-v-18.33.27.png\" width=\"1204\" height=\"1196\" alt=\"\" \/>\n<\/div>\n<ol start=\"3\">\n<li>На этом этапе нужен uplink. Скачать его можно тут: <a href=\"https:\/\/docs.storj.io\/dcs\/downloads\/download-uplink-cli\/\">https:\/\/docs.storj.io\/dcs\/downloads\/download-uplink-cli\/<\/a><\/li>\n<\/ol>\n<p>Далее настраиваем доступы API вводим команду:<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">uplink setup<\/code><\/pre><p>Но погодите, у нас же нет еще ключей! А их мы должны взять в личном кабинете и предварительно сгенерировать. При генерации ключей можно давать полный доступ. Эти ключи не будут использоваться публично. Они нужны для работы Uplink, который запускается локально на вашем ПК.<\/p>\n<p>Что бы сделать ключ заходим в аккаунт storj, меню Access и наживаем “Create Keys for CLI”. Там выбираем API и полные права. После генерации система выдаст две строки: ‘satellite address as “< nodeid>@<address>:<port >” и API Key’. Запоминаем их и возвращаемся к Uplink. Он попросит сначала выбрать регион. Далее указать строку сателлиты, а за тем API Key. А в самом конце попросит ключ фразу от папки (бакета). На последнем этапе лучше не ошибаться, так как сообщений об ошибке не будет потому как это пароль шифрования, а не доступа. Если пароль будет другим, то вы не увидите там файлов. В общем не ошибаемся на этом этапе и аккуратно вводим пароль. Еще дополню, что можно запутаться с паролями и папками и правами для простоты можете создать один общий пароль или создавать для каждой папки свой пароль и свои API ключи. В прочем делайте, как вам нравится.<\/p>\n<p>и так Uplink работает. А если нет то вот инструкция: <a href=\"https:\/\/docs.storj.io\/dcs\/api-reference\/uplink-cli\/setup-command\/\">https:\/\/docs.storj.io\/dcs\/api-reference\/uplink-cli\/setup-command\/<\/a><\/p>\n<ol start=\"4\">\n<li>Генерируем общий доступ для нашей папки site. Для этого нужно выполнить команду:<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">uplink share --dns www.example.com sj:\/\/bucket\/prefix<\/code><\/pre><p>В итоге uplink выдаст настройки DNS, которые мы указываем у своего провайдера.<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">$ORIGIN example.com.\n$TTL    3600\nwww.example.com    \tIN\tCNAME\tlink.storjshare.io.\ntxt-www.example.com\tIN\tTXT  \tstorj-root:bucket\/prefix\ntxt-www.example.com\tIN\tTXT  \tstorj-access:jqaz8xihdea93jfbaks8324jrhq1<\/code><\/pre><p>Все! Кладем в папку site index.html и радуемся.<\/p>\n<div class=\"e2-text-picture\">\n<img src=\"https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2022-07-19-v-19.08.54.png\" width=\"936\" height=\"278\" alt=\"\" \/>\n<\/div>\n",
            "date_published": "2022-07-19T19:15:03+03:00",
            "date_modified": "2022-07-19T21:20:58+03:00",
            "tags": [
                "s3",
                "Storj",
                "www",
                "хостинг"
            ],
            "image": "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2022-07-19-v-18.41.48.png",
            "_date_published_rfc2822": "Tue, 19 Jul 2022 19:15:03 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "28",
            "_rss_enclosures": [],
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "highlight\/highlight.js",
                    "highlight\/highlight.css"
                ],
                "og_images": [
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2022-07-19-v-18.41.48.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2022-07-19-v-18.23.30.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2022-07-19-v-18.33.27.png",
                    "https:\/\/gavrilov.info\/pictures\/Snimok-ekrana-2022-07-19-v-19.08.54.png"
                ]
            }
        }
    ],
    "_e2_version": 4171,
    "_e2_ua_string": "Aegea 11.4 (v4171e)"
}