Искать в Базе знаний

Хранилище S3

Если обычный диск на сервере — это строгий органайзер с папками, то S3 — это большой склад. В нём все файлы лежат в общем пространстве, которое называется бакет, и у каждого объекта на этом складе есть свой уникальный ключ-имя.
Это идеальное место для данных, которые нужно один раз сохранить и потом часто скачивать.

Преимущества

  • Масштабируемость: объём хранилища можно увеличить в любой момент, не нужно заранее планировать размер диска.
  • Производительность: доступ с минимальной задержкой независимо от объёма данных.
  • Экономичность: S3 обходится дешевле, чем расширять диск сменой тарифа хостинга или VDS.
  • Отказоустойчивость: мы используем метод двойной репликации — копии ваших данных хранятся независимо друг от друга на разных серверах.

Что хранить в S3

Этот тип хранилища оптимален для сценария, когда файлы редко меняются и часто используются. Поэтому в S3 рекомендуется хранить:
  • Архивы с бекапами
  • Статику для сайтов (картинки, JS, CSS, шрифты)
  • Мультимедийный контент
  • Большие данные и DWH (логи, архивные данные, документы)
Из-за своей специфики объектное хранилище не подойдёт для данных, требующих частого изменения.

Как начать работу

  1. Создание бакета
    Зайдите в Панель управления в раздел S3 и нажмите кнопку «Создать бакет». Бакет — это контейнер для ваших файлов.
    content-image
  2. Данные для подключения
    После создания бакета вы получите данные для подключения.
    content-image
    Они будут продублированы на почту:
    • URL: https://s3.spb.sprinthost.ru/
    • Name — имя вашего бакета, например: s3-123456
    • Access Key — публичный идентификатор ключа
    • Secret Access Key — секретный ключ. Сохраните его сразу — после закрытия окна он больше не отображается
    • Region: spb
  3. Подключение
    Вы можете работать с данными любым удобным способом:
    • Через API или SDK
    • С помощью консольных утилит — s3cmd, AWS CLI
    • Через файловые клиенты: Cyberduck, WinSCP, S3 Browser

Работа с файлами

S3 Browser

S3 Browser — бесплатный клиент для работы с S3-хранилищами на Windows. Он даёт возможность работать с файлами через графический интерфейс.
Для подключения к бакету укажите следующие данные:
Display name: можно задать любое удобное имя
Account type: S3 Compatible Storage
API endpoint: s3.spb.sprinthost.ru
Access Key ID: ваш ключ доступа
Secret Access Key: ваш секретный ключ
Заполните поля полученными при создании бакета значениями и нажмите «Add new account».
content-image
Теперь содержимым хранилища можно управлять через приложение, используя стандартные кнопки для скачивания и загрузки.

S3 Explorer

S3 explorer — бесплатный файловый клиент для Unix-подобных систем. Установить его можно, используя snap:
sudo snap install s3explorer
Для подключения к бакету укажите следующие данные:
Profile Name: любое удобное имя
Access Key ID: ваш ключ доступа
Secret Access Key: ваш секретный ключ
Region: Default
Endpoint: https://s3.spb.sprinthost.ru
Введите их в форму программы по шаблону.
content-image
Чтобы проверить корректность введенных данных, нажмите «Test Connection». Если всё верно, кликните «Create».

Настройка AWS CLI

Установите AWS CLI из официальной документации для вашей операционной системы.
Создайте профиль:
aws configure --profile ваш_бакет
Далее укажите данные, полученные при создании хранилища.
AWS Access Key ID [None]: XXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: SECRETKEY
Default region name [None]: spb
Default output format [None]:
Default output format по умолчанию использует json, также можно указать другие значения:
  • json
  • table
  • text
  • yaml
  • yaml-stream
  • off
Базовые команды
Действие
Команда
Действие
Показать файлы в бакете
Команда
aws --endpoint-url=https://s3.spb.sprinthost.ru/ --profile s3-123456 s3 ls s3://ВАШ_БАКЕТ/
Действие
Загрузить файл
Команда
aws --endpoint-url=https://s3.spb.sprinthost.ru/ --profile s3-123456 s3 cp ./file.txt s3://ВАШ_БАКЕТ/file.txt
Действие
Скачать файл
Команда
aws --endpoint-url=https://s3.spb.sprinthost.ru/ --profile s3-123456 s3 cp s3://ВАШ_БАКЕТ/file.txt ./file.txt
Действие
Скопировать файл
Команда
aws --endpoint-url=https://s3.spb.sprinthost.ru/ --profile s3-123456 s3 cp s3://ВАШ_БАКЕТ/old.txt s3://ВАШ_БАКЕТ/new.txt
Действие
Удалить файл
Команда
aws --endpoint-url=https://s3.spb.sprinthost.ru/ --profile s3-123456 s3 rm s3://ВАШ_БАКЕТ/file.txt
Действие
Загрузить папку рекурсивно
Команда
aws --endpoint-url=https://s3.spb.sprinthost.ru/ --profile s3-123456 s3 cp ./папка/ s3://ВАШ_БАКЕТ/папка/ --recursive
Действие
Синхронизировать папки
Команда
aws --endpoint-url=https://s3.spb.sprinthost.ru/ --profile s3-123456 s3 sync ./локальная/ s3://ВАШ_БАКЕТ/удалённая/
Действие
Создать временную ссылку
Команда
aws --endpoint-url=https://s3.spb.sprinthost.ru/ --profile s3-123456 s3 presign s3://ВАШ_БАКЕТ/file.txt --expires-in 3600

