Настройка LEMP стека Linux-Nginx-MySQL-PHP — различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск
(Новая страница: «= Настройка LEMP стека (Linux, Nginx, MySQL, PHP) = == 1. Подготовка системы == * Войдите в систему под уче…»)
 
 
Строка 6: Строка 6:
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
  
== 2. Установка Nginx ===
+
== 2. Установка Nginx ==
  
 
=== Обновление системы ===
 
=== Обновление системы ===
  
 
1. Обновите систему:
 
1. Обновите систему:
<code>sudo apt update</code>
+
<pre>sudo apt update</pre>
  
 
2. Установите необходимые пакеты:
 
2. Установите необходимые пакеты:
<code>sudo apt install -y wget curl unzip</code>
+
<pre>sudo apt install -y wget curl unzip</pre>
  
 
=== Установка Nginx ===
 
=== Установка Nginx ===
  
 
1. Установите Nginx:
 
1. Установите Nginx:
<code>sudo apt install -y nginx</code>
+
<pre>sudo apt install -y nginx</pre>
  
 
2. Запустите и включите автозапуск:
 
2. Запустите и включите автозапуск:
<code>sudo systemctl start nginx</code>
+
<pre>sudo systemctl start nginx</pre>
<code>sudo systemctl enable nginx</code>
+
<pre>sudo systemctl enable nginx</pre>
  
 
3. Проверьте статус:
 
3. Проверьте статус:
<code>sudo systemctl status nginx</code>
+
<pre>sudo systemctl status nginx</pre>
  
 
4. Проверьте работу Nginx:
 
4. Проверьте работу Nginx:
<code>curl -I http://localhost</code>
+
<pre>curl -I http://localhost</pre>
  
 
=== Настройка Nginx ===
 
=== Настройка Nginx ===
  
 
1. Проверьте конфигурацию:
 
1. Проверьте конфигурацию:
<code>sudo nginx -t</code>
+
<pre>sudo nginx -t</pre>
  
 
2. Перезапустите Nginx:
 
2. Перезапустите Nginx:
<code>sudo systemctl restart nginx</code>
+
<pre>sudo systemctl restart nginx</pre>
  
 
3. Проверьте порты:
 
3. Проверьте порты:
<code>sudo netstat -tlnp | grep :80</code>
+
<pre>sudo netstat -tlnp | grep :80</pre>
  
== 3. Установка MySQL ===
+
== 3. Установка MySQL ==
  
 
=== Установка MySQL ===
 
=== Установка MySQL ===
  
 
1. Установите MySQL:
 
1. Установите MySQL:
<code>sudo apt install -y mysql-server</code>
+
<pre>sudo apt install -y mysql-server</pre>
  
 
2. Запустите и включите автозапуск:
 
2. Запустите и включите автозапуск:
<code>sudo systemctl start mysql</code>
+
<pre>sudo systemctl start mysql</pre>
<code>sudo systemctl enable mysql</code>
+
<pre>sudo systemctl enable mysql</pre>
  
 
3. Проверьте статус:
 
3. Проверьте статус:
<code>sudo systemctl status mysql</code>
+
<pre>sudo systemctl status mysql</pre>
  
 
=== Настройка безопасности MySQL ===
 
=== Настройка безопасности MySQL ===
  
 
1. Запустите скрипт безопасности:
 
1. Запустите скрипт безопасности:
<code>sudo mysql_secure_installation</code>
+
<pre>sudo mysql_secure_installation</pre>
  
 
2. Следуйте инструкциям:
 
2. Следуйте инструкциям:
Строка 71: Строка 71:
  
 
1. Подключитесь к MySQL:
 
1. Подключитесь к MySQL:
<code>sudo mysql -u root -p</code>
+
<pre>sudo mysql -u root -p</pre>
  
 
2. Создайте базу данных:
 
2. Создайте базу данных:
<code>CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;</code>
+
<pre>CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;</pre>
  
 
3. Создайте пользователя:
 
3. Создайте пользователя:
<code>CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'strong_password';</code>
+
<pre>CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'strong_password';</pre>
  
 
4. Предоставьте права:
 
4. Предоставьте права:
<code>GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost';</code>
+
<pre>GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost';</pre>
<code>FLUSH PRIVILEGES;</code>
+
<pre>FLUSH PRIVILEGES;</pre>
  
 
5. Выйдите из MySQL:
 
5. Выйдите из MySQL:
<code>EXIT;</code>
+
<pre>EXIT;</pre>
  
