Настройка LEMP стека Linux-Nginx-MySQL-PHP

Материал из ARK-HOSTER.RU | Документация хостинга
Версия от 08:31, 15 октября 2025; Admin (обсуждение | вклад) (Новая страница: «= Настройка LEMP стека (Linux, Nginx, MySQL, PHP) = == 1. Подготовка системы == * Войдите в систему под уче…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Содержание

Настройка LEMP стека (Linux, Nginx, MySQL, PHP)

1. Подготовка системы

  • Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
  • Убедитесь, что у вас есть доступ к серверу через SSH или консоль.

2. Установка Nginx =

Обновление системы

1. Обновите систему: sudo apt update

2. Установите необходимые пакеты: sudo apt install -y wget curl unzip

Установка Nginx

1. Установите Nginx: sudo apt install -y nginx

2. Запустите и включите автозапуск: sudo systemctl start nginx sudo systemctl enable nginx

3. Проверьте статус: sudo systemctl status nginx

4. Проверьте работу Nginx: curl -I http://localhost

Настройка Nginx

1. Проверьте конфигурацию: sudo nginx -t

2. Перезапустите Nginx: sudo systemctl restart nginx

3. Проверьте порты: sudo netstat -tlnp | grep :80

3. Установка MySQL =

Установка MySQL

1. Установите MySQL: sudo apt install -y mysql-server

2. Запустите и включите автозапуск: sudo systemctl start mysql sudo systemctl enable mysql

3. Проверьте статус: sudo systemctl status mysql

Настройка безопасности MySQL

1. Запустите скрипт безопасности: sudo mysql_secure_installation

2. Следуйте инструкциям:

  • Установите пароль для root
  • Удалите анонимных пользователей
  • Запретите удаленный вход root
  • Удалите тестовую базу данных
  • Перезагрузите таблицы привилегий

Создание базы данных и пользователя

1. Подключитесь к MySQL: sudo mysql -u root -p

2. Создайте базу данных: CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

3. Создайте пользователя: CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'strong_password';

4. Предоставьте права: GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost'; FLUSH PRIVILEGES;

5. Выйдите из MySQL: EXIT;

4. Установка PHP =

Установка PHP-FPM

1. Установите PHP-FPM и необходимые модули: sudo apt install -y php8.1-fpm php8.1-mysql php8.1-curl php8.1-gd php8.1-mbstring php8.1-xml php8.1-zip php8.1-intl php8.1-soap php8.1-json php8.1-bcmath

2. Проверьте версию PHP: php --version

3. Проверьте статус PHP-FPM: sudo systemctl status php8.1-fpm

Настройка PHP-FPM

1. Отредактируйте конфигурацию PHP: sudo nano /etc/php/8.1/fpm/php.ini

2. Настройте основные параметры: upload_max_filesize = 64M post_max_size = 64M max_execution_time = 300 max_input_time = 300 memory_limit = 256M date.timezone = Europe/Moscow display_errors = Off log_errors = On error_log = /var/log/php_errors.log

3. Настройте пул PHP-FPM: sudo nano /etc/php/8.1/fpm/pool.d/www.conf

4. Настройте параметры пула: user = www-data group = www-data listen = /run/php/php8.1-fpm.sock listen.owner = www-data listen.group = www-data listen.mode = 0660 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 5 pm.max_spare_servers = 35

5. Перезапустите PHP-FPM: sudo systemctl restart php8.1-fpm

Тестирование PHP

1. Создайте тестовый файл: sudo nano /var/www/html/info.php

2. Добавьте содержимое: <?php phpinfo(); ?>

3. Проверьте в браузере: http://your-server-ip/info.php

4. Удалите тестовый файл: sudo rm /var/www/html/info.php

5. Настройка Nginx для PHP =

Базовая конфигурация

1. Отредактируйте конфигурацию сайта по умолчанию: sudo nano /etc/nginx/sites-available/default

2. Замените содержимое: server {

   listen 80 default_server;
   listen [::]:80 default_server;
   
   root /var/www/html;
   index index.php index.html index.htm index.nginx-debian.html;
   
   server_name _;
   
   location / {
       try_files $uri $uri/ =404;
   }
   
   location ~ \.php$ {
       include snippets/fastcgi-php.conf;
       fastcgi_pass unix:/run/php/php8.1-fpm.sock;
   }
   
   location ~ /\.ht {
       deny all;
   }

}

3. Проверьте конфигурацию: sudo nginx -t

4. Перезапустите Nginx: sudo systemctl restart nginx

6. Настройка виртуальных хостов =

Создание виртуального хоста

1. Создайте директорию для сайта: sudo mkdir -p /var/www/example.com/public_html

2. Установите права доступа: sudo chown -R www-data:www-data /var/www/example.com sudo chmod -R 755 /var/www/example.com

3. Создайте конфигурацию виртуального хоста: sudo nano /etc/nginx/sites-available/example.com

4. Добавьте конфигурацию: server {

   listen 80;
   listen [::]:80;
   
   root /var/www/example.com/public_html;
   index index.php index.html index.htm;
   
   server_name example.com www.example.com;
   
   location / {
       try_files $uri $uri/ =404;
   }
   
   location ~ \.php$ {
       include snippets/fastcgi-php.conf;
       fastcgi_pass unix:/run/php/php8.1-fpm.sock;
   }
   
   location ~ /\.ht {
       deny all;
   }
   
   location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
       expires 1y;
       add_header Cache-Control "public, immutable";
   }

}

