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

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск
(Новая страница: «= Настройка LAMP стека (Linux, Apache, MySQL, PHP) = == 1. Подготовка системы == * Войдите в систему под уче…»)
 
 
Строка 6: Строка 6:
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
  
== 2. Установка Apache ===
+
== 2. Установка Apache ==
  
 
=== Обновление системы ===
 
=== Обновление системы ===
  
 
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>
  
 
=== Установка Apache ===
 
=== Установка Apache ===
  
 
1. Установите Apache:
 
1. Установите Apache:
<code>sudo apt install -y apache2</code>
+
<pre>sudo apt install -y apache2</pre>
  
 
2. Запустите и включите автозапуск:
 
2. Запустите и включите автозапуск:
<code>sudo systemctl start apache2</code>
+
<pre>sudo systemctl start apache2</pre>
<code>sudo systemctl enable apache2</code>
+
<pre>sudo systemctl enable apache2</pre>
  
 
3. Проверьте статус:
 
3. Проверьте статус:
<code>sudo systemctl status apache2</code>
+
<pre>sudo systemctl status apache2</pre>
  
 
4. Проверьте работу Apache:
 
4. Проверьте работу Apache:
<code>curl -I http://localhost</code>
+
<pre>curl -I http://localhost</pre>
  
 
=== Настройка Apache ===
 
=== Настройка Apache ===
  
 
1. Включите необходимые модули:
 
1. Включите необходимые модули:
<code>sudo a2enmod rewrite</code>
+
<pre>sudo a2enmod rewrite</pre>
<code>sudo a2enmod ssl</code>
+
<pre>sudo a2enmod ssl</pre>
<code>sudo a2enmod headers</code>
+
<pre>sudo a2enmod headers</pre>
<code>sudo a2enmod expires</code>
+
<pre>sudo a2enmod expires</pre>
  
 
2. Перезапустите Apache:
 
2. Перезапустите Apache:
<code>sudo systemctl restart apache2</code>
+
<pre>sudo systemctl restart apache2</pre>
  
 
3. Проверьте конфигурацию:
 
3. Проверьте конфигурацию:
<code>sudo apache2ctl configtest</code>
+
<pre>sudo apache2ctl configtest</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. Следуйте инструкциям:
Строка 74: Строка 74:
  
 
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 ===
 
=== Установка PHP ===
  
 
1. Установите PHP и необходимые модули:
 
1. Установите PHP и необходимые модули:
<code>sudo apt install -y php php-mysql php-curl php-gd php-mbstring php-xml php-zip php-intl php-soap php-json php-bcmath</code>
+
<pre>sudo apt install -y php php-mysql php-curl php-gd php-mbstring php-xml php-zip php-intl php-soap php-json php-bcmath</pre>
  
 
2. Проверьте версию PHP:
 
2. Проверьте версию PHP:
<code>php --version</code>
+
<pre>php --version</pre>
  
 
3. Проверьте модули PHP:
 
3. Проверьте модули PHP:
<code>php -m</code>
+
<pre>php -m</pre>
  
 
=== Настройка PHP ===
 
=== Настройка PHP ===
  
 
1. Отредактируйте конфигурацию PHP:
 
1. Отредактируйте конфигурацию PHP:
<code>sudo nano /etc/php/8.1/apache2/php.ini</code>
+
<pre>sudo nano /etc/php/8.1/apache2/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
Строка 117: Строка 117:
 
log_errors = On
 
log_errors = On
 
error_log = /var/log/php_errors.log
 
error_log = /var/log/php_errors.log
</code>
+
</pre>
  
 
3. Перезапустите Apache:
 
3. Перезапустите Apache:
<code>sudo systemctl restart apache2</code>
+
<pre>sudo systemctl restart apache2</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. Настройка виртуальных хостов ===
+
== 5. Настройка виртуальных хостов ==
  
 
=== Создание виртуального хоста ===
 
=== Создание виртуального хоста ===
  
 
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/apache2/sites-available/example.com.conf</code>
+
<pre>sudo nano /etc/apache2/sites-available/example.com.conf</pre>
  
 
4. Добавьте конфигурацию:
 
