Home » Установка PHP 8.1 и настройка локальной среды разработки на Ubuntu 24
Установка PHP 8.1 и настройка локальной среды разработки на Ubuntu 24

Установка PHP 8.1 и настройка локальной среды разработки на Ubuntu 24

Если вы занимаетесь веб-разработкой или администрированием серверов, то наверняка сталкивались с задачей настройки локальной среды для разработки PHP-приложений. Ubuntu 24 LTS — отличная платформа для этих целей, а PHP 8.1 предоставляет все современные возможности для создания производительных веб-приложений. В этой статье мы разберём весь процесс установки и настройки от А до Я, чтобы вы могли быстро развернуть рабочую среду как на локальной машине, так и на VPS-сервере.

Мы рассмотрим три ключевых момента: как работает связка PHP 8.1 + Ubuntu 24 и почему это хорошая комбинация, пошаговую настройку с практическими командами и примерами конфигурации, а также разберём типичные проблемы и их решения на конкретных кейсах.

Почему PHP 8.1 + Ubuntu 24 — отличный выбор

PHP 8.1 — это стабильная версия с поддержкой до ноября 2024 года, которая включает множество улучшений производительности и новых функций. Ubuntu 24 LTS обеспечивает стабильную базу с долгосрочной поддержкой до 2029 года. Эта комбинация идеально подходит для продакшена.

Основные преимущества PHP 8.1:

  • Enums — нативная поддержка перечислений
  • Readonly properties — неизменяемые свойства классов
  • Fibers — асинхронное программирование
  • JIT-компиляция — значительное ускорение вычислений
  • Improved performance — до 25% быстрее PHP 7.4

Подготовка системы и установка PHP 8.1

Начнём с обновления системы и установки необходимых пакетов:

sudo apt update && sudo apt upgrade -y
sudo apt install -y software-properties-common curl wget git unzip

# Добавляем репозиторий Ondřej Surý для актуальных версий PHP
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

# Устанавливаем PHP 8.1 и основные модули
sudo apt install -y php8.1 php8.1-cli php8.1-fpm php8.1-mysql php8.1-pgsql \
php8.1-sqlite3 php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip \
php8.1-bcmath php8.1-intl php8.1-readline php8.1-redis php8.1-xdebug

# Проверяем установку
php -v

Если всё прошло успешно, вы увидите что-то вроде:

PHP 8.1.29 (cli) (built: Jun  7 2024 13:33:41) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.29, Copyright (c) Zend Technologies
    with Zend OPcache v8.1.29, Copyright (c), by Zend Technologies
    with Xdebug v3.3.2, Copyright (c) 2002-2024, by Derick Rethans

Установка и настройка веб-сервера

Для локальной разработки можно использовать встроенный сервер PHP, но для более реалистичной среды лучше настроить Apache или Nginx. Рассмотрим оба варианта.

Вариант 1: Apache + mod_php

# Установка Apache
sudo apt install -y apache2 libapache2-mod-php8.1

# Включаем mod_rewrite для красивых URL
sudo a2enmod rewrite

# Настраиваем виртуальный хост
sudo nano /etc/apache2/sites-available/dev.local.conf

Содержимое файла конфигурации:

<VirtualHost *:80>
    ServerName dev.local
    DocumentRoot /var/www/dev
    
    <Directory /var/www/dev>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    
    ErrorLog ${APACHE_LOG_DIR}/dev_error.log
    CustomLog ${APACHE_LOG_DIR}/dev_access.log combined
</VirtualHost>
# Активируем сайт и перезапускаем Apache
sudo a2ensite dev.local
sudo systemctl restart apache2

# Создаём директорию для проекта
sudo mkdir -p /var/www/dev
sudo chown -R $USER:www-data /var/www/dev
sudo chmod -R 755 /var/www/dev

# Добавляем в hosts
echo "127.0.0.1 dev.local" | sudo tee -a /etc/hosts

Вариант 2: Nginx + PHP-FPM (рекомендуется)

# Установка Nginx
sudo apt install -y nginx

# Настраиваем конфигурацию
sudo nano /etc/nginx/sites-available/dev.local

Конфигурация Nginx:

server {
    listen 80;
    server_name dev.local;
    root /var/www/dev;
    index index.php index.html;
    
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
    location ~ /\.ht {
        deny all;
    }
}
# Активируем сайт
sudo ln -s /etc/nginx/sites-available/dev.local /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
sudo systemctl restart php8.1-fpm

Настройка базы данных

Для полноценной среды разработки нужна база данных. Установим MySQL и создадим пользователя для разработки:

# Установка MySQL
sudo apt install -y mysql-server

# Базовая настройка безопасности
sudo mysql_secure_installation

# Создание пользователя для разработки
sudo mysql -u root -p

В MySQL консоли:

CREATE DATABASE dev_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'dev_user'@'localhost' IDENTIFIED BY 'strong_password';
GRANT ALL PRIVILEGES ON dev_db.* TO 'dev_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Оптимизация конфигурации PHP

