EasyТеория5 min

Установка Laravel

Composer, Laravel Installer, системные требования, настройка окружения (.env), создание проекта

Системные требования

Laravel 11 предъявляет следующие минимальные требования к серверному окружению:

Требование Минимальная версия
PHP 8.2+ (рекомендуется 8.4)
Composer 2.x
BCMath PHP Extension Обязательно
Ctype PHP Extension Обязательно
cURL PHP Extension Обязательно
DOM PHP Extension Обязательно
Fileinfo PHP Extension Обязательно
JSON PHP Extension Обязательно
Mbstring PHP Extension Обязательно
OpenSSL PHP Extension Обязательно
PCRE PHP Extension Обязательно
PDO PHP Extension Обязательно
Tokenizer PHP Extension Обязательно
XML PHP Extension Обязательно

Ловушка экзамена: Начиная с Laravel 11, минимальная версия PHP повышена до 8.2. Laravel 10 поддерживал PHP 8.1+. На экзамене могут уточнять минимальную версию PHP для конкретной версии фреймворка.

Установка Composer

Composer -- это менеджер зависимостей для PHP, который является обязательным инструментом для работы с Laravel.

<?php
// Composer autoloader — the heart of modern PHP
// Laravel uses PSR-4 autoloading standard
require __DIR__ . '/vendor/autoload.php';

// After this line, all classes from packages
// and your app are available without manual require

Глобальная установка Composer

# Download and install Composer globally
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"

# Verify installation
composer --version

Структура composer.json

{
    "name": "laravel/laravel",
    "type": "project",
    "require": {
        "php": "^8.2",
        "laravel/framework": "^11.0"
    },
    "require-dev": {
        "fakerphp/faker": "^1.23",
        "laravel/pail": "^1.0",
        "laravel/pint": "^1.13",
        "laravel/sail": "^1.26",
        "mockery/mockery": "^1.6",
        "nunomaduro/collision": "^8.0",
        "phpunit/phpunit": "^11.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        }
    }
}

Для экзамена: Секция autoload.psr-4 определяет сопоставление пространств имён и директорий. Ключ "App\\" означает, что класс App\Models\User будет загружен из файла app/Models/User.php.

Создание нового проекта

Способ 1: Через Composer create-project

# Create a new Laravel project
composer create-project laravel/laravel my-app

# With specific version
composer create-project laravel/laravel my-app "11.*"

# Navigate to project directory
cd my-app

# Start development server
php artisan serve

Способ 2: Через Laravel Installer

# Install Laravel Installer globally
composer global require laravel/installer

# Create a new project
laravel new my-app

# Laravel Installer offers interactive setup:
# - Starter Kit (Breeze, Jetstream, None)
# - Testing framework (Pest, PHPUnit)
# - Database (SQLite, MySQL, PostgreSQL, SQL Server)
# - Git repository initialization

Важно для Senior: Laravel Installer в новых версиях предлагает интерактивную настройку при создании проекта, включая выбор стартового набора, тестового фреймворка и базы данных. Это значительно ускоряет начальную настройку.

Способ 3: Laravel Sail (Docker)

# Create project with Sail (Docker-based)
curl -s "https://laravel.build/my-app" | bash

# With specific services
curl -s "https://laravel.build/my-app?with=mysql,redis,meilisearch" | bash

# Start the environment
cd my-app
./vendor/bin/sail up -d

# Run artisan commands through Sail
./vendor/bin/sail artisan migrate
./vendor/bin/sail composer require laravel/sanctum
<?php
// Sail uses Docker under the hood
// Default services include: MySQL, Redis, Meilisearch, Mailpit, Selenium
// You can customize services in docker-compose.yml

// Sail provides a convenient shell alias
// Add to ~/.bashrc or ~/.zshrc:
// alias sail='sh $([ -f sail ] && echo sail || echo vendor/bin/sail)'

Файл окружения (.env)

Laravel использует библиотеку vlucas/phpdotenv для управления переменными окружения.

Структура .env файла

# Application settings
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:generated_key_here
APP_DEBUG=true
APP_TIMEZONE=UTC
APP_URL=http://localhost

# Logging
LOG_CHANNEL=stack
LOG_LEVEL=debug

# Database
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

# Cache & Sessions
CACHE_STORE=database
SESSION_DRIVER=database
QUEUE_CONNECTION=database

# Redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

# Mail
MAIL_MAILER=log
MAIL_HOST=127.0.0.1
MAIL_PORT=2525

Генерация ключа приложения

# Generate APP_KEY — REQUIRED for encryption
php artisan key:generate

# The key is used for:
# - Encrypting cookies
# - Session data encryption
# - Encrypting values with Crypt facade
# - Password reset tokens

