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

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

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

Время чтения: 18 мин Веб-хостинг / Приложения
phplamplempapachenginxmysqlphp-fpmdeploylinux

Содержание

Деплой 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-код для значительно более быстрого выполнения.