4. Добавьте конфигурацию:
<code><VirtualHost *:80>
+
<pre><VirtualHost *:80>
 
     ServerAdmin admin@example.com
 
     ServerAdmin admin@example.com
 
     ServerName example.com
 
     ServerName example.com
Строка 168: Строка 168:
 
     CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
 
     CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
 
</VirtualHost>
 
</VirtualHost>
</code>
+
</pre>
  
 
5. Включите сайт:
 
5. Включите сайт:
<code>sudo a2ensite example.com</code>
+
<pre>sudo a2ensite example.com</pre>
  
 
6. Отключите сайт по умолчанию:
 
6. Отключите сайт по умолчанию:
<code>sudo a2dissite 000-default</code>
+
<pre>sudo a2dissite 000-default</pre>
  
 
7. Перезапустите Apache:
 
7. Перезапустите Apache:
<code>sudo systemctl restart apache2</code>
+
<pre>sudo systemctl restart apache2</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>
Строка 195: Строка 195:
 
</body>
 
</body>
 
</html>
 
</html>
</code>
+
</pre>
  
== 6. Настройка SSL ===
+
== 6. Настройка SSL ==
  
 
=== Установка Certbot ===
 
=== Установка Certbot ===
  
 
1. Установите Certbot:
 
1. Установите Certbot:
<code>sudo apt install -y certbot python3-certbot-apache</code>
+
<pre>sudo apt install -y certbot python3-certbot-apache</pre>
  
 
2. Получите SSL сертификат:
 
2. Получите SSL сертификат:
<code>sudo certbot --apache -d example.com -d www.example.com</code>
+
<pre>sudo certbot --apache -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>
  
== 7. Настройка безопасности ===
+
== 7. Настройка безопасности ==
  
 
=== Настройка файрвола ===
 
=== Настройка файрвола ===
  
 
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
Строка 262: Строка 262:
 
port = http,https
 
port = http,https
 