== 4. Установка PHP ===
+
== 4. Установка PHP ==
  
 
=== Установка PHP-FPM ===
 
=== Установка PHP-FPM ===
  
 
1. Установите PHP-FPM и необходимые модули:
 
1. Установите PHP-FPM и необходимые модули:
<code>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</code>
+
<pre>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</pre>
  
 
2. Проверьте версию PHP:
 
2. Проверьте версию PHP:
<code>php --version</code>
+
<pre>php --version</pre>
  
 
3. Проверьте статус PHP-FPM:
 
3. Проверьте статус PHP-FPM:
<code>sudo systemctl status php8.1-fpm</code>
+
<pre>sudo systemctl status php8.1-fpm</pre>
  
 
=== Настройка PHP-FPM ===
 
=== Настройка PHP-FPM ===
  
 
1. Отредактируйте конфигурацию PHP:
 
1. Отредактируйте конфигурацию PHP:
<code>sudo nano /etc/php/8.1/fpm/php.ini</code>
+
<pre>sudo nano /etc/php/8.1/fpm/php.ini</pre>
  
 
2. Настройте основные параметры:
 
2. Настройте основные параметры:
<code>upload_max_filesize = 64M
+
<pre>upload_max_filesize = 64M
 
post_max_size = 64M
 
post_max_size = 64M
 
max_execution_time = 300
 
max_execution_time = 300
Строка 114: Строка 114:
 
log_errors = On
 
log_errors = On
 
error_log = /var/log/php_errors.log
 
error_log = /var/log/php_errors.log
</code>
+
</pre>
  
 
3. Настройте пул PHP-FPM:
 
3. Настройте пул PHP-FPM:
<code>sudo nano /etc/php/8.1/fpm/pool.d/www.conf</code>
+
<pre>sudo nano /etc/php/8.1/fpm/pool.d/www.conf</pre>
  
 
4. Настройте параметры пула:
 
4. Настройте параметры пула:
<code>user = www-data
+
<pre>user = www-data
 
group = www-data
 
group = www-data
 
listen = /run/php/php8.1-fpm.sock
 
listen = /run/php/php8.1-fpm.sock
Строка 131: Строка 131:
 
pm.min_spare_servers = 5
 
pm.min_spare_servers = 5
 
pm.max_spare_servers = 35
 
pm.max_spare_servers = 35
</code>
+
</pre>
  
 
5. Перезапустите PHP-FPM:
 
5. Перезапустите PHP-FPM:
<code>sudo systemctl restart php8.1-fpm</code>
+
<pre>sudo systemctl restart php8.1-fpm</pre>
  
 
=== Тестирование PHP ===
 
=== Тестирование PHP ===
  
 
1. Создайте тестовый файл:
 
1. Создайте тестовый файл:
<code>sudo nano /var/www/html/info.php</code>
+
<pre>sudo nano /var/www/html/info.php</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code><?php
+
<pre><?php
 
phpinfo();
 
phpinfo();
 
?>
 
?>
</code>
+
</pre>
  
 
3. Проверьте в браузере:
 
3. Проверьте в браузере:
<code>http://your-server-ip/info.php</code>
+
<pre>http://your-server-ip/info.php</pre>
  
 
4. Удалите тестовый файл:
 
4. Удалите тестовый файл:
<code>sudo rm /var/www/html/info.php</code>
+
<pre>sudo rm /var/www/html/info.php</pre>
  
== 5. Настройка Nginx для PHP ===
+
== 5. Настройка Nginx для PHP ==
  
 
=== Базовая конфигурация ===
 
=== Базовая конфигурация ===
  
 
1. Отредактируйте конфигурацию сайта по умолчанию:
 
1. Отредактируйте конфигурацию сайта по умолчанию:
<code>sudo nano /etc/nginx/sites-available/default</code>
+
<pre>sudo nano /etc/nginx/sites-available/default</pre>
  
 
2. Замените содержимое:
 
2. Замените содержимое:
<code>server {
+
<pre>server {
 
     listen 80 default_server;
 
     listen 80 default_server;
 
     listen [::]:80 default_server;
 
     listen [::]:80 default_server;
Строка 183: Строка 183:
 
     }
 
     }
 
}
 
}
</code>
+
</pre>
  
 
3. Проверьте конфигурацию:
 
3. Проверьте конфигурацию:
<code>sudo nginx -t</code>
+
<pre>sudo nginx -t</pre>
  
 
4. Перезапустите Nginx:
 