Критически важно: Без APP_KEY шифрование не будет работать корректно. При деплое на новый сервер обязательно нужно сгенерировать ключ. Если ключ изменился, все ранее зашифрованные данные станут нечитаемыми.

Доступ к переменным окружения

<?php
declare(strict_types=1);

// Method 1: env() helper — ONLY in config files!
// config/database.php
return [
    'default' => env('DB_CONNECTION', 'mysql'),
    'connections' => [
        'mysql' => [
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
        ],
    ],
];

// Method 2: config() helper — USE EVERYWHERE in application code
$dbHost = config('database.connections.mysql.host');
$appName = config('app.name', 'Laravel'); // With default value

// Method 3: Env facade (rarely used)
use Illuminate\Support\Env;
$value = Env::get('CUSTOM_VAR');

Ловушка экзамена: Функция env() должна вызываться ТОЛЬКО внутри конфигурационных файлов (папка config/). В коде приложения (контроллерах, сервисах, моделях) всегда используйте config(). Причина: после кэширования конфигурации (php artisan config:cache) функция env() возвращает null для всех переменных, потому что .env файл не загружается.

.env.example и .env.testing

# .env.example — template for team members
# Committed to version control, contains placeholder values
APP_NAME=Laravel
DB_CONNECTION=mysql
DB_DATABASE=your_database

# .env.testing — used when running tests
# Overrides .env values during testing
APP_ENV=testing
DB_CONNECTION=sqlite
DB_DATABASE=:memory:
<?php
declare(strict_types=1);

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\App;

final class AppServiceProvider extends ServiceProvider
{
    public function boot(): void
    {
        // Check current environment
        if (App::environment('production')) {
            // Force HTTPS in production
            \Illuminate\Support\Facades\URL::forceScheme('https');
        }

        // Check multiple environments
        if (App::environment(['local', 'staging'])) {
            // Enable debug tools
        }
    }
}

Первый запуск

Стандартный набор команд после создания проекта

# 1. Copy environment file
cp .env.example .env

# 2. Generate application key
php artisan key:generate

# 3. Install dependencies
composer install

# 4. Install frontend dependencies
npm install

# 5. Run migrations
php artisan migrate

# 6. Seed database (if seeders exist)
php artisan db:seed

# 7. Start development server
php artisan serve
# Application available at http://localhost:8000

# 8. Start Vite dev server (for frontend assets)
npm run dev

Artisan -- командная утилита Laravel

# List all available commands
php artisan list

# Get help for a specific command
php artisan help migrate

# Useful artisan commands for getting started
php artisan about             # Application overview (Laravel 11+)
php artisan env               # Display current environment
php artisan --version          # Laravel version
php artisan tinker             # Interactive REPL
<?php
declare(strict_types=1);

// Tinker — Laravel's powerful REPL
// Perfect for quick testing and debugging

// In tinker you can:
// > App\Models\User::count();
// > App\Models\User::factory()->create();
// > config('app.name');
// > event(new App\Events\UserRegistered($user));

Laravel Herd (macOS / Windows)

Laravel Herd -- это нативная среда разработки для Laravel, которая включает PHP, Nginx и другие инструменты.

# Herd provides:
# - Pre-installed PHP (multiple versions)
# - Nginx configuration
# - Automatic .test domain resolution
# - Node.js included
# - Zero configuration

# With Herd, your projects at ~/Herd are automatically served:
# ~/Herd/my-app → http://my-app.test

Для Senior разработчика: На продакшене рекомендуется использовать Laravel Forge или Laravel Vapor. Herd и Valet -- инструменты исключительно для локальной разработки. Sail (Docker) подходит как для разработки, так и для CI/CD пайплайнов.

Обновление Laravel

# Update Laravel framework
composer update laravel/framework

# Update all dependencies
composer update

# Check for outdated packages
composer outdated

# Laravel Shift — automated upgrade tool
# https://laravelshift.com
# Automates migration between Laravel versions
<?php
declare(strict_types=1);

// Check Laravel version programmatically
use Illuminate\Foundation\Application;

$version = Application::VERSION; // e.g., "11.0.0"

// In artisan
// php artisan --version
// Output: Laravel Framework 11.x.x

Проверь себя

Для чего используется `APP_KEY` в Laravel?

Что произойдёт при вызове `env('DB_HOST')` в контроллере после выполнения `php artisan config:cache`?

Какой файл НЕ должен быть включён в систему контроля версий (Git)?

Какой из перечисленных способов является рекомендуемым для создания нового Laravel-проекта?

Какая минимальная версия PHP требуется для Laravel 11?