5. Включите сайт: sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

6. Удалите сайт по умолчанию: sudo rm /etc/nginx/sites-enabled/default

7. Проверьте конфигурацию: sudo nginx -t

8. Перезапустите Nginx: sudo systemctl restart nginx

Создание тестовой страницы

1. Создайте index.html: sudo nano /var/www/example.com/public_html/index.html

2. Добавьте содержимое: <!DOCTYPE html> <html> <head>

   <title>Welcome to Example.com</title>

</head> <body>

LEMP Stack is Working!

Nginx, MySQL, and PHP are running successfully.

</body> </html>

3. Создайте PHP тест: sudo nano /var/www/example.com/public_html/info.php

4. Добавьте содержимое: <?php

echo "

PHP is working!

"; echo "

Current time: " . date('Y-m-d H:i:s') . "

";

phpinfo(); ?>

7. Настройка SSL =

Установка Certbot

1. Установите Certbot: sudo apt install -y certbot python3-certbot-nginx

2. Получите SSL сертификат: sudo certbot --nginx -d example.com -d www.example.com

3. Настройте автоматическое обновление: sudo crontab -e

4. Добавьте задачу: 0 12 * * * /usr/bin/certbot renew --quiet

Проверка SSL

1. Проверьте SSL сертификат: sudo certbot certificates

2. Протестируйте SSL: curl -I https://example.com

8. Настройка безопасности =

Настройка файрвола

1. Настройте UFW: sudo ufw allow 22/tcp sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw enable

2. Проверьте статус: sudo ufw status

Настройка fail2ban

1. Установите fail2ban: sudo apt install -y fail2ban

2. Создайте конфигурацию: sudo nano /etc/fail2ban/jail.local

3. Добавьте настройки: [DEFAULT] bantime = 3600 findtime = 600 maxretry = 3

[nginx-http-auth] enabled = true port = http,https logpath = /var/log/nginx/error.log

[nginx-limit-req] enabled = true port = http,https logpath = /var/log/nginx/error.log

4. Запустите fail2ban: sudo systemctl start fail2ban sudo systemctl enable fail2ban

Настройка безопасности Nginx

1. Создайте конфигурацию безопасности: sudo nano /etc/nginx/conf.d/security.conf

2. Добавьте правила безопасности: # Скрытие версии Nginx server_tokens off;

  1. Защита от clickjacking

add_header X-Frame-Options "SAMEORIGIN" always;

  1. Защита от MIME sniffing

add_header X-Content-Type-Options "nosniff" always;

  1. XSS Protection

add_header X-XSS-Protection "1; mode=block" always;

  1. Strict Transport Security

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

  1. Запрет доступа к скрытым файлам

location ~ /\. {

   deny all;
   access_log off;
   log_not_found off;

}

  1. Запрет доступа к backup файлам

location ~* \.(bak|config|dist|fla|inc|ini|log|psd|sh|sql|swp)$ {

   deny all;

}