4. Перезапустите Nginx:
<code>sudo systemctl restart nginx</code>
+
<pre>sudo systemctl restart nginx</pre>
  
== 6. Настройка виртуальных хостов ===
+
== 6. Настройка виртуальных хостов ==
  
 
=== Создание виртуального хоста ===
 
=== Создание виртуального хоста ===
  
 
1. Создайте директорию для сайта:
 
1. Создайте директорию для сайта:
<code>sudo mkdir -p /var/www/example.com/public_html</code>
+
<pre>sudo mkdir -p /var/www/example.com/public_html</pre>
  
 
2. Установите права доступа:
 
2. Установите права доступа:
<code>sudo chown -R www-data:www-data /var/www/example.com</code>
+
<pre>sudo chown -R www-data:www-data /var/www/example.com</pre>
<code>sudo chmod -R 755 /var/www/example.com</code>
+
<pre>sudo chmod -R 755 /var/www/example.com</pre>
  
 
3. Создайте конфигурацию виртуального хоста:
 
3. Создайте конфигурацию виртуального хоста:
<code>sudo nano /etc/nginx/sites-available/example.com</code>
+
<pre>sudo nano /etc/nginx/sites-available/example.com</pre>
  
 
4. Добавьте конфигурацию:
 
4. Добавьте конфигурацию:
<code>server {
+
<pre>server {
 
     listen 80;
 
     listen 80;
 
     listen [::]:80;
 
     listen [::]:80;
Строка 233: Строка 233:
 
     }
 
     }
 
}
 
}
</code>
+
</pre>
  
 
5. Включите сайт:
 
5. Включите сайт:
<code>sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/</code>
+
<pre>sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/</pre>
  
 
6. Удалите сайт по умолчанию:
 
6. Удалите сайт по умолчанию:
<code>sudo rm /etc/nginx/sites-enabled/default</code>
+
<pre>sudo rm /etc/nginx/sites-enabled/default</pre>
  
 
7. Проверьте конфигурацию:
 
7. Проверьте конфигурацию:
<code>sudo nginx -t</code>
+
<pre>sudo nginx -t</pre>
  
 
8. Перезапустите Nginx:
 
8. Перезапустите Nginx:
<code>sudo systemctl restart nginx</code>
+
<pre>sudo systemctl restart nginx</pre>
  
 
=== Создание тестовой страницы ===
 
=== Создание тестовой страницы ===
  
 
1. Создайте index.html:
 
1. Создайте index.html:
<code>sudo nano /var/www/example.com/public_html/index.html</code>
+
<pre>sudo nano /var/www/example.com/public_html/index.html</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code><!DOCTYPE html>
+
<pre><!DOCTYPE html>
 
<html>
 
<html>
 
<head>
 
<head>
Строка 263: Строка 263:
 
</body>
 
</body>
 
</html>
 
</html>
</code>
+
</pre>
  
 
3. Создайте PHP тест:
 
3. Создайте PHP тест:
<code>sudo nano /var/www/example.com/public_html/info.php</code>
+
<pre>sudo nano /var/www/example.com/public_html/info.php</pre>
  
 
4. Добавьте содержимое:
 
4. Добавьте содержимое:
<code><?php
+
<pre><?php
 
echo "<h1>PHP is working!</h1>";
 
echo "<h1>PHP is working!</h1>";
 
echo "<p>Current time: " . date('Y-m-d H:i:s') . "</p>";
 
echo "<p>Current time: " . date('Y-m-d H:i:s') . "</p>";
 
phpinfo();
 
phpinfo();
 
?>
 
?>
</code>
+
</pre>
  
== 7. Настройка SSL ===
+
== 7. Настройка SSL ==
  
 
=== Установка Certbot ===
 
=== Установка Certbot ===
  
 
1. Установите Certbot:
 
1. Установите Certbot:
<code>sudo apt install -y certbot python3-certbot-nginx</code>
+
<pre>sudo apt install -y certbot python3-certbot-nginx</pre>
  
 
2. Получите SSL сертификат:
 
2. Получите SSL сертификат:
<code>sudo certbot --nginx -d example.com -d www.example.com</code>
+
<pre>sudo certbot --nginx -d example.com -d www.example.com</pre>
  
 
3. Настройте автоматическое обновление:
 