Подключение к сайту

WordPress

В WordPress подключение настраивается через плагины. Выбор зависит от того, как вам удобнее работать. В этой инструкции рассмотрим два варианта.
Через админку: любой бесплатный плагин для WordPress (Upcasted S3 Offload, Media Cloud и другие). Подойдёт для простой настройки. В бесплатных версиях нельзя одной кнопкой перенести на S3 старые картинки, загруженные на сайт ранее.
В настройках плагина укажите:
  • Choose your S3 Provider: Other S3 compatible provider
  • Access key ID: идентификатор ключа из панели управления
  • Secret access key: секретный ключ из панели управления
  • Region: Other (custom) - spb
  • Define custom endpoint: s3.spb.sprinthost.ru
Save Connection Settings → Select an existing bucket. Выберите имя бакета и нажмите Save.
content-image
Через консоль: с помощью плагина S3 Uploads. Для установки понадобится подключиться к аккаунту по SSH.

Joomla

Подключение выполняется через плагин Amazon S3 Filesystem.
  • Connection type: Custom S3-compatible storage provider
  • Custom Endpoint: s3.spb.sprinthost.ru
  • Access Key: идентификатор ключа
  • Secret Key: секретный ключ
  • Bucket: имя бакета
  • Region: (custom)
  • Custom Region: spb
content-image

1С-Битрикс

Поддержка S3 уже встроена, дополнительно ничего устанавливать не нужно.
Перейдите в Настройки → Облачные хранилища и нажмите Добавить. Выберите S3 compatible storage и заполните поля:
  • Регион: spb
  • Имя сервера (API host): s3.spb.sprinthost.ru
  • Ключ доступа: идентификатор ключа
  • Секретный ключ: секретный ключ
  • Контейнер: имя бакета
content-image

Настройка политики CORS

При использовании файлов из хранилища на сайтах вы можете столкнуться с ошибкой, связанной с политикой CORS. Чтобы её решить, нужно настроить разрешение кросс-доменных запросов в S3.
Настройка правил CORS для бакетов выполняется с помощью AWS CLI.

Создание файла CORS

Создайте JSON-файл cors.json с описанием нужных правил. Стандартный формат для AWS S3 выглядит следующим образом:
{
  "CORSRules": [
    {
      "AllowedHeaders": ["*"],
      "AllowedMethods": ["GET", "HEAD"],
      "AllowedOrigins": ["https://example.ru"],
    }
  ]
}
Подробнее о параметрах:
  • AllowedOrigins — список доменов, с которых разрешены запросы. Используйте ["*"], если хотите разрешить запросы с любых доменов.
  • AllowedMethods — разрешенные HTTP-методы (GET, POST, PUT, DELETE, HEAD).
  • AllowedHeaders — заголовки, которые клиент может отправлять в запросе. ["*"] разрешает любые заголовки.

Работа с правилами в бакете

Чтобы применить настройки к бакету, используйте команду:
aws s3api put-bucket-cors --bucket s3-123456 --endpoint-url https://s3.spb.sprinthost.ru --cors-configuration file://cors.json
Чтобы проверить, какие CORS-правила уже применены к бакету, выполните команду:
aws s3api get-bucket-cors --bucket s3-123456 --endpoint-url https://s3.spb.sprinthost.ru
В ответе вы получите ранее загруженный JSON.
Чтобы удалить текущие правила, используйте такую команду:
aws s3api delete-bucket-cors --bucket s3-123456 --endpoint-url https://s3.spb.sprinthost.ru

Проверка отдачи заголовков

Чтобы убедиться, что прокси корректно отдает CORS-заголовки, отправьте тестовый запрос к любому файлу в бакете с помощью curl. Укажите в команде сайт, для которого выполняется проверка, и путь до файла.
curl -I -H "Origin: https://example.ru" "https://s3.spb.sprinthost.ru/s3-123456/picture.jpg"
В выводе вы должны увидеть строки, подтверждающие работу CORS:
curl -I -H "Origin: https://example.ru" "https://s3.spb.sprinthost.ru/s3-123456/picture.jpg"
HTTP/1.1 200 OK
Access-Control-Allow-Origin: https://example.ru
Vary: Origin
Access-Control-Allow-Methods: HEAD

Проверка preflight-запроса

Браузеры перед загрузкой файлов часто отправляют предварительный запрос методом OPTIONS. Проверить его можно так:
curl -v -X OPTIONS -H "Origin: https://example.ru" -H "Access-Control-Request-Method: GET" "https://s3.spb.sprinthost.ru/s3-123456/picture.jpg"
В ответе должен вернуться статус 200 OK и список разрешенных методов и заголовков:
HTTP/1.1 200 OK
...
Access-Control-Allow-Origin: https://example.ru
Access-Control-Allow-Methods: GET, HEAD
Access-Control-Allow-Headers: *
То же самое можно проверить и с помощью wget.
wget --server-response --header="Origin: https://example.ru" -O /dev/null "https://s3.spb.sprinthost.ru/s3-123456/picture.jpg"