logpath = /var/log/apache2/*error.log
 
logpath = /var/log/apache2/*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>
  
 
=== Настройка безопасности Apache ===
 
=== Настройка безопасности Apache ===
  
 
1. Создайте .htaccess файл:
 
1. Создайте .htaccess файл:
<code>sudo nano /var/www/example.com/public_html/.htaccess</code>
+
<pre>sudo nano /var/www/example.com/public_html/.htaccess</pre>
  
 
2. Добавьте правила безопасности:
 
2. Добавьте правила безопасности:
<code># Защита от просмотра файлов
+
<pre>\# Защита от просмотра файлов
 
Options -Indexes
 
Options -Indexes
  
# Защита конфигурационных файлов
+
\# Защита конфигурационных файлов
 
<Files "*.ini">
 
<Files "*.ini">
 
     Order allow,deny
 
     Order allow,deny
Строка 283: Строка 283:
 
</Files>
 
</Files>
  
# Защита от SQL инъекций
+
\# Защита от SQL инъекций
 
RewriteEngine On
 
RewriteEngine On
 
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
 
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
Строка 292: Строка 292:
 
RewriteCond %{QUERY_STRING} (\<|%3C).*embed.*(\>|%3E) [NC]
 
RewriteCond %{QUERY_STRING} (\<|%3C).*embed.*(\>|%3E) [NC]
 
RewriteRule ^(.*)$ - [F,L]
 
RewriteRule ^(.*)$ - [F,L]
</code>
+
</pre>
  
== 8. Оптимизация производительности ===
+
== 8. Оптимизация производительности ==
  
 
=== Настройка кэширования ===
 
=== Настройка кэширования ===
  
 
1. Включите модули кэширования:
 
1. Включите модули кэширования:
<code>sudo a2enmod expires</code>
+
<pre>sudo a2enmod expires</pre>
<code>sudo a2enmod headers</code>
+
<pre>sudo a2enmod headers</pre>
<code>sudo a2enmod deflate</code>
+
<pre>sudo a2enmod deflate</pre>
  
 
2. Создайте конфигурацию кэширования:
 
2. Создайте конфигурацию кэширования:
<code>sudo nano /etc/apache2/conf-available/cache.conf</code>
+
<pre>sudo nano /etc/apache2/conf-available/cache.conf</pre>
  
 
3. Добавьте настройки:
 
3. Добавьте настройки:
<code><IfModule mod_expires.c>
+
<pre><IfModule mod_expires.c>
 
     ExpiresActive On
 
     ExpiresActive On
 
     ExpiresByType text/css "access plus 1 month"
 
     ExpiresByType text/css "access plus 1 month"
Строка 329: Строка 329:
 
     AddOutputFilterByType DEFLATE application/x-javascript
 
     AddOutputFilterByType DEFLATE application/x-javascript
 
</IfModule>
 
</IfModule>
</code>
+
</pre>
  
 
4. Включите конфигурацию:
 
4. Включите конфигурацию:
<code>sudo a2enconf cache</code>
+
<pre>sudo a2enconf cache</pre>
  
 
5. Перезапустите Apache:
 
5. Перезапустите Apache:
<code>sudo systemctl restart apache2</code>
+
<pre>sudo systemctl restart apache2</pre>
  
 
=== Настройка PHP-FPM ===
 
=== Настройка PHP-FPM ===
  
 
1. Установите PHP-FPM:
 
1. Установите PHP-FPM:
<code>sudo apt install -y php8.1-fpm</code>
+
<pre>sudo apt install -y php8.1-fpm</pre>
  
 
2. Настройте Apache для использования PHP-FPM:
 
2. Настройте Apache для использования PHP-FPM:
<code>sudo a2enmod proxy_fcgi setenvif</code>
+
<pre>sudo a2enmod proxy_fcgi setenvif</pre>
<code>sudo a2enconf php8.1-fpm</code>
+
<pre>sudo a2enconf php8.1-fpm</pre>
  
 
3. Перезапустите сервисы:
 
3. Перезапустите сервисы:
<code>sudo systemctl restart apache2</code>
+
<pre>sudo systemctl restart apache2</pre>
<code>sudo systemctl restart php8.1-fpm</code>
+
<pre>sudo systemctl restart php8.1-fpm</pre>
  
== 9. Мониторинг и логирование ===
+
== 9. Мониторинг и логирование ==
  
 
=== Настройка логирования ===
 
=== Настройка логирования ===
  
 
1. Настройте ротацию логов:
 
1. Настройте ротацию логов:
<code>sudo nano /etc/logrotate.d/lamp</code>
+
<pre>sudo nano /etc/logrotate.d/lamp</pre>
  
 
2. Добавьте конфигурацию:
 
2. Добавьте конфигурацию:
<code>/var/log/apache2/*.log {
+
<pre>/var/log/apache2/*.log {
 
     daily
 
     daily
 
     missingok
 
     missingok
Строка 383: Строка 383:
 
     endscript
 
     endscript
 
}
 
}
</code>
+
</pre>
  
 
=== Создание скрипта мониторинга ===
 
=== Создание скрипта мониторинга ===
  
 
1. Создайте скрипт мониторинга:
 
1. Создайте скрипт мониторинга:
<code>sudo nano /usr/local/bin/lamp-monitor.sh</code>
+
<pre>sudo nano /usr/local/bin/lamp-monitor.sh</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>#!/bin/bash
+
<pre>\#!/bin/bash
  
# Проверка статуса Apache
+
\# Проверка статуса Apache
 
if ! systemctl is-active --quiet apache2; then
 
if ! systemctl is-active --quiet apache2; then
 
     echo "Apache is down!" | mail -s "LAMP Alert" admin@example.com
 
     echo "Apache is down!" | mail -s "LAMP 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 "LAMP Alert" admin@example.com
 
     echo "MySQL is down!" | mail -s "LAMP 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
Строка 409: Строка 409:
 
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 "LAMP Alert" admin@example.com
 
     echo "Website is not responding!" | mail -s "LAMP Alert" admin@example.com
 
fi
 
fi
</code>
+
</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/lamp-monitor.sh</code>
+
<pre>sudo chmod +x /usr/local/bin/lamp-monitor.sh</pre>
  
 
4. Добавьте в crontab:
 
4. Добавьте в crontab:
<code>sudo crontab -e</code>
+
<pre>sudo crontab -e</pre>
  
 
5. Добавьте задачу:
 
5. Добавьте задачу:
<code>*/5 * * * * /usr/local/bin/lamp-monitor.sh</code>
+
<pre>*/5 * * * * /usr/local/bin/lamp-monitor.sh</pre>
  