3. Включите конфигурацию в виртуальный хост: sudo nano /etc/nginx/sites-available/example.com

4. Добавьте в начало файла: include /etc/nginx/conf.d/security.conf;

5. Перезапустите Nginx: sudo systemctl restart nginx

9. Оптимизация производительности =

Настройка кэширования

1. Создайте конфигурацию кэширования: sudo nano /etc/nginx/conf.d/cache.conf

2. Добавьте настройки: # Кэширование статических файлов location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {

   expires 1y;
   add_header Cache-Control "public, immutable";
   access_log off;

}

  1. Кэширование шрифтов

location ~* \.(woff|woff2|ttf|eot)$ {

   expires 1y;
   add_header Cache-Control "public, immutable";
   access_log off;

}

  1. Gzip сжатие

gzip on; gzip_vary on; gzip_min_length 1024; gzip_proxied any; gzip_comp_level 6; gzip_types

   text/plain
   text/css
   text/xml
   text/javascript
   application/json
   application/javascript
   application/xml+rss
   application/atom+xml
   image/svg+xml;

Настройка PHP-FPM пулов

1. Создайте отдельный пул для сайта: sudo nano /etc/php/8.1/fpm/pool.d/example.com.conf

2. Добавьте конфигурацию: [example.com] user = www-data group = www-data listen = /run/php/php8.1-fpm-example.com.sock listen.owner = www-data listen.group = www-data listen.mode = 0660

pm = dynamic pm.max_children = 20 pm.start_servers = 3 pm.min_spare_servers = 2 pm.max_spare_servers = 10 pm.max_requests = 1000

php_admin_value[error_log] = /var/log/php8.1-fpm-example.com.log php_admin_flag[log_errors] = on

3. Обновите конфигурацию Nginx: sudo nano /etc/nginx/sites-available/example.com

4. Измените fastcgi_pass: fastcgi_pass unix:/run/php/php8.1-fpm-example.com.sock;

5. Перезапустите сервисы: sudo systemctl restart php8.1-fpm sudo systemctl restart nginx

10. Мониторинг и логирование =

Настройка логирования

1. Настройте ротацию логов: sudo nano /etc/logrotate.d/lemp

2. Добавьте конфигурацию: /var/log/nginx/*.log {

   daily
   missingok
   rotate 52
   compress
   delaycompress
   notifempty
   create 644 www-data www-data
   postrotate
       systemctl reload nginx
   endscript

}

/var/log/mysql/*.log {

   daily
   missingok
   rotate 52
   compress
   delaycompress
   notifempty
   create 640 mysql mysql
   postrotate
       systemctl reload mysql
   endscript

}

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

1. Создайте скрипт мониторинга: sudo nano /usr/local/bin/lemp-monitor.sh

2. Добавьте содержимое: #!/bin/bash

  1. Проверка статуса Nginx

if ! systemctl is-active --quiet nginx; then

   echo "Nginx is down!" | mail -s "LEMP Alert" admin@example.com

fi

  1. Проверка статуса MySQL

if ! systemctl is-active --quiet mysql; then

   echo "MySQL is down!" | mail -s "LEMP Alert" admin@example.com

fi

  1. Проверка статуса PHP-FPM

if ! systemctl is-active --quiet php8.1-fpm; then

   echo "PHP-FPM is down!" | mail -s "LEMP Alert" admin@example.com

fi

  1. Проверка использования диска

DISK_USAGE=$(df /var/www | tail -1 | awk '{print $5}' | sed 's/%//') if [ $DISK_USAGE -gt 80 ]; then

   echo "Disk usage is high: ${DISK_USAGE}%" | mail -s "LEMP Alert" admin@example.com

fi

  1. Проверка доступности сайта

if ! curl -s -o /dev/null -w "%{http_code}" http://example.com | grep -q "200"; then

   echo "Website is not responding!" | mail -s "LEMP Alert" admin@example.com

fi

3. Сделайте скрипт исполняемым: sudo chmod +x /usr/local/bin/lemp-monitor.sh

4. Добавьте в crontab: sudo crontab -e

5. Добавьте задачу: */5 * * * * /usr/local/bin/lemp-monitor.sh

