Урок 02

Установка и структура проекта

Что понадобится

  • PHP 8.3+
  • Composer
  • Node.js 20+ (для фронтенда)
  • PostgreSQL / MySQL / SQLite
  • Git

Установка PHP

Ubuntu / Debian:

sudo apt update
sudo apt install php8.3 php8.3-cli php8.3-fpm php8.3-mbstring \
    php8.3-xml php8.3-curl php8.3-zip php8.3-pgsql php8.3-mysql

Проверка:

php -v

Установка Composer

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer

Проверка:

composer --version

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

Через Composer:

composer create-project laravel/laravel my-app

Или через Laravel Installer:

composer global require laravel/installer
laravel new my-app

Что произойдёт:

  • Скачается скелет Laravel.
  • Установятся зависимости.
  • Сгенерируется .env.
  • Сгенерируется APP_KEY.

Запуск

cd my-app
php artisan serve

Открыть http://localhost:8000.

⚠️ artisan serve — только для разработки. Не для прода.

Artisan

Artisan — командная строка Laravel.

Основные команды:

php artisan list                    # все команды
php artisan --version               # версия
php artisan about                   # инфо о проекте

php artisan serve                   # dev-сервер
php artisan make:model Post         # создать модель
php artisan make:controller X       # контроллер
php artisan make:migration create_x_table
php artisan migrate                 # применить миграции
php artisan db:seed                 # сиды
php artisan route:list              # список роутов
php artisan tinker                  # REPL
php artisan optimize:clear          # очистить кеш
php artisan config:cache            # кеш конфига

Сокращения: make:model → make:m, и т.д.

Структура проекта

my-app/
├── app/                    # код приложения
│   ├── Console/            # команды CLI
│   ├── Exceptions/         # исключения
│   ├── Http/
│   │   ├── Controllers/    # контроллеры
│   │   ├── Middleware/     # middleware
│   │   └── Requests/       # Form Requests
│   ├── Models/             # модели Eloquent
│   └── Providers/          # сервис-провайдеры
├── bootstrap/              # инициализация
│   ├── app.php             # ← главный файл конфигурации
│   ├── cache/              # кеш фреймворка
│   └── providers.php       # список провайдеров
├── config/                 # конфиги
├── database/
│   ├── factories/          # фабрики моделей
│   ├── migrations/         # миграции
│   └── seeders/            # сиды
├── public/                 # ← единственная публичная папка
│   ├── index.php           # точка входа
│   └── storage/            # симлинк на storage/app/public
├── resources/
│   ├── css/
│   ├── js/
│   └── views/              # Blade-шаблоны
├── routes/
│   ├── web.php             # роуты браузера
│   ├── api.php             # роуты API
│   └── console.php         # CLI-команды
├── storage/                # логи, кеш, файлы
├── tests/                  # тесты
├── vendor/                 # зависимости
├── .env                    # переменные окружения
├── .env.example            # шаблон
├── artisan                 # CLI
├── composer.json           # зависимости
├── package.json            # npm-зависимости
└── vite.config.js          # конфиг Vite

Ключевые файлы

.env

Переменные окружения:

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:...
APP_DEBUG=true
APP_URL=http://localhost

DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=my_app
DB_USERNAME=postgres
DB_PASSWORD=secret

CACHE_STORE=database
QUEUE_CONNECTION=database
SESSION_DRIVER=database

⚠️ .env — не в git. В репозиторий — только .env.example.

bootstrap/app.php

Главный файл конфигурации (Laravel 11+):

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        api: __DIR__.'/../routes/api.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        // настройка middleware
    })
    ->withExceptions(function (Exceptions $exceptions) {
        // обработка исключений
    })
    ->create();

Раньше (Laravel 10 и ниже) — app/Http/Kernel.php и app/Console/Kernel.php. Сейчас — bootstrap/app.php.

routes/web.php

Роуты браузера:

Route::get('/', function () {
    return view('welcome');
});

Middleware web применяется автоматически — сессии, CSRF, cookie.

routes/api.php

Роуты API:

Route::get('/users', [UserController::class, 'index']);

Префикс /api добавляется автоматически. Middleware api — throttle, без сессий.

config/

Конфиги:

  • app.php — приложение.
  • database.php — БД.
  • cache.php — кеш.
  • queue.php — очереди.
  • session.php — сессии.
  • auth.php — аутентификация.
  • filesystems.php — файлы.
  • logging.php — логи.
  • mail.php — почта.
  • services.php — сторонние сервисы.

Что в .env — попадает в конфиг. В .env меняешь — в конфиге видно.

public/index.php

Единственная точка входа.

<?php

define('LARAVEL_START', microtime(true));

require __DIR__.'/../vendor/autoload.php';

(require_once __DIR__.'/../bootstrap/app.php')
    ->handleRequest(Request::capture());

Все запросы (и API, и web) — сюда.

Установка фронтенда

npm install
npm run dev

Vite запускает dev-сервер на :5173.

Для прода:

npm run build

Соберёт в public/build/.

Проверка установки

php artisan about

Покажет: версию PHP, Laravel, драйвер БД, кеш, очередь, почту.

Проверка БД:

php artisan db:show

Покажет: таблицы, размер, подключение.

Частые команды

php artisan serve                 # dev-сервер
php artisan tinker                # REPL
php artisan migrate               # миграции
php artisan db:seed               # сиды
php artisan route:list            # роуты
php artisan make:model Post -m    # модель + миграция
php artisan optimize:clear        # очистить кеш
composer install                  # зависимости
npm install && npm run dev        # фронтенд

Практика

1. Установи проект:

composer create-project laravel/laravel my-app
cd my-app
php artisan serve

2. Открой http://localhost:8000 — увидишь приветствие.

3. Выполни:

php artisan about
php artisan route:list
php artisan tinker

4. В tinker попробуй:

config('app.name');
database_path();
app()->version();

Частые ошибки

1. Не сгенерирован APP_KEY:

php artisan key:generate

2. Нет подключения к БД: проверь .env.

3. php artisan serve на порту 8000 занят:

php artisan serve --port=8001

4. Права на storage/ и bootstrap/cache/:

chmod -R 775 storage bootstrap/cache
chown -R $USER:www-data storage bootstrap/cache

5. Composer падает по памяти:

COMPOSER_MEMORY_LIMIT=-1 composer install

Итог

  • Установка: composer create-project laravel/laravel.
  • Запуск: php artisan serve.
  • Artisan — CLI для всех задач.
  • Структура: app/, config/, database/, public/, routes/.
  • public/index.php — единственная точка входа.
  • .env — переменные окружения, не в git.
  • bootstrap/app.php — главный конфиг (Laravel 11+).

Дальше — роуты.