S3 Storage для статического сайта
Где хранить изображения и видео для блога, если ты разработчик и не хочешь заморачиваться с сервером? Немного про облачные хранилища и S3-совместимые сервисы.
Мой бложик на очень быстро «потяжелел» и начал занимать солидный гигабайт, как только я начал вставлять в посты фотографии из поездок в Таиланд. Иногда я пишу и технические статьи, а туда хочется вставить гифку с экраном или что-то подобное — это тоже весит немало. Лучше бы заранее подумать, где всё это хранить, чтобы потом не мучиться с обновлением ссылок, когда окажется, что GitHub не очень-то рад моему разжиревшему статическому сайту.
AWS S3
AWS S3 — облачное файловое хранилище от Amazon, которое использует каждая вторая IT-компания. На нём построены тысячи сервисов. S3 позволяет делать публичные бакеты, то есть можно просто загрузить туда HTML-файлы и использовать как хостинг для статического сайта. Можно даже привязать свой домен и подключить SSL. Для AWS есть консольная утилита aws-cli, с которой можно заливать статику одной командой в терминале.
Идея с AWS мне кажется неплохой. S3 — это такая же базовая инфраструктурная единица, как GitHub. Amazon, как и Microsoft, имеет все шансы пережить нас всех. За S3, правда, придётся платить, но очень немного. Возможно, хватит один раз пополнить баланс на $10 и забыть. Для текстового блога с небольшим количеством изображений этого может хватить лет на сто вперёд. Для тяжелого блога размером до ~100Гб — лет на пять, что в любом случае дешевле чем любой VPS или хостинг.
Проблема в том, что AWS — это не для людей. Интерфейсы, настройки разрешений, роли, политики — там целый мир, который желательно понимать, чтобы не накосячить. С S3 не так всё страшно, конечно, но даже при настройке доступа к файлам уже возникают вопросы, особенно если ты не варишься в этом каждый день. Плюс — у них куча типов хранилищ с разной стоимостью и скоростью доступа, и в этом тоже надо разобраться. В общем, вариант рабочий, но не самый дружелюбный.
S3-совместимые хранилища
Протокол, по которому работает Amazon S3, стал настолько популярен, что многие другие компании начали делать совместимые с ним сервисы. Часто даже aws-cli работает с этими хранилищами без проблем. Более того, клиенты и SDK для AWS S3 есть под все платформы на всех языках, и они тоже будут совместимы. Есть нюансы, но в целом — всё ок.
Из тех, что я пробовал — Cloudflare и… Яндекс. Да, обе компании развивают свои облачные платформы по образу и подобию AWS. У Яндекса это называется Object Storage, у Cloudflare — R2.
Есть и другие. У Google, например, есть Google Cloud Storage — у него свой протокол, но принцип тот же: бакеты, политики, дешёвое хранение объектов.
Cloudflare
У Cloudflare — одна из самых приятных админок среди всех провайдеров. И вообще, они делают много хорошего. Например, Cloudflare R2 не берёт деньги за исходящий трафик — уже киллер-фича для хранения файлов. Это суперудобно для изображений и видео в блоге: можно не бояться, что внезапная популярность обернётся счётом на $300.
Плюс — free tier: можно хранить до 10 ГБ в месяц бесплатно.
Для изображений у них есть Cloudflare Images, где можно хранить и оптимизировать картинки, делать превью и всё такое. Ну и, конечно, у них встроенный CDN — изображения автоматически раздаются с ближайших к пользователю дата-центров. CDN есть и у всех остальных провайдеров, но у Cloudflare он намного user-friendlier и проще в настройке.
Yandex Object Storage
По сути, всё то же, что у Amazon: бакеты, возможность опубликовать как веб-сайт. Из плюсов (относительных, конечно) — оплата в рублях и серверы в РФ, что удобно, если твой трафик идёт из СНГ.
Из минусов — встречаются проблемы с совместимостью. В доке Яндекса пишут, что можно использовать AWS CLI, потому что протокол совместим. Но на деле, например, команда sync не работает. А ведь она как раз идеальна для заливки только изменённых файлов — это важно для блога или фотоальбома.
Однажды я наткнулся на другую проблему: AWS CLI в свежей версии использует по умолчанию протокол S3v4, а у Яндекса тогда поддерживался только S3v3. Решалось понижением версии в конфиге, но в доке этого не было. Я не поленился, сделал pull request с правками в их документацию. И, внезапно, получил за это грант — немного кредитов на использование их сервисов. Хватает, чтобы хостить файлы для блога ещё несколько лет бесплатно.
В общем, сервис в целом норм, но нюансы есть. Я пока остался на Яндексе — всё устраивает, лень переезжать. Но если бы переезжал — выбрал бы Cloudflare. На маке настроил Mountain Duck и Commander One для подключения к бакетам и заливки фоток.
Но учти: S3 — это не файловая система. Если, например, переименовать папку, то под капотом это копирование всех файлов и удаление старых. Я как-то встрял с этим: переименовал папку с сотнями файлов — клиент завис.
Цены
В среднем облачные хранилища просят $0.015–0.02 за 1 ГБ в месяц. Самый дешёвый вариант — Cloudflare R2, плюс бесплатный трафик. У всех есть free tier, где можно хранить до 10–15 ГБ бесплатно.
Цены на момент написания статьи (Гб в месяц за стандартное хранилище):
- yandex.cloud/ru/docs/storage/pricing - ~2.17 руб
- developers.cloudflare.com/r2/pricing - $0.015
- cloud.google.com/storage/pricing - $0.020
- aws.amazon.com/ru/s3/pricing - $0.023
Еще всякое интересное