3. Настройте автоматическое обновление:
<code>sudo crontab -e</code>
+
<pre>sudo crontab -e</pre>
  
 
4. Добавьте задачу:
 
4. Добавьте задачу:
<code>0 12 * * * /usr/bin/certbot renew --quiet</code>
+
<pre>0 12 * * * /usr/bin/certbot renew --quiet</pre>
  
 
=== Проверка SSL ===
 
=== Проверка SSL ===
  
 
1. Проверьте SSL сертификат:
 
1. Проверьте SSL сертификат:
<code>sudo certbot certificates</code>
+
<pre>sudo certbot certificates</pre>
  
 
2. Протестируйте SSL:
 
2. Протестируйте SSL:
<code>curl -I https://example.com</code>
+
<pre>curl -I https://example.com</pre>
  
== 8. Настройка безопасности ===
+
== 8. Настройка безопасности ==
  
 
=== Настройка файрвола ===
 
=== Настройка файрвола ===
  
 
1. Настройте UFW:
 
1. Настройте UFW:
<code>sudo ufw allow 22/tcp</code>
+
<pre>sudo ufw allow 22/tcp</pre>
<code>sudo ufw allow 80/tcp</code>
+
<pre>sudo ufw allow 80/tcp</pre>
<code>sudo ufw allow 443/tcp</code>
+
<pre>sudo ufw allow 443/tcp</pre>
<code>sudo ufw enable</code>
+
<pre>sudo ufw enable</pre>
  
 
2. Проверьте статус:
 
2. Проверьте статус:
<code>sudo ufw status</code>
+
<pre>sudo ufw status</pre>
  
 
=== Настройка fail2ban ===
 
=== Настройка fail2ban ===
  
 
1. Установите fail2ban:
 
1. Установите fail2ban:
<code>sudo apt install -y fail2ban</code>
+
<pre>sudo apt install -y fail2ban</pre>
  
 
2. Создайте конфигурацию:
 
2. Создайте конфигурацию:
<code>sudo nano /etc/fail2ban/jail.local</code>
+
<pre>sudo nano /etc/fail2ban/jail.local</pre>
  
 
3. Добавьте настройки:
 
3. Добавьте настройки:
<code>[DEFAULT]
+
<pre>[DEFAULT]
 
bantime = 3600
 
bantime = 3600
 
findtime = 600
 
findtime = 600
Строка 336: Строка 336:
 
port = http,https
 
port = http,https
 
logpath = /var/log/nginx/error.log
 
logpath = /var/log/nginx/error.log
</code>
+
</pre>
  
 
4. Запустите fail2ban:
 
4. Запустите fail2ban:
<code>sudo systemctl start fail2ban</code>
+
<pre>sudo systemctl start fail2ban</pre>
<code>sudo systemctl enable fail2ban</code>
+
<pre>sudo systemctl enable fail2ban</pre>
  
 
=== Настройка безопасности Nginx ===
 
=== Настройка безопасности Nginx ===
  
 
1. Создайте конфигурацию безопасности:
 
1. Создайте конфигурацию безопасности:
<code>sudo nano /etc/nginx/conf.d/security.conf</code>
+
<pre>sudo nano /etc/nginx/conf.d/security.conf</pre>
  
 
2. Добавьте правила безопасности:
 
2. Добавьте правила безопасности:
<code># Скрытие версии Nginx
+
<pre>\# Скрытие версии Nginx
 
server_tokens off;
 
server_tokens off;
  
# Защита от clickjacking
+
\# Защита от clickjacking
 
add_header X-Frame-Options "SAMEORIGIN" always;
 
add_header X-Frame-Options "SAMEORIGIN" always;
  
# Защита от MIME sniffing
+
\# Защита от MIME sniffing
 
add_header X-Content-Type-Options "nosniff" always;
 
add_header X-Content-Type-Options "nosniff" always;
  
# XSS Protection
+
\# XSS Protection
 
add_header X-XSS-Protection "1; mode=block" always;
 
add_header X-XSS-Protection "1; mode=block" always;
  
# Strict Transport Security
+
\# Strict Transport Security
 
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
 
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
  
# Запрет доступа к скрытым файлам
+
\# Запрет доступа к скрытым файлам
 
location ~ /\. {
 
location ~ /\. {
 
     deny all;
 
     deny all;
Строка 370: Строка 370:
 
}
 
}
  
# Запрет доступа к backup файлам
+
\# Запрет доступа к backup файлам
 
