Настройка 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 стека и оптимизацией производительности ваших веб-приложений!