Сегодня мы рассмотрим кейс, как быстро развернуть приложения на Laravel в экосистеме Timeweb Cloud Apps. Laravel — это современный PHP-фреймворк, который значительно упрощает создание веб-приложений, предоставляя встроенные инструменты для работы с HTML-шаблонами, маршрутизацией и взаимодействием с базами данных.
Архитектура Laravel улучшает производительность и SEO, поскольку поисковые системы могут легко индексировать страницы, а пользователи моментально получают доступ к необходимой информации за счет серверного рендеринга страниц (не нагружая клиент большим количеством JS-кода).
Рассматривать деплой приложения на Laravel мы будем на примере сайта-визитки из трех страниц, редактируемыми новостями и микро-админкой.
Вам потребуется около 5-7 минут для деплоя подготовленного demo-сайта и еще 10 минут — для рассмотрения деталей кода. В результате вы получите:
Вот так будет выглядеть ваше приложение:
Для упрощения данного гайда мы не делали сложный дизайн, чтобы вы могли легко применить свои шаблоны, одновременно имея уже настроенный рабочий сайт.
Мы подготовили для вас приложение (сайт-визитку с админкой новостей) для демонстрации простоты деплоя Laravel-приложений на нашем сервисе Timeweb Cloud Apps. Итак, приступим.
Откройте в браузере страницу репозитория с шаблоном подготовленного демо-приложения и нажмите кнопку «Fork», чтобы скопировать его в свой аккаунт Github.
Сохраните репозиторий, название репозитория можете оставить таким же.
Поскольку вы уже зарегистрированы в Timeweb Cloud, перейдите в панели в раздел Apps → Создать и выберите тип приложения «Laravel 8.3».
Теперь вам нужно подключить свой GitHub аккаунт, чтобы платформа могла отслеживать изменения в проекте и автоматически запускать деплой. Дополнительные настройки не требуются — просто нажмите кнопку «Подключить аккаунт» и выберите ваш репозиторий в Github.
Во время подключения вам будет предложено окно авторизации GitHub. Введите свой код авторизации и нажмите кнопку «Подтвердить».
Далее укажите репозиторий, к которому вы подключаете систему Timeweb Cloud Apps:
Также убедитесь, что переключатель установлен на «Сборка по последнему коммиту».
Вы успешно выполнили два необходимых шага. Далее прокрутите страницу вниз и установите два параметра:
Добавьте команду сборки, которая запускает Seeder (добавление первоначальных данных в таблицы):
php artisan db:seed --force
Установите название вашего приложения, например «Демо-сайт на Laravel8».
Теперь нажмите кнопку «Запустить деплой» и наблюдайте за процессом.
Платформа Timeweb Cloud Apps на ваших глазах соберет приложение, покажет вам весь процесс компиляции приложения и деплоя на сервер. Первая сборка займет около 5-7 минут, дальнейшие обновления занимают менее 20 секунд.
В процессе деплоя сервер разворачивает все зависимости и запускает миграции БД, однако в нашем демо-приложении миграции не включены, мы просто положили в репозиторий готовую базу sqlite3
, чтобы демо сайт сразу выглядел заполненным.
Ну что же, поздравляем! Спустя несколько минут ваше приложение на Laravel успешно развернуто на сервисе Timeweb Cloud Apps, и теперь вы можете использовать его без необходимости настройки хостинга.
В своих проектах, которые вы в будущем будете выкладывать на сервис Timeweb Cloud Apps, обязательно добавляйте следующий код в файл app/Providers/AppServiceProvider.php
:
public function boot()
{
URL::forceScheme('https');
}
Это связано с тем, что при деплое платформа автоматически переводит проект на HTTPS-домен и генерирует ключи SSL. Если вы не добавите данный код в свой проект, страницы с вызовами AJAX-запросов будут работать некорректно, так как будут обращаться к HTTP-путям, и Laravel будет думать, что таких путей не существует (например, при submit форм ввода).
Визуально ваше приложение состоит из трех блоков:
Url |
Описание |
|
Корневая страница сайта |
|
Страница «О нас» |
|
Страница «Контакты» |
|
Админка, где вы можете добавлять новости, которые размещены на главной странице сайта. |
Вот так выглядит шаблон сайта:
Так выглядит простая админка добавления новостей (она находится по адресу https://ваш_url/admin/news/create
):
Наш демо-проект соблюдает безопасность, и страницы админки открываются только авторизованным пользователям со статусом is_admin=1
. Своего пользователя вы можете создать следующим образом.
Откройте файл database/seeders/AdminUserSeeder.php
и внесите собственные логин и пароль в методе run
.
public function run()
{
DB::table('users')->insert([
'name' => 'Admin 2',
'email' => 'admin2@example.com',
'password' => Hash::make('ваш_пароль'),
'is_admin' => 1,
]);
}
Далее в терминале запустите команду
php artisan db:seed --class=AdminUserSeeder
Теперь у вас есть новый администратор, и вы можете запушить изменения на сервер (см. инструкцию выше). В данном случае, для создания коммита у вас должны измениться два файла: AdminUserSeeder.php
и database/database.sqlite
.
После сохранения изменений в GitHub можете смело идти редактировать новости на свой публичный сайт.
Для локального запуска приложения и дальнейшей разработки (доработки) наберите в командной строке следующую команду: php artisan serve
и откройте в браузере адрес http://127.0.01:8000/
.
Откройте редактор или IDE (например, VS Code или Zed) и загрузите ваш проект. Структура каталогов вашего приложения выглядит следующим образом:
Основной каталог, содержащий логику приложения, — это App
. Назначение остальных каталогов, которые нас интересуют:
/app
— каталог, который содержит контроллеры (бизнес-логику приложения), а также модели используемых таблиц (в нашем случае это Users
и News
)./resources
— содержит стили, JS-файлы и, собственно, сами шаблоны страниц Laravel в формате Blade (это основной каталог, где вы можете редактировать визуальное представление страниц)./routes/web.php
— здесь прописаны пути к страницам админки и сайта, а также правила авторизации (например, страницы сайта отдаются всем, а админка только авторизованным пользователям).Далее, давайте рассмотрим директорию /app/Http/Controllers
и разберем логику работы контроллеров. Для начала откройте файл SiteController.php
.
Как видно из кода, он содержит методы рендеринга страниц согласно URL: /
, /about
и /contact
, при этом главная страница открывается с передачей в нее массива новостей из таблицы News
(последние пять записей с обратной сортировкой по дате). Здесь нет ничего особенного — стандартный рендеринг страниц с передачей массивов данных для шаблонов Blade. По аналогии, вы можете добавить обработку других URL из вашего проекта, загрузить для них данные и запустить рендер шаблонов.
Далее рассмотрим файл NewsController.php
, который содержит логику добавления новых новостей для сайта:
Метод create
просто рендерит форму для ввода новостей, а вот метод store
, который вызывается при submit
новой новости, сначала делает проверку, затем вызывает метод из модели News:create
, который и сохраняет вашу новую запись с новостью в таблицу News
, а затем выводит очищенную форму с диалогом Success
.
В Laravel модели используются для представления таблиц базы данных и взаимодействия с ними. Примером такой модели является класс News
, который связывается с таблицей, содержащей новости:
class News extends Model {
use HasFactory;
protected $fillable = [
'title',
'content',
'created_at',
'updated_at',
];
}
Описание кода
Класс News
расширяет базовый класс Model
, предоставляемый Laravel, чтобы получить доступ к функциональности ORM. Это позволяет легко работать с записями в базе данных, выполняя операции создания, чтения, обновления и удаления.
Массив $fillable
определяет, какие поля можно массово назначать. В данном случае, это title
, content
, created_at
и updated_at
. Этот массив защищает от массового заполнения нежелательных полей, гарантируя, что только перечисленные атрибуты будут сохраняться в базу данных.
Для тренировки вы можете убрать из кода created_at
и updated_at
и попробовать обновить эти поля. Вы не сможете это сделать.
Модель User
в Laravel представляет собой класс, связанный с таблицей пользователей в базе данных, и используется для управления процессом аутентификации и авторизации.
Описание кода
Класс User
находится в пространстве имен App\Models
и использует несколько встроенных классов Laravel:
Класс, переменная |
Назначение |
|
Базовый класс для моделей, связанных с аутентификацией. |
|
Для отправки уведомлений пользователю. |
Массив |
Определяет поля, которые могут быть обновляться пользователем. В данном случае это |
Массив |
Содержит поля, которые будут скрыты при запросах от клиента. Это полезно для защиты конфиденциальных данных, таких как |
Массив |
Определяет типы данных для атрибутов. Например, |
Контроллер App\Http\Controllers\Auth\AdminAuthController.php
предназначен для управления процессом аутентификации администраторов, включая отображение формы входа, обработку логина и выход из системы.
Тело функции:
class AdminAuthController extends Controller
{
public function showLoginForm()
{
return view('auth.admin_login');
}
public function login(Request $request)
{
// Проверка учетных данных с использованием базы данных
$credentials = $request->only('email', 'password');
if (Auth::attempt($credentials)) {
// Проверяем, является ли пользователь администратором
$user = Auth::user();
if ($user->is_admin) {
session(['is_admin' => true]); // Сохраняем информацию о том, что пользователь админ
return redirect()->route('admin.news.create')->with('success', 'Вы успешно вошли в админку!');
} else {
Auth::logout();
return redirect()->back()->withErrors(['email' => 'У вас нет прав администратора.']);
}
}
return redirect()->back()->withErrors(['email' => 'Неверные учетные данные.']);
}
public function logout()
{
session()->forget('is_admin'); // Удаляем сессию
return redirect('/')->with('success', 'Вы вышли из админки!');
}
}
Описание кода
Класс, переменная |
Назначение |
Классы |
Используются для обработки HTTP-запросов и управления аутентификацией. |
Метод |
Отображает форму входа для администратора. Рендерит представление (view) |
Метод |
Получает учетные данные ( Использует метод Далее проверяется, является ли пользователь администратором (проверка поля Если Если Если учетные данные неверны, возвращается сообщение об ошибке. |
Метод |
В нашем проекте не используется, приведен для примера. Удаляет информацию о том, что пользователь является администратором, из сессии. Выполняет перенаправление на главную страницу с сообщением о выходе. |
HTML (Blade) шаблоны наших страниц находятся в папке resources/views/site
. Здесь мы не будем размещать весь громоздкий код HTML, вы можете сами зайти и посмотреть в своем редакторе.
Логика шаблонов проста: мы делаем HTML-структуру, где вставляем данные в нужные места. Например, на главной страницы новости рендерятся следующим образом (файл resources/views/site/index.blade.php
):
<div class="row">
<div class="col-md-12">
<h2 class="text-center">Новости</h2>
@foreach($news as $item)
<div class="card mb-3">
<div class="card-body">
<h5 class="card-title">{{ $item->title }}</h5>
<p class="card-text">{{ Str::limit($item->content, 100) }}</p>
<span class="text-muted news-date">{{ $item->created_at->format('d.m.Y') }}</span>
</div>
</div>
@endforeach
@if($news->isEmpty())
<p class="text-center">Нет новостей для отображения.</p>
@endif
</div>
</div>
Из кода видно, что для рендера новостей мы запускаем цикл @foreach($news as $item
, который берет данные из переменной-массива $news
, полученной из контроллера, и вставляет поля в HTML-шаблон: <h5 class="card-title">{{ $item->title }}</h5>
. Это достаточно стандартная логика Laravel, поэтому здесь мы не будем подробно описывать все ее механизмы.
Остальные шаблоны страниц устроены аналогично: получаем переменные из контроллера и рендерим их значения в нужных HTML-блоках.
В этой статье мы рассмотрели, как создать простое приложение на Laravel и развернуть (задеплоить) его в публичном доступе, не прибегая к использованию собственных серверов и без необходимости покупки сложного хостинга.
Для новичков важно отметить, что Laravel — это современный фреймворк для PHP, который существенно упрощает создание веб-приложений, делая этот процесс быстрее и удобнее, а самое главное безопаснее. Он способствует высокой производительности приложений, улучшает видимость в поисковых системах. Его не сложно освоить, особенно если у вас уже есть базовые знания в веб-разработке на PHP, и он подходит как для начинающих разработчиков, так и для профессионалов, поскольку имеет огромное комьюнити и хорошую документацию.
Мы, в свою очередь, помогаем вам упростить развертывание вашего кода в интернете: здесь вы сможете получить безопасные публичные ссылки на проекты, бесплатные SSL-сертификаты и многое другое. Для быстрого старта мы рекомендуем воспользоваться Timeweb Cloud Apps — это идеальная платформа для запуска приложений.