location ~* \.(bak|config|dist|fla|inc|ini|log|psd|sh|sql|swp)$ {
 
location ~* \.(bak|config|dist|fla|inc|ini|log|psd|sh|sql|swp)$ {
 
     deny all;
 
     deny all;
 
}
 
}
</code>
+
</pre>
  
 
3. Включите конфигурацию в виртуальный хост:
 
3. Включите конфигурацию в виртуальный хост:
<code>sudo nano /etc/nginx/sites-available/example.com</code>
+
<pre>sudo nano /etc/nginx/sites-available/example.com</pre>
  
 
4. Добавьте в начало файла:
 
4. Добавьте в начало файла:
<code>include /etc/nginx/conf.d/security.conf;
+
<pre>include /etc/nginx/conf.d/security.conf;
</code>
+
</pre>
  
 
5. Перезапустите Nginx:
 
5. Перезапустите Nginx:
<code>sudo systemctl restart nginx</code>
+
<pre>sudo systemctl restart nginx</pre>
  
== 9. Оптимизация производительности ===
+
== 9. Оптимизация производительности ==
  
 
=== Настройка кэширования ===
 
=== Настройка кэширования ===
  
 
1. Создайте конфигурацию кэширования:
 
1. Создайте конфигурацию кэширования:
<code>sudo nano /etc/nginx/conf.d/cache.conf</code>
+
<pre>sudo nano /etc/nginx/conf.d/cache.conf</pre>
  
 
2. Добавьте настройки:
 
2. Добавьте настройки:
<code># Кэширование статических файлов
+
<pre>\# Кэширование статических файлов
 
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
 
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
 
     expires 1y;
 
     expires 1y;
Строка 401: Строка 401:
 
}
 
}
  
# Кэширование шрифтов
+
\# Кэширование шрифтов
 
location ~* \.(woff|woff2|ttf|eot)$ {
 
location ~* \.(woff|woff2|ttf|eot)$ {
 
     expires 1y;
 
     expires 1y;
Строка 408: Строка 408:
 
}
 
}
  
# Gzip сжатие
+
\# Gzip сжатие
 
gzip on;
 
gzip on;
 
gzip_vary on;
 
gzip_vary on;
Строка 424: Строка 424:
 
     application/atom+xml
 
     application/atom+xml
 
     image/svg+xml;
 
     image/svg+xml;
</code>
+
</pre>
  
 
=== Настройка PHP-FPM пулов ===
 
=== Настройка PHP-FPM пулов ===
  
 
1. Создайте отдельный пул для сайта:
 
1. Создайте отдельный пул для сайта:
<code>sudo nano /etc/php/8.1/fpm/pool.d/example.com.conf</code>
+
<pre>sudo nano /etc/php/8.1/fpm/pool.d/example.com.conf</pre>
  
 
2. Добавьте конфигурацию:
 
2. Добавьте конфигурацию:
<code>[example.com]
+
<pre>[example.com]
 
user = www-data
 
user = www-data
 
group = www-data
 
group = www-data
Строка 449: Строка 449:
 
php_admin_value[error_log] = /var/log/php8.1-fpm-example.com.log
 
php_admin_value[error_log] = /var/log/php8.1-fpm-example.com.log
 
php_admin_flag[log_errors] = on
 
php_admin_flag[log_errors] = on
</code>
+
</pre>
  
 
3. Обновите конфигурацию Nginx:
 
3. Обновите конфигурацию Nginx:
<code>sudo nano /etc/nginx/sites-available/example.com</code>
+
<pre>sudo nano /etc/nginx/sites-available/example.com</pre>
  
 
4. Измените fastcgi_pass:
 
4. Измените fastcgi_pass:
<code>fastcgi_pass unix:/run/php/php8.1-fpm-example.com.sock;
+
<pre>fastcgi_pass unix:/run/php/php8.1-fpm-example.com.sock;
</code>
+
</pre>
  
 
5. Перезапустите сервисы:
 
5. Перезапустите сервисы:
<code>sudo systemctl restart php8.1-fpm</code>
+
<pre>sudo systemctl restart php8.1-fpm</pre>
<code>sudo systemctl restart nginx</code>
+
<pre>sudo systemctl restart nginx</pre>
  
== 10. Мониторинг и логирование ===
+
== 10. Мониторинг и логирование ==
  
 
=== Настройка логирования ===
 
=== Настройка логирования ===
  
 
1. Настройте ротацию логов:
 