Теперь настроим PHP для комфортной разработки. Основные файлы конфигурации:

  • /etc/php/8.1/cli/php.ini — для CLI
  • /etc/php/8.1/fpm/php.ini — для FPM
  • /etc/php/8.1/apache2/php.ini — для Apache

Ключевые настройки для разработки:

# Для разработки увеличиваем лимиты
sudo nano /etc/php/8.1/fpm/php.ini

# Найдите и измените следующие параметры:
memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 50M
post_max_size = 50M
max_file_uploads = 20

# Включаем отображение ошибок
display_errors = On
display_startup_errors = On
error_reporting = E_ALL

# Настройки для разработки
log_errors = On
error_log = /var/log/php_errors.log

# Опкэш для ускорения
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.revalidate_freq=2
opcache.fast_shutdown=1

# Для разработки отключаем кеширование
opcache.validate_timestamps=1
opcache.revalidate_freq=0

После изменений перезапускаем сервисы:

sudo systemctl restart php8.1-fpm
sudo systemctl restart nginx

Установка Composer и инструментов разработки

Composer — это стандартный менеджер пакетов для PHP. Устанавливаем его глобально:

# Скачиваем и устанавливаем Composer
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo chmod +x /usr/local/bin/composer

# Проверяем установку
composer --version

# Устанавливаем полезные глобальные пакеты
composer global require laravel/installer
composer global require symfony/console
composer global require phpunit/phpunit

# Добавляем в PATH
echo 'export PATH="$PATH:$HOME/.composer/vendor/bin"' >> ~/.bashrc
source ~/.bashrc

Настройка Xdebug для отладки

Xdebug — незаменимый инструмент для отладки PHP. Настроим его для работы с IDE:

# Создаём конфигурацию Xdebug
sudo nano /etc/php/8.1/mods-available/xdebug.ini

Содержимое файла:

zend_extension=xdebug.so
xdebug.mode=debug,develop
xdebug.start_with_request=trigger
xdebug.client_host=127.0.0.1
xdebug.client_port=9003
xdebug.log=/var/log/xdebug.log
xdebug.idekey=PHPSTORM

# Для профилирования (по необходимости)
xdebug.output_dir=/tmp/xdebug
xdebug.profiler_output_name=cachegrind.out.%p
# Перезапускаем PHP-FPM
sudo systemctl restart php8.1-fpm

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

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

# Создаём структуру проекта
cd /var/www/dev
cat > index.php << 'EOF'

EOF

# Создаём тест подключения к базе
cat > db_test.php << 'EOF'
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "✅ Подключение к базе данных успешно!";
    
    // Проверим версию MySQL
    $version = $pdo->query('SELECT VERSION()')->fetchColumn();
    echo "
MySQL версия: " . $version; } catch(PDOException $e) { echo "❌ Ошибка подключения: " . $e->getMessage(); } ?> EOF # Создаём тест современных возможностей PHP 8.1 cat > php81_test.php << 'EOF' name = $name; } } // Тест match expression function getStatusMessage(Status $status): string { return match($status) { Status::ACTIVE => 'Пользователь активен', Status::INACTIVE => 'Пользователь неактивен', }; } $user = new User('John Doe'); $status = Status::ACTIVE; echo "✅ PHP 8.1 возможности работают!
"; echo "Имя пользователя: " . $user->name . "
"; echo "Статус: " . getStatusMessage($status) . "
"; echo "PHP версия: " . PHP_VERSION . "
"; ?> EOF

Теперь можно открыть в браузере http://dev.local и проверить работу.

Сравнение веб-серверов для разработки

Параметр Apache + mod_php Nginx + PHP-FPM Встроенный сервер PHP
Производительность Средняя Высокая Низкая
Потребление памяти Высокое Низкое Очень низкое
Настройка Простая Средняя Нет
Для продакшена Да Да Нет
Быстрый старт Нет Нет Да

Автоматизация с помощью скриптов

Создадим полезные скрипты для автоматизации рутинных задач:

# Скрипт для создания нового виртуального хоста
cat > ~/create_vhost.sh << 'EOF'
#!/bin/bash

if [ $# -eq 0 ]; then
    echo "Использование: $0 "
    exit 1
fi

DOMAIN=$1
ROOT_DIR="/var/www/$DOMAIN"

# Создаём директорию
sudo mkdir -p $ROOT_DIR
sudo chown -R $USER:www-data $ROOT_DIR

# Создаём конфигурацию Nginx
sudo tee /etc/nginx/sites-available/$DOMAIN << EOL
server {
    listen 80;
    server_name $DOMAIN;
    root $ROOT_DIR;
    index index.php index.html;
    
    location / {
        try_files \$uri \$uri/ /index.php?\$query_string;
    }
    
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
        include fastcgi_params;
    }
}
EOL

# Активируем сайт
sudo ln -s /etc/nginx/sites-available/$DOMAIN /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

# Добавляем в hosts
echo "127.0.0.1 $DOMAIN" | sudo tee -a /etc/hosts

echo "✅ Виртуальный хост $DOMAIN создан!"
echo "Директория: $ROOT_DIR"
EOF

chmod +x ~/create_vhost.sh

Скрипт для мониторинга производительности PHP:

# Скрипт для мониторинга PHP
cat > ~/php_monitor.sh << 'EOF'
#!/bin/bash

echo "=== PHP 8.1 Monitoring Dashboard ==="
echo "Дата: $(date)"
echo "=================================="

# Статус сервисов
echo "📊 Статус сервисов:"
systemctl is-active php8.1-fpm && echo "✅ PHP-FPM: активен" || echo "❌ PHP-FPM: неактивен"
systemctl is-active nginx && echo "✅ Nginx: активен" || echo "❌ Nginx: неактивен"
systemctl is-active mysql && echo "✅ MySQL: активен" || echo "❌ MySQL: неактивен"

# Использование памяти
echo -e "\n💾 Использование памяти:"
ps aux | grep php-fpm | awk '{sum+=$6} END {print "PHP-FPM: " sum/1024 " MB"}'

# Активные пулы PHP-FPM
echo -e "\n🏊 PHP-FPM пулы:"
sudo systemctl status php8.1-fpm | grep -E "(Active|Main PID)"

# Последние ошибки
echo -e "\n🐛 Последние ошибки PHP:"
sudo tail -5 /var/log/php8.1-fpm.log 2>/dev/null || echo "Нет ошибок"

# Версия PHP и модули
echo -e "\n🔧 Информация о PHP:"
php -v | head -1
echo "Загруженные модули: $(php -m | wc -l)"
EOF

chmod +x ~/php_monitor.sh

Типичные проблемы и их решения

Проблема 1: «Permission denied» при записи файлов

Симптомы: Приложение не может создавать файлы или писать в директории.

Решение:

# Настройка правильных прав доступа
sudo chown -R $USER:www-data /var/www/dev
sudo chmod -R 755 /var/www/dev

# Для директорий с записью (кеш, логи)
sudo chmod -R 775 /var/www/dev/storage
sudo chmod -R 775 /var/www/dev/cache

Проблема 2: Xdebug не подключается к IDE

Симптомы: Брейкпоинты не срабатывают, нет подключения к отладчику.

Решение:

# Проверяем статус Xdebug
php -m | grep xdebug

# Проверяем конфигурацию
php -i | grep xdebug

# Для PhpStorm добавляем в URL параметр
# http://dev.local/index.php?XDEBUG_SESSION_START=PHPSTORM

Проблема 3: Медленная работа с большими файлами

Решение:

# Увеличиваем лимиты в php.ini
memory_limit = 512M
max_execution_time = 600
upload_max_filesize = 100M
post_max_size = 100M

# Перезапускаем PHP-FPM
sudo systemctl restart php8.1-fpm

Полезные инструменты и расширения

Для более продуктивной разработки рекомендую установить дополнительные инструменты:

# Установка Redis для кеширования
sudo apt install -y redis-server
sudo systemctl enable redis-server

# Установка Mailhog для тестирования почты
go install github.com/mailhog/MailHog@latest

# Или через Docker
docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog

# Установка Node.js для фронтенда
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs

# Установка утилит для работы с изображениями
sudo apt install -y imagemagick webp

Настройка для production-ready среды

Если вы планируете использовать эту конфигурацию на выделенном сервере, учтите следующие моменты:

# Отключаем отображение ошибок в продакшене
display_errors = Off
display_startup_errors = Off
log_errors = On

# Настройка OPcache для продакшена
opcache.validate_timestamps=0
opcache.revalidate_freq=0
opcache.max_accelerated_files=10000
opcache.memory_consumption=256
opcache.interned_strings_buffer=16

# Настройка PHP-FPM для нагрузки
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.process_idle_timeout = 10s
pm.max_requests = 500

Интеграция с современными фреймворками

Протестируем работу с популярными фреймворками:

# Создание Laravel проекта
composer create-project laravel/laravel test-laravel
cd test-laravel
php artisan serve --host=0.0.0.0 --port=8000

# Создание Symfony проекта
composer create-project symfony/skeleton test-symfony
cd test-symfony
symfony serve --host=0.0.0.0 --port=8001

# Для CodeIgniter 4
composer create-project codeigniter4/appstarter test-ci4

Заключение и рекомендации

Настройка PHP 8.1 на Ubuntu 24 — это надёжная основа для современной веб-разработки. Связка Nginx + PHP-FPM показывает лучшую производительность и более гибкие возможности настройки по сравнению с Apache + mod_php.

Ключевые рекомендации:

  • Используйте Nginx + PHP-FPM для продакшена и разработки
  • Настройте Xdebug для комфортной отладки
  • Не забывайте про OPcache — это значительно ускоряет работу
  • Регулярно обновляйте PHP и следите за security updates
  • Используйте Composer для управления зависимостями

Эта конфигурация подходит как для локальной разработки, так и для развёртывания на продакшене. Если вам нужна стабильная среда для серьёзных проектов, рассмотрите возможность использования VPS с предустановленной средой.

PHP 8.1 открывает новые возможности для создания современных веб-приложений с улучшенной производительностью и более чистым кодом. Enums, readonly properties, match expressions — всё это делает разработку более предсказуемой и менее подверженной ошибкам.

Удачного кодинга! 🚀


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked