Перейти к основному содержимому
Вернуться в категорию

Деплой PHP приложения: LAMP и LEMP стек

Полное руководство по развёртыванию PHP приложений на VPS. Сравнение LAMP и LEMP, настройка Apache/Nginx + PHP-FPM + MySQL, конфигурация виртуальных хостов и управление версиями PHP.

Время чтения: 18 мин Веб-хостинг / Приложения
phplamplempapachenginxmysqlphp-fpmdeploylinux
Автор
REXE Teknoloji Network & Security Team
Редактор
REXE Teknoloji Technical Editorial
Первая публикация
Последнее обновление

Деплой PHP приложения: LAMP и LEMP стек

PHP — один из краеугольных камней веб-разработки, на котором работают миллионы сайтов по всему миру. В этом руководстве сравниваются стеки LAMP (Linux + Apache + MySQL + PHP) и LEMP (Linux + Nginx + MySQL + PHP), рассматриваются шаги установки и развёртывание PHP приложения.

Сравнение LAMP и LEMP

ХарактеристикаLAMPLEMP
Веб-серверApacheNginx
ПроизводительностьСредняя-высокаяВысокая
Использование памятиБольшеМеньше
.htaccessПоддерживаетсяНе поддерживается
Интеграция PHPmod_php или PHP-FPMPHP-FPM (обязательно)
Статические файлыХорошоОтлично

LEMP стек предлагает лучшую производительность для PHP приложений, таких как WordPress и Laravel. LAMP может быть предпочтительнее для устаревших приложений, требующих .htaccess.

Установка LEMP стека

1. Установка Nginx

hljs bash
# Обновить список пакетов
sudo apt update && sudo apt upgrade -y

# Установить Nginx
sudo apt install nginx -y
sudo systemctl start nginx
sudo systemctl enable nginx

2. Установка MySQL/MariaDB

hljs bash
# Установить MariaDB
sudo apt install mariadb-server mariadb-client -y
sudo systemctl start mariadb
sudo systemctl enable mariadb

# Настройка безопасности
sudo mysql_secure_installation
hljs sql
CREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'надёжный-пароль';
GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

3. Установка PHP и PHP-FPM

hljs bash
# Добавить репозиторий PHP
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update

# Установить PHP 8.2 и распространённые расширения
sudo apt install php8.2 php8.2-fpm php8.2-mysql php8.2-xml php8.2-curl \
  php8.2-mbstring php8.2-zip php8.2-gd php8.2-bcmath php8.2-intl -y

sudo systemctl start php8.2-fpm
sudo systemctl enable php8.2-fpm
php --version

4. Конфигурация PHP

hljs ini
; Лимит памяти
memory_limit = 256M

; Максимальный размер загрузки
upload_max_filesize = 64M
post_max_size = 64M

; Максимальное время выполнения
max_execution_time = 300

; Отображение ошибок (отключено в продакшене)
display_errors = Off
log_errors = On

; OPcache (для производительности)
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000

Конфигурация виртуального хоста Nginx (для PHP)

hljs bash
sudo mkdir -p /var/www/myapp/public
sudo chown -R www-data:www-data /var/www/myapp
sudo nano /etc/nginx/sites-available/myapp
hljs nginx
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/myapp/public;
    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.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }

    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    client_max_body_size 64M;
}
hljs bash
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

Развёртывание приложения (пример Laravel)

hljs bash
cd /var/www
git clone https://github.com/user/myapp.git
cd myapp

composer install --no-dev --optimize-autoloader
cp .env.example .env
php artisan key:generate
php artisan migrate --force
php artisan config:cache
php artisan route:cache

sudo chown -R www-data:www-data /var/www/myapp
sudo chmod -R 775 /var/www/myapp/storage

SSL-сертификат

hljs bash
sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d example.com -d www.example.com
sudo certbot renew --dry-run

На серверах REXE убедитесь, что порты 80 и 443 открыты через Path Panel. Держите порт MySQL 3306 закрытым для внешнего доступа.

Заключение

Ваше PHP приложение теперь работает на стеке LEMP или LAMP. Комбинация Nginx + PHP-FPM обеспечивает высокую производительность, а OPcache кэширует PHP-код для значительно более быстрого выполнения.

Часто задаваемые вопросы

Что использовать: LAMP или LEMP?

LEMP (Nginx + PHP-FPM) рекомендуется для новых проектов; использует меньше памяти и предлагает более высокую производительность. Однако LAMP (Apache) проще настроить для устаревших PHP приложений или WordPress, использующих .htaccess.

Что такое PHP-FPM и зачем его использовать?

PHP-FPM (FastCGI Process Manager) запускает PHP как отдельный процесс, управляемый независимо от веб-сервера. По сравнению с mod_php использует меньше памяти, предлагает лучшую производительность и позволяет использовать разные версии PHP для разных сайтов.

Как запустить несколько версий PHP на одном сервере?

Несколько версий PHP можно установить через репозиторий Ondrej PPA. Для каждой версии запускается отдельный сервис PHP-FPM. В Nginx разным сайтам можно назначить разные версии PHP, используя разные сокеты PHP-FPM.

Моё PHP приложение работает медленно, как его ускорить?

Включите OPcache (opcache.enable=1), увеличьте количество воркеров PHP-FPM, добавьте заголовки кэша для статических файлов в Nginx. Для Laravel/Symfony выполните 'php artisan config:cache' и 'php artisan route:cache'. Оптимизируйте управление сессиями и кэшем с Redis.

Связанные статьи

Деплой Node.js приложения: PM2 и Nginx

Полное руководство по развёртыванию Node.js приложений на VPS. Установка Node.js через nvm, менеджер процессов PM2, обратный прокси Nginx, SSL-сертификат и управление переменными окружения.

15 мин
nodejspm2nginx

Деплой Python/Django: продакшен с Gunicorn и Nginx

Руководство по развёртыванию Python/Django приложений на VPS. Настройка virtualenv, производственные настройки Django, WSGI-сервер Gunicorn, обратный прокси Nginx, systemd-сервис и управление статическими файлами.

18 мин
pythondjangogunicorn
Сетевой трафикВходящий GbpsИсходящий Gbps