Уроки курса
1 Основы синтаксиса PHP 8
60 мин
2 Функции и управляющие конструкции
60 мин
3 Объектно-ориентированное программирование на PHP
60 мин
4 Наследование, интерфейсы и полиморфизм
60 мин
5 Основы баз данных MySQL и работа через PDO
60 мин
6 Архитектурный паттерн MVC
60 мин
7 Введение в Laravel и настройка окружения
60 мин
8 Маршрутизация и контроллеры в Laravel
60 мин
9 Шаблонизатор Blade и создание интерфейса
60 мин
10 Миграции баз данных и Eloquent ORM
60 мин
11 Связи моделей в Eloquent — Настройка связей 'один …
60 мин
12 Аутентификация и защита маршрутов
60 мин
13 Разработка каталога товаров и категорий
60 мин
14 Реализация корзины покупок через сессии
60 мин
15 Оформление заказа и транзакции базы данных
60 мин
16 Интеграция платежной системы Stripe
60 мин
17 Интеграция платежной системы Vipps
60 мин
18 Разработка панели администратора
60 мин
19 Оптимизация и подготовка к production
60 мин
20 Деплой Laravel-приложения на сервер
60 мин
21 Основы PHP 8: Синтаксис, переменные и управляющие конструкции
60 мин
22 Функции и массивы в PHP 8
60 мин
23 Объектно-ориентированное программирование: Классы и объекты
60 мин
24 Продвинутое ООП: Наследование, интерфейсы и полиморфизм
60 мин
25 Основы баз данных: Проектирование БД и работа с …
60 мин
26 Взаимодействие PHP с MySQL через PDO
60 мин
27 Архитектура MVC и введение в фреймворк Laravel
60 мин
28 Маршрутизация и контроллеры в Laravel
60 мин
29 Шаблонизатор Blade: Создание пользовательского интерфейса
60 мин
30 Миграции и Eloquent ORM: Создание таблиц товаров
60 мин
31 Связи в Eloquent ORM: Отношения между моделями
60 мин
32 Аутентификация и авторизация пользователей
60 мин
33 Разработка каталога товаров: Вывод, фильтрация и пагинация
60 мин
34 Реализация корзины покупок с использованием сессий
60 мин
35 Оформление заказа: Работа с формами и валидация
60 мин
36 Транзакции базы данных: Сохранение заказа
60 мин
37 Интеграция платежной системы Stripe
60 мин
38 Интеграция платежной системы Vipps
60 мин
39 Создание панели администратора
60 мин
40 Подготовка к production и деплой приложения
60 мин
41 Основы PHP 8 и синтаксис
60 мин
42 Объектно-ориентированное программирование на PHP
60 мин
43 Продвинутое ООП и интерфейсы
60 мин
44 Основы баз данных и MySQL
60 мин
45 Архитектурный паттерн MVC
60 мин
46 Введение в Laravel и маршрутизация
60 мин
47 Шаблонизатор Blade и верстка интерфейса
60 мин
48 Миграции и структура базы данных
60 мин
49 Eloquent ORM и модели
60 мин
50 Отношения в Eloquent ORM
60 мин
51 Авторизация и защита маршрутов
60 мин
52 Создание каталога товаров
60 мин
53 Реализация корзины покупок
60 мин
54 Оформление заказа и транзакции БД
60 мин
55 Интеграция платежной системы Stripe
60 мин
56 Интеграция платежной системы Vipps
60 мин
57 Панель администратора: управление товарами
60 мин
58 Панель администратора: управление заказами
60 мин
59 Подготовка к production и деплой
60 мин
60 Запуск и тестирование готового интернет-магазина
60 мин

Деплой Laravel-приложения на сервер

Перенос готового интернет-магазина на боевой хостинг, настройка веб-сервера и окружения. Завершение работы над проектом.

Прогресс урока: 0%

Что такое Деплой?

Деплой (Deployment) — это процесс развертывания вашего кода на публичном сервере, чтобы сайт стал доступен пользователям по всему миру через доменное имя. Для серьезных Laravel-проектов обычный виртуальный хостинг (Shared Hosting) подходит плохо из-за ограничений в настройках терминала. Мы будем использовать VPS (Virtual Private Server) с операционной системой Ubuntu, веб-сервером Nginx и PHP-FPM.

В этом финальном уроке курса мы соберем воедино все знания. Главная задача при деплое — обеспечить безопасность. Исходный код приложения не должен быть доступен извне.

Настройка веб-сервера (Nginx) и Document Root

Важнейшая концепция безопасности Laravel: точкой входа (Document Root) для веб-сервера должна быть назначена папка public вашего проекта, а не корневая директория. Если вы направите домен в корень проекта, злоумышленники смогут скачать ваш файл .env со всеми паролями от баз данных и платежных шлюзов, просто обратившись к yoursite.com/.env.

Когда Nginx смотрит в папку public, файл index.php внутри нее перехватывает запросы и загружает ядро фреймворка из директорий выше, которые недоступны из интернета напрямую.

nginx
server {
    listen 80;
    server_name yourdomain.com;
    
    # КРИТИЧЕСКИ ВАЖНО: Document Root указывает на папку public!
    root /var/www/shop/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Настройка файла .env для Production

При переносе проекта на сервер вы создаете новый файл .env (он не переносится через Git). В нем необходимо изменить ключевые параметры:

  • APP_ENV=production — сообщает фреймворку, что мы в боевом режиме.
  • APP_DEBUG=false — ОБЯЗАТЕЛЬНО! Отключает вывод детальных ошибок на экран. Если оставить true, пользователи увидят ваш код и пароли при любой ошибке.
  • APP_URL=https://yourdomain.com — для правильной генерации ссылок.
  • Пароли от базы данных сервера (DB_DATABASE, DB_USERNAME, DB_PASSWORD).
  • Боевые ключи Stripe/Vipps вместо тестовых.
bash
# Настройка прав доступа (Permissions)
# Веб-серверу (обычно пользователь www-data) нужны права на запись в две папки:

cd /var/www/shop

# Передаем владельца директорий пользователю веб-сервера
sudo chown -R www-data:www-data storage
sudo chown -R www-data:www-data bootstrap/cache

# Устанавливаем права 775 (чтение, запись, выполнение для владельца и группы)
sudo chmod -R 775 storage
sudo chmod -R 775 bootstrap/cache

Миграции базы данных на Production

После загрузки кода и настройки .env нужно создать таблицы в базе данных сервера. При выполнении команды php artisan migrate в режиме production (когда APP_ENV=production), Laravel заботливо спросит вас: "Вы действительно хотите запустить миграции в production? Это может удалить данные". Поскольку процесс деплоя часто автоматизируют скриптами, этот вопрос остановит выполнение скрипта. Чтобы подтвердить действие автоматически, используется специальный флаг.

Какой флаг нужно добавить к команде php artisan migrate, чтобы запустить миграции на production сервере без интерактивного подтверждения?