Данная инструкция подробно описывает, как подключить Amazon S3-совместимое облачное хранилище к приложению Laravel. В процессе вы научитесь выполнять настройку подключения, загружать файлы через интерфейс, маршруты и формы, а также оптимизировать изображения перед загрузкой.
Мы используем S3-хранилище от Timeweb Cloud для демонстрации возможностей интеграции. Оно отлично подходит для хранения медиафайлов, резервных копий и других данных благодаря своей масштабируемости, надежности и безопасности. Следуя данной инструкции, вы сможете легко настроить свое приложение для работы с Timeweb Cloud S3 и эффективно управлять хранилищем данных.
Что такое Amazon S3?
Amazon S3 (Simple Storage Service) — это облачное хранилище для безопасного и масштабируемого хранения данных. Подходит для файлов любого размера и формата, часто используется для хранения изображений, видеороликов, резервных копий и других данных.
Преимущества S3:
- Любые данные: автоматическая подстройка под объем.
- Надежность: сохранность данных до 99.98%.
- Интеграции: поддержка API и SDK.
- Экономичность: оплата только за использованные ресурсы.
- Безопасность: встроенная шифрация и поддержка IAM-политик.
Если у вас есть сайт с большим количеством медиа-контента, таким как изображения или видео, Amazon S3 станет более выгодным и эффективным решением, чем покупка сервера с большим объемом диска. S3 позволяет гибко масштабировать хранилище под ваши нужды, обеспечивает высокую надежность данных и избавляет от забот о физических серверах. Вы платите только за использованные ресурсы, а встроенные инструменты безопасности и интеграции делают его идеальным выбором для работы с большими объемами данных.
Создание хранилища S3 в Timeweb Cloud
- Зарегистрируйтесь в Timeweb Cloud.
- Перейдите в раздел «Хранилище S3» → нажмите «Создать».
- Выберите:
-
- Размер хранилища: фиксированный или произвольный.
- Тип бакета: приватный или публичный.
-
Нажмите кнопку «Заказать».

Для примера будем использовать публичное хранилище с фиксированным размером 10 ГБ.
Объектное S3-хранилище
совместимое с протоколом Amazon S3.
Ручная загрузка изображений
Загрузка файла через интерфейс
- Войдите в панель Timeweb Cloud.
- Откройте бакет.
- Перейдите во вкладку «Объекты».
- Выберите изображение для загрузки или перетащите в поле загрузки.
- Скопируйте URL загруженного изображения.

Проверка доступности изображения
Создайте HTML-файл:
Откройте HTML-файл в браузере. Если изображение отображается, загрузка выполнена успешно.
Установка Laravel и подключение S3
Установка Laravel
Установите Laravel с помощью Composer:
Установка пакета для работы с S3
Установите библиотеку Flysystem:
Настройка диска S3
В файле config/filesystems.php найдите раздел с ключом s3 и создайте новый, например, tws3. Это удобно, если планируете использовать несколько облачных хранилищ или хотите отличить настройки Timeweb Cloud от других:

Почему важно копировать диск и переименовывать ключи?
- Управляемость: Если понадобится добавить другое S3-хранилище (например, от Amazon или Google), вы сможете легко переключаться между настройками.
- Гибкость: Уникальные настройки под каждого провайдера позволяют избегать конфликтов в конфигурации.
- Читабельность: Переименование ключа (например, в
tws3) помогает понять, что этот диск настроен специально для Timeweb Cloud S3.
Добавление ключей в .env
В корневой файл .env вашего проекта добавьте переменные окружения:
Добавьте значения переменных из настроек бакета.

Должно получиться примерно так:

Почему важно добавлять ключи в .env?
-
Безопасность: Хранение конфиденциальной информации (ключей доступа) в
.envзащищает их от попадания в публичные репозитории (например, GitHub), так как этот файл обычно добавляют в.gitignore. -
Удобство: Все параметры конфигурации собраны в одном месте, что облегчает их редактирование при переходе на другой провайдер или изменении настроек.
-
Гибкость: При переносе проекта на другой сервер вам достаточно обновить только файл .env, не меняя исходный код.
Загрузка файлов в S3
Через маршрут
Добавьте маршрут в файл routes/web.php:
Скопируйте изображение с названием image.jpg в папку public.
Запустите встроенный сервер для локальной разработки с помощью команды:
Теперь ваше приложение будет доступно по адресу http://127.0.0.1:8000 или localhost:8000. В дальнейшем в инструкции будет использоваться адрес localhost.
Откройте страницу http://localhost:8000/upload в браузере. Если отображается строка «Файл загружен!», загрузка выполнена успешно. Загрузку файла можно проверить в интерфейсе Timeweb Cloud.