11. Резервное копирование =

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

1. Создайте скрипт резервного копирования: sudo nano /usr/local/bin/lemp-backup.sh

2. Добавьте содержимое: #!/bin/bash

BACKUP_DIR="/backup/lemp" DATE=$(date +%Y%m%d_%H%M%S) SITE_DIR="/var/www/example.com"

  1. Создание директории для бэкапа

mkdir -p $BACKUP_DIR

  1. Резервное копирование файлов сайта

tar -czf $BACKUP_DIR/website-$DATE.tar.gz -C $SITE_DIR .

  1. Резервное копирование базы данных

mysqldump -u myapp_user -p'strong_password' myapp > $BACKUP_DIR/database-$DATE.sql

  1. Сжатие SQL файла

gzip $BACKUP_DIR/database-$DATE.sql

  1. Резервное копирование конфигурации Nginx

tar -czf $BACKUP_DIR/nginx-config-$DATE.tar.gz -C /etc nginx

  1. Резервное копирование конфигурации PHP-FPM

tar -czf $BACKUP_DIR/php-config-$DATE.tar.gz -C /etc php

  1. Удаление старых бэкапов (старше 7 дней)

find $BACKUP_DIR -name "*$DATE*" -mtime +7 -delete

echo "LEMP backup completed: $DATE"

3. Сделайте скрипт исполняемым: sudo chmod +x /usr/local/bin/lemp-backup.sh

4. Добавьте в crontab: sudo crontab -e

5. Добавьте задачу: 0 3 * * * /usr/local/bin/lemp-backup.sh

12. Установка популярных CMS =

Установка WordPress

1. Скачайте WordPress: cd /tmp wget https://wordpress.org/latest.tar.gz tar -xzf latest.tar.gz

2. Переместите файлы: sudo mv wordpress/* /var/www/example.com/public_html/ sudo chown -R www-data:www-data /var/www/example.com/public_html

3. Настройте WordPress: sudo cp /var/www/example.com/public_html/wp-config-sample.php /var/www/example.com/public_html/wp-config.php

4. Отредактируйте конфигурацию: sudo nano /var/www/example.com/public_html/wp-config.php

Установка Laravel

1. Установите Composer: curl -sS https://getcomposer.org/installer | php sudo mv composer.phar /usr/local/bin/composer

2. Создайте Laravel проект: cd /var/www/example.com/public_html composer create-project laravel/laravel .

3. Настройте права доступа: sudo chown -R www-data:www-data /var/www/example.com/public_html sudo chmod -R 755 /var/www/example.com/public_html

13. Устранение неполадок =

Частые проблемы

1. Nginx не запускается:

  • Проверьте конфигурацию: sudo nginx -t
  • Проверьте логи: sudo journalctl -u nginx
  • Проверьте порты: sudo netstat -tlnp | grep :80

2. PHP не работает:

  • Проверьте статус PHP-FPM: sudo systemctl status php8.1-fpm
  • Проверьте сокет: ls -la /run/php/php8.1-fpm.sock
  • Проверьте конфигурацию Nginx

3. MySQL не подключается:

  • Проверьте статус: sudo systemctl status mysql
  • Проверьте логи: sudo tail -f /var/log/mysql/error.log
  • Проверьте права пользователя

Диагностика

1. Проверка статуса сервисов: sudo systemctl status nginx sudo systemctl status mysql sudo systemctl status php8.1-fpm

2. Проверка логов: sudo tail -f /var/log/nginx/error.log sudo tail -f /var/log/mysql/error.log sudo tail -f /var/log/php8.1-fpm.log

3. Проверка подключения к базе данных: mysql -u myapp_user -p -e "SELECT 1;"

4. Тестирование PHP: php -r "echo 'PHP is working';"

5. Проверка конфигурации Nginx: sudo nginx -t

Заключение

LEMP стек успешно установлен и настроен! Теперь у вас есть высокопроизводительная веб-платформа с Nginx, MySQL и PHP-FPM для разработки и хостинга веб-приложений.

Для размещения ваших LEMP приложений на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):

Наши специалисты помогут с настройкой LEMP стека и оптимизацией производительности ваших веб-приложений!