== 10. Резервное копирование ===
+
== 10. Резервное копирование ==
  
 
=== Создание скрипта резервного копирования ===
 
=== Создание скрипта резервного копирования ===
  
 
1. Создайте скрипт резервного копирования:
 
1. Создайте скрипт резервного копирования:
<code>sudo nano /usr/local/bin/lamp-backup.sh</code>
+
<pre>sudo nano /usr/local/bin/lamp-backup.sh</pre>
  
 
2. Добавьте содержимое:
 
2. Добавьте содержимое:
<code>#!/bin/bash
+
<pre>\#!/bin/bash
  
 
BACKUP_DIR="/backup/lamp"
 
BACKUP_DIR="/backup/lamp"
Строка 438: Строка 438:
 
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
  
# Резервное копирование конфигурации Apache
+
\# Резервное копирование конфигурации Apache
 
tar -czf $BACKUP_DIR/apache-config-$DATE.tar.gz -C /etc apache2
 
tar -czf $BACKUP_DIR/apache-config-$DATE.tar.gz -C /etc apache2
  
# Удаление старых бэкапов (старше 7 дней)
+
\# Удаление старых бэкапов (старше 7 дней)
 
find $BACKUP_DIR -name "*$DATE*" -mtime +7 -delete
 
find $BACKUP_DIR -name "*$DATE*" -mtime +7 -delete
  
 
echo "LAMP backup completed: $DATE"
 
echo "LAMP backup completed: $DATE"
</code>
+
</pre>
  
 
3. Сделайте скрипт исполняемым:
 
3. Сделайте скрипт исполняемым:
<code>sudo chmod +x /usr/local/bin/lamp-backup.sh</code>
+
<pre>sudo chmod +x /usr/local/bin/lamp-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/lamp-backup.sh</code>
+
<pre>0 3 * * * /usr/local/bin/lamp-backup.sh</pre>
  
== 11. Установка популярных CMS ===
+
== 11. Установка популярных 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>
  
 
=== Установка Joomla ===
 
=== Установка Joomla ===
  
 
1. Скачайте Joomla:
 
1. Скачайте Joomla:
<code>cd /tmp</code>
+
<pre>cd /tmp</pre>
<code>wget https://downloads.joomla.org/cms/joomla4/latest/Joomla_4.4.0-Stable-Full_Package.zip</code>
+
<pre>wget https://downloads.joomla.org/cms/joomla4/latest/Joomla_4.4.0-Stable-Full_Package.zip</pre>
<code>unzip Joomla_4.4.0-Stable-Full_Package.zip</code>
+
<pre>unzip Joomla_4.4.0-Stable-Full_Package.zip</pre>
  
 
2. Переместите файлы:
 