Через форму
Добавьте маршрут для отображения формы в файл routes/web.php:
Создайте файл resources/views/form.blade.php:
Добавьте маршрут для обработки загрузки изображения:
Откройте страницу http://localhost:8000/form в браузере. Выберите файл и нажмите «Загрузить». Если отображается строка «Файл загружен через форму!», загрузка выполнена успешно.
Оптимизация загрузки
Мы можем уменьшить размеры изображений для экономии места в хранилище.
Установите библиотеку Intervention Image:
Оптимизируйте изображение перед загрузкой:

Отображение изображений из S3 через фасад Storage
Для демонстрации добавьте следующий маршрут в routes/web.php:
Создайте файл resources/views/view-file.blade.php с содержимым:
Откройте страницу http://localhost:8000/view-file в браузере и запустите инспектор кода, нажав клавишу F12. Перейдите на вкладку «Elements» и найдите тег <img>. В атрибуте src вы увидите ссылку, указывающую на файл, хранящийся в S3. Это подтверждает успешное отображение изображения из облачного хранилища.

Использование S3 для хранения аватаров пользователей
В этом разделе мы рассмотрим, как настроить загрузку и хранение аватаров пользователей в облачном хранилище S3. Аватар будет привязан к пользователю через модель User, а ссылка на файл будет сохраняться в базе данных SQLite.
- Установите SQLite командой:
- Создайте файл базы данных:
database/database.sqlite. - Настройте подключение в базе данных в файле
.env:
- Перезагрузите встроенный сервер. Для этого просто нажмите Ctrl + C в терминале, где запущен сервер и запустите сервер еще раз:
Подготовка базы данных
Для начала создадим новое поле avatar в таблице users для хранения ссылки на аватар в облаке.
- Создайте миграцию командой:
- Добавьте в миграцию
database/migrations/<временная_метка>_add_avatar_to_users_table.phpследующий код:
- Выполните миграцию для применения изменений:
Подготовка пользователя
Для тестирования создадим пользователя через консоль Tinker — это интерактивная оболочка Laravel, которая позволяет выполнять команды и взаимодействовать с моделями напрямую.
- Запустите Tinker:
- Создайте нового пользователя:

После выполнения команды вы увидите созданного пользователя. Ему будет присвоен идентификатор 1, который мы будем использовать в следующих примерах. Если ID отличается, замените его в коде на актуальный.
Подготовка маршрутов
Добавим три маршрута в файл routes/web.php для отображения профиля, загрузки аватара и обработки формы.
- Маршрут для отображения профиля пользователя:
- Маршрут для формы загрузки аватара:
- Маршрут для обработки формы и загрузки аватара в S3:
Подготовка шаблонов
Для удобства все шаблоны будут храниться в папке resources/views/profile.
- Шаблон формы для загрузки аватара (
resources/views/profile/create.blade.php):
- Шаблон профиля пользователя (
resources/views/profile/index.blade.php):

Теперь у вас настроена загрузка и отображение аватаров пользователей через S3.
- Перейдите на страницу
/profile/createи загрузите аватар. - После успешной загрузки вы будете перенаправлены на страницу
/profile, где можно увидеть аватар. - Чтобы убедиться, что аватар загружается из S3, откройте инспектор кода (нажмите F12) в браузере. Перейдите на вкладку «Elements» и найдите тег
<img>. В атрибутеsrcвы увидите ссылку, указывающую на файл, хранящийся в S3.
Выгодные тарифы на облако в Timeweb Cloud
477 ₽/мес
657 ₽/мес
Заключение
Интеграция Laravel с Timeweb Cloud S3 предоставляет гибкие и безопасные возможности для хранения данных. Следуя этой инструкции, вы освоите подключение S3-совместимого хранилища, научитесь загружать файлы через интерфейс, маршруты и формы, а также настраивать отображение файлов, таких как аватары пользователей.
Эти решения помогут вам:
- Сократить затраты на хранение медиафайлов благодаря использованию облака.
- Обеспечить надежность и защиту данных с минимальными усилиями.
- Повысить масштабируемость вашего проекта, без необходимости беспокоиться о серверных ограничениях.
Теперь ваше Laravel-приложение готово к работе с S3-хранилищем, что позволяет сосредоточиться на развитии функциональности и удобстве для пользователей.