1. Настройте ротацию логов:
<code>sudo nano /etc/logrotate.d/lemp</code>
+
<pre>sudo nano /etc/logrotate.d/lemp</pre>
  
 
2. Добавьте конфигурацию:
 
2. Добавьте конфигурацию:
<code>/var/log/nginx/*.log {
+
<pre>/var/log/nginx/*.log {
 
     daily
 
     daily
 
     missingok
 
     missingok
Строка 495: Строка 495:
 
     endscript
 
     endscript
 
}
 
}
</code>
+
</pre>
  
 
=== Создание скрипта мониторинга ===
 
=== Создание скрипта мониторинга ===
  
 
1. Создайте скрипт мониторинга:
 
1. Создайте скрипт мониторинга:
<code>sudo nano /usr/local/bin/lemp-monitor.sh</code>
+
<pre>sudo nano /usr/local/bin/lemp-monitor.sh</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>#!/bin/bash
+
<pre>\#!/bin/bash
  
# Проверка статуса Nginx
+
\# Проверка статуса Nginx
 
if ! systemctl is-active --quiet nginx; then
 
if ! systemctl is-active --quiet nginx; then
 
     echo "Nginx is down!" | mail -s "LEMP Alert" admin@example.com
 
     echo "Nginx is down!" | mail -s "LEMP Alert" admin@example.com
 
fi
 
fi
  
# Проверка статуса MySQL
+
\# Проверка статуса MySQL
 
if ! systemctl is-active --quiet mysql; then
 
if ! systemctl is-active --quiet mysql; then
 
     echo "MySQL is down!" | mail -s "LEMP Alert" admin@example.com
 
     echo "MySQL is down!" | mail -s "LEMP Alert" admin@example.com
 
fi
 
fi
  
# Проверка статуса PHP-FPM
+
\# Проверка статуса PHP-FPM
 
if ! systemctl is-active --quiet php8.1-fpm; then
 
if ! systemctl is-active --quiet php8.1-fpm; then
 
     echo "PHP-FPM is down!" | mail -s "LEMP Alert" admin@example.com
 
     echo "PHP-FPM is down!" | mail -s "LEMP Alert" admin@example.com
 
fi
 
fi
  
# Проверка использования диска
+
\# Проверка использования диска
 
DISK_USAGE=$(df /var/www | tail -1 | awk '{print $5}' | sed 's/%//')
 
DISK_USAGE=$(df /var/www | tail -1 | awk '{print $5}' | sed 's/%//')
 
if [ $DISK_USAGE -gt 80 ]; then
 
if [ $DISK_USAGE -gt 80 ]; then
Строка 526: Строка 526:
 
fi
 
fi
  
# Проверка доступности сайта
+
\# Проверка доступности сайта
 
if ! curl -s -o /dev/null -w "%{http_code}" http://example.com | grep -q "200"; then
 
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
 
     echo "Website is not responding!" | mail -s "LEMP Alert" admin@example.com
 
fi
 
fi
</code>
+
</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/lemp-monitor.sh</code>
+
<pre>sudo chmod +x /usr/local/bin/lemp-monitor.sh</pre>
  
 
4. Добавьте в crontab:
 
4. Добавьте в crontab:
<code>sudo crontab -e</code>
+
<pre>sudo crontab -e</pre>
  
 
5. Добавьте задачу:
 
5. Добавьте задачу:
<code>*/5 * * * * /usr/local/bin/lemp-monitor.sh</code>
+
<pre>*/5 * * * * /usr/local/bin/lemp-monitor.sh</pre>
  
== 11. Резервное копирование ===
+
== 11. Резервное копирование ==
  
 
=== Создание скрипта резервного копирования ===
 
=== Создание скрипта резервного копирования ===
  
 
1. Создайте скрипт резервного копирования:
 
1. Создайте скрипт резервного копирования:
<code>sudo nano /usr/local/bin/lemp-backup.sh</code>
+
<pre>sudo nano /usr/local/bin/lemp-backup.sh</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>#!/bin/bash
+
<pre>\#!/bin/bash
  
 
BACKUP_DIR="/backup/lemp"
 
BACKUP_DIR="/backup/lemp"
Строка 555: Строка 555:
 
SITE_DIR="/var/www/example.com"
 
SITE_DIR="/var/www/example.com"
  
# Создание директории для бэкапа
+
\# Создание директории для бэкапа
 
mkdir -p $BACKUP_DIR
 
mkdir -p $BACKUP_DIR
  