2. Переместите файлы:
<code>sudo mv Joomla_4.4.0-Stable-Full_Package/* /var/www/example.com/public_html/</code>
+
<pre>sudo mv Joomla_4.4.0-Stable-Full_Package/* /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>
  
== 12. Устранение неполадок ===
+
== 12. Устранение неполадок ==
  
 
=== Частые проблемы ===
 
=== Частые проблемы ===
  
 
1. '''Apache не запускается''':
 
1. '''Apache не запускается''':
* Проверьте конфигурацию: <code>sudo apache2ctl configtest</code>
+
* Проверьте конфигурацию: <pre>sudo apache2ctl configtest</pre>
* Проверьте логи: <code>sudo journalctl -u apache2</code>
+
* Проверьте логи: <pre>sudo journalctl -u apache2</pre>
* Проверьте порты: <code>sudo netstat -tlnp | grep :80</code>
+
* Проверьте порты: <pre>sudo netstat -tlnp | grep :80</pre>
  
 
2. '''MySQL не подключается''':
 
2. '''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>
 
* Проверьте права пользователя
 
* Проверьте права пользователя
  
 
3. '''PHP не работает''':
 
3. '''PHP не работает''':
* Проверьте модуль PHP: <code>sudo a2enmod php8.1</code>
+
* Проверьте модуль PHP: <pre>sudo a2enmod php8.1</pre>
 
* Проверьте конфигурацию PHP
 
* Проверьте конфигурацию PHP
 
* Перезапустите Apache
 
* Перезапустите Apache
Строка 520: Строка 520:
  
 
1. '''Проверка статуса сервисов''':
 
1. '''Проверка статуса сервисов''':
<code>sudo systemctl status apache2</code>
+
<pre>sudo systemctl status apache2</pre>
<code>sudo systemctl status mysql</code>
+
<pre>sudo systemctl status mysql</pre>
  
 
2. '''Проверка логов''':
 
2. '''Проверка логов''':
<code>sudo tail -f /var/log/apache2/error.log</code>
+
<pre>sudo tail -f /var/log/apache2/error.log</pre>
<code>sudo tail -f /var/log/mysql/error.log</code>
+
<pre>sudo tail -f /var/log/mysql/error.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>
  
 
== Заключение ==
 
== Заключение ==

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

Содержание

Настройка LAMP стека (Linux, Apache, MySQL, PHP)

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

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

2. Установка Apache

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

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

sudo apt update

2. Установите необходимые пакеты:

sudo apt install -y wget curl unzip

Установка Apache

1. Установите Apache:

sudo apt install -y apache2

2. Запустите и включите автозапуск:

sudo systemctl start apache2
sudo systemctl enable apache2

3. Проверьте статус:

sudo systemctl status apache2

4. Проверьте работу Apache:

curl -I http://localhost

Настройка Apache

1. Включите необходимые модули:

sudo a2enmod rewrite
sudo a2enmod ssl
sudo a2enmod headers
sudo a2enmod expires

2. Перезапустите Apache:

sudo systemctl restart apache2

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

sudo apache2ctl configtest

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

1. Установите PHP и необходимые модули:

sudo apt install -y php php-mysql php-curl php-gd php-mbstring php-xml php-zip php-intl php-soap php-json php-bcmath

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

php --version

3. Проверьте модули PHP:

php -m

Настройка PHP

1. Отредактируйте конфигурацию PHP:

sudo nano /etc/php/8.1/apache2/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. Перезапустите Apache:

sudo systemctl restart apache2

Тестирование 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. Настройка виртуальных хостов

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

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/apache2/sites-available/example.com.conf

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

<VirtualHost *:80>
    ServerAdmin admin@example.com
    ServerName example.com
    ServerAlias www.example.com
    DocumentRoot /var/www/example.com/public_html
    
    <Directory /var/www/example.com/public_html>
        AllowOverride All
        Require all granted
    </Directory>
    
    ErrorLog ${APACHE_LOG_DIR}/example.com_error.log
    CustomLog ${APACHE_LOG_DIR}/example.com_access.log combined
</VirtualHost>

5. Включите сайт:

sudo a2ensite example.com

6. Отключите сайт по умолчанию:

sudo a2dissite 000-default

7. Перезапустите Apache:

sudo systemctl restart apache2

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

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>LAMP Stack is Working!</h1>
    <p>Apache, MySQL, and PHP are running successfully.</p>
</body>
</html>

6. Настройка SSL

Установка Certbot

1. Установите Certbot:

sudo apt install -y certbot python3-certbot-apache

2. Получите SSL сертификат:

sudo certbot --apache -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

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

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

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

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

[apache-noscript]
enabled = true
port = http,https
logpath = /var/log/apache2/*access.log

[apache-overflows]
enabled = true
port = http,https
logpath = /var/log/apache2/*error.log

4. Запустите fail2ban:

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

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

1. Создайте .htaccess файл:

sudo nano /var/www/example.com/public_html/.htaccess

2. Добавьте правила безопасности:

\# Защита от просмотра файлов
Options -Indexes

\# Защита конфигурационных файлов
<Files "*.ini">
    Order allow,deny
    Deny from all
</Files>

\# Защита от SQL инъекций
RewriteEngine On
RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*iframe.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*object.*(\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} (\<|%3C).*embed.*(\>|%3E) [NC]
RewriteRule ^(.*)$ - [F,L]

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

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

1. Включите модули кэширования:

sudo a2enmod expires
sudo a2enmod headers
sudo a2enmod deflate

2. Создайте конфигурацию кэширования:

sudo nano /etc/apache2/conf-available/cache.conf

3. Добавьте настройки:

<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/svg+xml "access plus 1 month"
</IfModule>

<IfModule mod_deflate.c>
    AddOutputFilterByType DEFLATE text/plain
    AddOutputFilterByType DEFLATE text/html
    AddOutputFilterByType DEFLATE text/xml
    AddOutputFilterByType DEFLATE text/css
    AddOutputFilterByType DEFLATE application/xml
    AddOutputFilterByType DEFLATE application/xhtml+xml
    AddOutputFilterByType DEFLATE application/rss+xml
    AddOutputFilterByType DEFLATE application/javascript
    AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>

4. Включите конфигурацию:

sudo a2enconf cache

5. Перезапустите Apache:

sudo systemctl restart apache2

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

1. Установите PHP-FPM:

sudo apt install -y php8.1-fpm

2. Настройте Apache для использования PHP-FPM:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.1-fpm

3. Перезапустите сервисы:

sudo systemctl restart apache2
sudo systemctl restart php8.1-fpm

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

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

1. Настройте ротацию логов:

sudo nano /etc/logrotate.d/lamp

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

/var/log/apache2/*.log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 644 www-data www-data
    postrotate
        systemctl reload apache2
    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/lamp-monitor.sh

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

\#!/bin/bash

\# Проверка статуса Apache
if ! systemctl is-active --quiet apache2; then
    echo "Apache is down!" | mail -s "LAMP Alert" admin@example.com
fi

\# Проверка статуса MySQL
if ! systemctl is-active --quiet mysql; then
    echo "MySQL is down!" | mail -s "LAMP 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 "LAMP 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 "LAMP Alert" admin@example.com
fi

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/lamp-monitor.sh

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

sudo crontab -e

5. Добавьте задачу:

*/5 * * * * /usr/local/bin/lamp-monitor.sh

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

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

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

