Настройка LEMP стека Linux-Nginx-MySQL-PHP — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «= Настройка LEMP стека (Linux, Nginx, MySQL, PHP) = == 1. Подготовка системы == * Войдите в систему под уче…») |
(нет различий)
|
Версия 08:31, 15 октября 2025
Содержание
- 1 Настройка LEMP стека (Linux, Nginx, MySQL, PHP)
- 2 LEMP Stack is Working!
- 3 PHP is working!
Настройка 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;
- Защита от clickjacking
add_header X-Frame-Options "SAMEORIGIN" always;
- Защита от MIME sniffing
add_header X-Content-Type-Options "nosniff" always;
- XSS Protection
add_header X-XSS-Protection "1; mode=block" always;
- Strict Transport Security
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
- Запрет доступа к скрытым файлам
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
- Запрет доступа к 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;
}
- Кэширование шрифтов
location ~* \.(woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
access_log off;
}
- 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
- Проверка статуса Nginx
if ! systemctl is-active --quiet nginx; then
echo "Nginx is down!" | mail -s "LEMP Alert" admin@example.com
fi
- Проверка статуса MySQL
if ! systemctl is-active --quiet mysql; then
echo "MySQL is down!" | mail -s "LEMP Alert" admin@example.com
fi
- Проверка статуса PHP-FPM
if ! systemctl is-active --quiet php8.1-fpm; then
echo "PHP-FPM is down!" | mail -s "LEMP Alert" admin@example.com
fi
- Проверка использования диска
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
- Проверка доступности сайта
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"
- Создание директории для бэкапа
mkdir -p $BACKUP_DIR
- Резервное копирование файлов сайта
tar -czf $BACKUP_DIR/website-$DATE.tar.gz -C $SITE_DIR .
- Резервное копирование базы данных
mysqldump -u myapp_user -p'strong_password' myapp > $BACKUP_DIR/database-$DATE.sql
- Сжатие SQL файла
gzip $BACKUP_DIR/database-$DATE.sql
- Резервное копирование конфигурации Nginx
tar -czf $BACKUP_DIR/nginx-config-$DATE.tar.gz -C /etc nginx
- Резервное копирование конфигурации PHP-FPM
tar -czf $BACKUP_DIR/php-config-$DATE.tar.gz -C /etc php
- Удаление старых бэкапов (старше 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):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для высоконагруженных LEMP приложений
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних проектов
Наши специалисты помогут с настройкой LEMP стека и оптимизацией производительности ваших веб-приложений!