# Резервное копирование файлов сайта
+
\# Резервное копирование файлов сайта
 
tar -czf $BACKUP_DIR/website-$DATE.tar.gz -C $SITE_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
 
mysqldump -u myapp_user -p'strong_password' myapp > $BACKUP_DIR/database-$DATE.sql
  
# Сжатие SQL файла
+
\# Сжатие SQL файла
 
gzip $BACKUP_DIR/database-$DATE.sql
 
gzip $BACKUP_DIR/database-$DATE.sql
  
# Резервное копирование конфигурации Nginx
+
\# Резервное копирование конфигурации Nginx
 
tar -czf $BACKUP_DIR/nginx-config-$DATE.tar.gz -C /etc nginx
 
tar -czf $BACKUP_DIR/nginx-config-$DATE.tar.gz -C /etc nginx
  
# Резервное копирование конфигурации PHP-FPM
+
\# Резервное копирование конфигурации PHP-FPM
 
tar -czf $BACKUP_DIR/php-config-$DATE.tar.gz -C /etc php
 
tar -czf $BACKUP_DIR/php-config-$DATE.tar.gz -C /etc php
  
# Удаление старых бэкапов (старше 7 дней)
+
\# Удаление старых бэкапов (старше 7 дней)
 
find $BACKUP_DIR -name "*$DATE*" -mtime +7 -delete
 
find $BACKUP_DIR -name "*$DATE*" -mtime +7 -delete
  
 
echo "LEMP backup completed: $DATE"
 
echo "LEMP backup completed: $DATE"
</code>
+
</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/lemp-backup.sh</code>
+
<pre>sudo chmod +x /usr/local/bin/lemp-backup.sh</pre>
  
 
4. Добавьте в crontab:
 
4. Добавьте в crontab:
<code>sudo crontab -e</code>
+
<pre>sudo crontab -e</pre>
  
 
5. Добавьте задачу:
 
5. Добавьте задачу:
<code>0 3 * * * /usr/local/bin/lemp-backup.sh</code>
+
<pre>0 3 * * * /usr/local/bin/lemp-backup.sh</pre>
  
== 12. Установка популярных CMS ===
+
== 12. Установка популярных CMS ==
  
 
=== Установка WordPress ===
 
=== Установка WordPress ===
  
 
1. Скачайте WordPress:
 
1. Скачайте WordPress:
<code>cd /tmp</code>
+
<pre>cd /tmp</pre>
<code>wget https://wordpress.org/latest.tar.gz</code>
+
<pre>wget https://wordpress.org/latest.tar.gz</pre>
<code>tar -xzf latest.tar.gz</code>
+
<pre>tar -xzf latest.tar.gz</pre>
  
 
2. Переместите файлы:
 