sudo nano /usr/local/bin/lamp-backup.sh

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

\#!/bin/bash

BACKUP_DIR="/backup/lamp"
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

\# Резервное копирование конфигурации Apache
tar -czf $BACKUP_DIR/apache-config-$DATE.tar.gz -C /etc apache2

\# Удаление старых бэкапов (старше 7 дней)
find $BACKUP_DIR -name "*$DATE*" -mtime +7 -delete

echo "LAMP backup completed: $DATE"

3. Сделайте скрипт исполняемым:

sudo chmod +x /usr/local/bin/lamp-backup.sh

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

sudo crontab -e

5. Добавьте задачу:

0 3 * * * /usr/local/bin/lamp-backup.sh

11. Установка популярных 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

Установка Joomla

1. Скачайте Joomla:

cd /tmp
wget https://downloads.joomla.org/cms/joomla4/latest/Joomla_4.4.0-Stable-Full_Package.zip
unzip Joomla_4.4.0-Stable-Full_Package.zip

2. Переместите файлы:

sudo mv Joomla_4.4.0-Stable-Full_Package/* /var/www/example.com/public_html/
sudo chown -R www-data:www-data /var/www/example.com/public_html

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

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

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

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

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

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

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

  • Проверьте модуль PHP:
    sudo a2enmod php8.1
  • Проверьте конфигурацию PHP
  • Перезапустите Apache

Диагностика

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

sudo systemctl status apache2
sudo systemctl status mysql

2. Проверка логов:

sudo tail -f /var/log/apache2/error.log
sudo tail -f /var/log/mysql/error.log

3. Проверка подключения к базе данных:

mysql -u myapp_user -p -e "SELECT 1;"

4. Тестирование PHP:

php -r "echo 'PHP is working';"

Заключение

LAMP стек успешно установлен и настроен! Теперь у вас есть полнофункциональная веб-платформа для разработки и хостинга веб-приложений.

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

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