2. Переместите файлы:
<code>sudo mv wordpress/* /var/www/example.com/public_html/</code>
+
<pre>sudo mv wordpress/* /var/www/example.com/public_html/</pre>
<code>sudo chown -R www-data:www-data /var/www/example.com/public_html</code>
+
<pre>sudo chown -R www-data:www-data /var/www/example.com/public_html</pre>
  
 
3. Настройте WordPress:
 
3. Настройте WordPress:
<code>sudo cp /var/www/example.com/public_html/wp-config-sample.php /var/www/example.com/public_html/wp-config.php</code>
+
<pre>sudo cp /var/www/example.com/public_html/wp-config-sample.php /var/www/example.com/public_html/wp-config.php</pre>
  
 
4. Отредактируйте конфигурацию:
 
4. Отредактируйте конфигурацию:
<code>sudo nano /var/www/example.com/public_html/wp-config.php</code>
+
<pre>sudo nano /var/www/example.com/public_html/wp-config.php</pre>
  
 
=== Установка Laravel ===
 
=== Установка Laravel ===
  
 
1. Установите Composer:
 
1. Установите Composer:
<code>curl -sS https://getcomposer.org/installer | php</code>
+
<pre>curl -sS https://getcomposer.org/installer | php</pre>
<code>sudo mv composer.phar /usr/local/bin/composer</code>
+
<pre>sudo mv composer.phar /usr/local/bin/composer</pre>
  
 
2. Создайте Laravel проект:
 
2. Создайте Laravel проект:
<code>cd /var/www/example.com/public_html</code>
+
<pre>cd /var/www/example.com/public_html</pre>
<code>composer create-project laravel/laravel .</code>
+
<pre>composer create-project laravel/laravel .</pre>
  
 
3. Настройте права доступа:
 
3. Настройте права доступа:
<code>sudo chown -R www-data:www-data /var/www/example.com/public_html</code>
+
<pre>sudo chown -R www-data:www-data /var/www/example.com/public_html</pre>
<code>sudo chmod -R 755 /var/www/example.com/public_html</code>
+
<pre>sudo chmod -R 755 /var/www/example.com/public_html</pre>
  
== 13. Устранение неполадок ===
+
== 13. Устранение неполадок ==
  
 
=== Частые проблемы ===
 
=== Частые проблемы ===
  
 
1. '''Nginx не запускается''':
 
1. '''Nginx не запускается''':
* Проверьте конфигурацию: <code>sudo nginx -t</code>
+
* Проверьте конфигурацию: <pre>sudo nginx -t</pre>
* Проверьте логи: <code>sudo journalctl -u nginx</code>
+
* Проверьте логи: <pre>sudo journalctl -u nginx</pre>
* Проверьте порты: <code>sudo netstat -tlnp | grep :80</code>
+
* Проверьте порты: <pre>sudo netstat -tlnp | grep :80</pre>
  
 
2. '''PHP не работает''':
 
2. '''PHP не работает''':
* Проверьте статус PHP-FPM: <code>sudo systemctl status php8.1-fpm</code>
+
* Проверьте статус PHP-FPM: <pre>sudo systemctl status php8.1-fpm</pre>
* Проверьте сокет: <code>ls -la /run/php/php8.1-fpm.sock</code>
+
* Проверьте сокет: <pre>ls -la /run/php/php8.1-fpm.sock</pre>
 
* Проверьте конфигурацию Nginx
 
* Проверьте конфигурацию Nginx
  
 
3. '''MySQL не подключается''':
 
3. '''MySQL не подключается''':
* Проверьте статус: <code>sudo systemctl status mysql</code>
+
* Проверьте статус: <pre>sudo systemctl status mysql</pre>
* Проверьте логи: <code>sudo tail -f /var/log/mysql/error.log</code>
+
* Проверьте логи: <pre>sudo tail -f /var/log/mysql/error.log</pre>
 
* Проверьте права пользователя
 
* Проверьте права пользователя
  
Строка 643: Строка 643:
  
 
1. '''Проверка статуса сервисов''':
 
1. '''Проверка статуса сервисов''':
<code>sudo systemctl status nginx</code>
+
<pre>sudo systemctl status nginx</pre>
<code>sudo systemctl status mysql</code>
+
<pre>sudo systemctl status mysql</pre>
<code>sudo systemctl status php8.1-fpm</code>
+
<pre>sudo systemctl status php8.1-fpm</pre>
  
 
2. '''Проверка логов''':
 
2. '''Проверка логов''':
<code>sudo tail -f /var/log/nginx/error.log</code>
+
<pre>sudo tail -f /var/log/nginx/error.log</pre>
<code>sudo tail -f /var/log/mysql/error.log</code>
+
<pre>sudo tail -f /var/log/mysql/error.log</pre>
<code>sudo tail -f /var/log/php8.1-fpm.log</code>
+
<pre>sudo tail -f /var/log/php8.1-fpm.log</pre>
  
 
3. '''Проверка подключения к базе данных''':
 
3. '''Проверка подключения к базе данных''':
<code>mysql -u myapp_user -p -e "SELECT 1;"</code>
+
<pre>mysql -u myapp_user -p -e "SELECT 1;"</pre>
  
 
4. '''Тестирование PHP''':
 
4. '''Тестирование PHP''':
<code>php -r "echo 'PHP is working';"</code>
+
<pre>php -r "echo 'PHP is working';"</pre>
  
 
5. '''Проверка конфигурации Nginx''':
 
5. '''Проверка конфигурации Nginx''':
<code>sudo nginx -t</code>
+
<pre>sudo nginx -t</pre>
  
 
== Заключение ==
 
== Заключение ==

Текущая версия на 10:33, 15 октября 2025

Содержание

Настройка 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>
    <h1>LEMP Stack is Working!</h1>
    <p>Nginx, MySQL, and PHP are running successfully.</p>
</body>
</html>

3. Создайте PHP тест:

sudo nano /var/www/example.com/public_html/info.php

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

<?php
echo "<h1>PHP is working!</h1>";
echo "<p>Current time: " . date('Y-m-d H:i:s') . "</p>";
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):

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