Настройка LAMP стека Linux-Apache-MySQL-PHP — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «= Настройка LAMP стека (Linux, Apache, MySQL, PHP) = == 1. Подготовка системы == * Войдите в систему под уче…») |
Admin (обсуждение | вклад) |
||
Строка 6: | Строка 6: | ||
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль. | * Убедитесь, что у вас есть доступ к серверу через SSH или консоль. | ||
− | == 2. Установка Apache | + | == 2. Установка Apache == |
=== Обновление системы === | === Обновление системы === | ||
1. Обновите систему: | 1. Обновите систему: | ||
− | < | + | <pre>sudo apt update</pre> |
2. Установите необходимые пакеты: | 2. Установите необходимые пакеты: | ||
− | < | + | <pre>sudo apt install -y wget curl unzip</pre> |
=== Установка Apache === | === Установка Apache === | ||
1. Установите Apache: | 1. Установите Apache: | ||
− | < | + | <pre>sudo apt install -y apache2</pre> |
2. Запустите и включите автозапуск: | 2. Запустите и включите автозапуск: | ||
− | < | + | <pre>sudo systemctl start apache2</pre> |
− | < | + | <pre>sudo systemctl enable apache2</pre> |
3. Проверьте статус: | 3. Проверьте статус: | ||
− | < | + | <pre>sudo systemctl status apache2</pre> |
4. Проверьте работу Apache: | 4. Проверьте работу Apache: | ||
− | < | + | <pre>curl -I http://localhost</pre> |
=== Настройка Apache === | === Настройка Apache === | ||
1. Включите необходимые модули: | 1. Включите необходимые модули: | ||
− | < | + | <pre>sudo a2enmod rewrite</pre> |
− | < | + | <pre>sudo a2enmod ssl</pre> |
− | < | + | <pre>sudo a2enmod headers</pre> |
− | < | + | <pre>sudo a2enmod expires</pre> |
2. Перезапустите Apache: | 2. Перезапустите Apache: | ||
− | < | + | <pre>sudo systemctl restart apache2</pre> |
3. Проверьте конфигурацию: | 3. Проверьте конфигурацию: | ||
− | < | + | <pre>sudo apache2ctl configtest</pre> |
− | == 3. Установка MySQL | + | == 3. Установка MySQL == |
=== Установка MySQL === | === Установка MySQL === | ||
1. Установите MySQL: | 1. Установите MySQL: | ||
− | < | + | <pre>sudo apt install -y mysql-server</pre> |
2. Запустите и включите автозапуск: | 2. Запустите и включите автозапуск: | ||
− | < | + | <pre>sudo systemctl start mysql</pre> |
− | < | + | <pre>sudo systemctl enable mysql</pre> |
3. Проверьте статус: | 3. Проверьте статус: | ||
− | < | + | <pre>sudo systemctl status mysql</pre> |
=== Настройка безопасности MySQL === | === Настройка безопасности MySQL === | ||
1. Запустите скрипт безопасности: | 1. Запустите скрипт безопасности: | ||
− | < | + | <pre>sudo mysql_secure_installation</pre> |
2. Следуйте инструкциям: | 2. Следуйте инструкциям: | ||
Строка 74: | Строка 74: | ||
1. Подключитесь к MySQL: | 1. Подключитесь к MySQL: | ||
− | < | + | <pre>sudo mysql -u root -p</pre> |
2. Создайте базу данных: | 2. Создайте базу данных: | ||
− | < | + | <pre>CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;</pre> |
3. Создайте пользователя: | 3. Создайте пользователя: | ||
− | < | + | <pre>CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'strong_password';</pre> |
4. Предоставьте права: | 4. Предоставьте права: | ||
− | < | + | <pre>GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost';</pre> |
− | < | + | <pre>FLUSH PRIVILEGES;</pre> |
5. Выйдите из MySQL: | 5. Выйдите из MySQL: | ||
− | < | + | <pre>EXIT;</pre> |
− | == 4. Установка PHP | + | == 4. Установка PHP == |
=== Установка PHP === | === Установка PHP === | ||
1. Установите PHP и необходимые модули: | 1. Установите PHP и необходимые модули: | ||
− | < | + | <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: | ||
− | < | + | <pre>php --version</pre> |
3. Проверьте модули PHP: | 3. Проверьте модули PHP: | ||
− | < | + | <pre>php -m</pre> |
=== Настройка PHP === | === Настройка PHP === | ||
1. Отредактируйте конфигурацию PHP: | 1. Отредактируйте конфигурацию PHP: | ||
− | < | + | <pre>sudo nano /etc/php/8.1/apache2/php.ini</pre> |
2. Настройте основные параметры: | 2. Настройте основные параметры: | ||
− | < | + | <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 | ||
− | </ | + | </pre> |
3. Перезапустите Apache: | 3. Перезапустите Apache: | ||
− | < | + | <pre>sudo systemctl restart apache2</pre> |
=== Тестирование PHP === | === Тестирование PHP === | ||
1. Создайте тестовый файл: | 1. Создайте тестовый файл: | ||
− | < | + | <pre>sudo nano /var/www/html/info.php</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre><?php |
phpinfo(); | phpinfo(); | ||
?> | ?> | ||
− | </ | + | </pre> |
3. Проверьте в браузере: | 3. Проверьте в браузере: | ||
− | < | + | <pre>http://your-server-ip/info.php</pre> |
4. Удалите тестовый файл: | 4. Удалите тестовый файл: | ||
− | < | + | <pre>sudo rm /var/www/html/info.php</pre> |
− | == 5. Настройка виртуальных хостов | + | == 5. Настройка виртуальных хостов == |
=== Создание виртуального хоста === | === Создание виртуального хоста === | ||
1. Создайте директорию для сайта: | 1. Создайте директорию для сайта: | ||
− | < | + | <pre>sudo mkdir -p /var/www/example.com/public_html</pre> |
2. Установите права доступа: | 2. Установите права доступа: | ||
− | < | + | <pre>sudo chown -R www-data:www-data /var/www/example.com</pre> |
− | < | + | <pre>sudo chmod -R 755 /var/www/example.com</pre> |
3. Создайте конфигурацию виртуального хоста: | 3. Создайте конфигурацию виртуального хоста: | ||
− | < | + | <pre>sudo nano /etc/apache2/sites-available/example.com.conf</pre> |
4. Добавьте конфигурацию: | 4. Добавьте конфигурацию: | ||
− | < | + | <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> | ||
− | </ | + | </pre> |
5. Включите сайт: | 5. Включите сайт: | ||
− | < | + | <pre>sudo a2ensite example.com</pre> |
6. Отключите сайт по умолчанию: | 6. Отключите сайт по умолчанию: | ||
− | < | + | <pre>sudo a2dissite 000-default</pre> |
7. Перезапустите Apache: | 7. Перезапустите Apache: | ||
− | < | + | <pre>sudo systemctl restart apache2</pre> |
=== Создание тестовой страницы === | === Создание тестовой страницы === | ||
1. Создайте index.html: | 1. Создайте index.html: | ||
− | < | + | <pre>sudo nano /var/www/example.com/public_html/index.html</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <pre><!DOCTYPE html> |
<html> | <html> | ||
<head> | <head> | ||
Строка 195: | Строка 195: | ||
</body> | </body> | ||
</html> | </html> | ||
− | </ | + | </pre> |
− | == 6. Настройка SSL | + | == 6. Настройка SSL == |
=== Установка Certbot === | === Установка Certbot === | ||
1. Установите Certbot: | 1. Установите Certbot: | ||
− | < | + | <pre>sudo apt install -y certbot python3-certbot-apache</pre> |
2. Получите SSL сертификат: | 2. Получите SSL сертификат: | ||
− | < | + | <pre>sudo certbot --apache -d example.com -d www.example.com</pre> |
3. Настройте автоматическое обновление: | 3. Настройте автоматическое обновление: | ||
− | < | + | <pre>sudo crontab -e</pre> |
4. Добавьте задачу: | 4. Добавьте задачу: | ||
− | < | + | <pre>0 12 * * * /usr/bin/certbot renew --quiet</pre> |
=== Проверка SSL === | === Проверка SSL === | ||
1. Проверьте SSL сертификат: | 1. Проверьте SSL сертификат: | ||
− | < | + | <pre>sudo certbot certificates</pre> |
2. Протестируйте SSL: | 2. Протестируйте SSL: | ||
− | < | + | <pre>curl -I https://example.com</pre> |
− | == 7. Настройка безопасности | + | == 7. Настройка безопасности == |
=== Настройка файрвола === | === Настройка файрвола === | ||
1. Настройте UFW: | 1. Настройте UFW: | ||
− | < | + | <pre>sudo ufw allow 22/tcp</pre> |
− | < | + | <pre>sudo ufw allow 80/tcp</pre> |
− | < | + | <pre>sudo ufw allow 443/tcp</pre> |
− | < | + | <pre>sudo ufw enable</pre> |
2. Проверьте статус: | 2. Проверьте статус: | ||
− | < | + | <pre>sudo ufw status</pre> |
=== Настройка fail2ban === | === Настройка fail2ban === | ||
1. Установите fail2ban: | 1. Установите fail2ban: | ||
− | < | + | <pre>sudo apt install -y fail2ban</pre> |
2. Создайте конфигурацию: | 2. Создайте конфигурацию: | ||
− | < | + | <pre>sudo nano /etc/fail2ban/jail.local</pre> |
3. Добавьте настройки: | 3. Добавьте настройки: | ||
− | < | + | <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 | ||
− | </ | + | </pre> |
4. Запустите fail2ban: | 4. Запустите fail2ban: | ||
− | < | + | <pre>sudo systemctl start fail2ban</pre> |
− | < | + | <pre>sudo systemctl enable fail2ban</pre> |
=== Настройка безопасности Apache === | === Настройка безопасности Apache === | ||
1. Создайте .htaccess файл: | 1. Создайте .htaccess файл: | ||
− | < | + | <pre>sudo nano /var/www/example.com/public_html/.htaccess</pre> |
2. Добавьте правила безопасности: | 2. Добавьте правила безопасности: | ||
− | < | + | <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] | ||
− | </ | + | </pre> |
− | == 8. Оптимизация производительности | + | == 8. Оптимизация производительности == |
=== Настройка кэширования === | === Настройка кэширования === | ||
1. Включите модули кэширования: | 1. Включите модули кэширования: | ||
− | < | + | <pre>sudo a2enmod expires</pre> |
− | < | + | <pre>sudo a2enmod headers</pre> |
− | < | + | <pre>sudo a2enmod deflate</pre> |
2. Создайте конфигурацию кэширования: | 2. Создайте конфигурацию кэширования: | ||
− | < | + | <pre>sudo nano /etc/apache2/conf-available/cache.conf</pre> |
3. Добавьте настройки: | 3. Добавьте настройки: | ||
− | < | + | <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> | ||
− | </ | + | </pre> |
4. Включите конфигурацию: | 4. Включите конфигурацию: | ||
− | < | + | <pre>sudo a2enconf cache</pre> |
5. Перезапустите Apache: | 5. Перезапустите Apache: | ||
− | < | + | <pre>sudo systemctl restart apache2</pre> |
=== Настройка PHP-FPM === | === Настройка PHP-FPM === | ||
1. Установите PHP-FPM: | 1. Установите PHP-FPM: | ||
− | < | + | <pre>sudo apt install -y php8.1-fpm</pre> |
2. Настройте Apache для использования PHP-FPM: | 2. Настройте Apache для использования PHP-FPM: | ||
− | < | + | <pre>sudo a2enmod proxy_fcgi setenvif</pre> |
− | < | + | <pre>sudo a2enconf php8.1-fpm</pre> |
3. Перезапустите сервисы: | 3. Перезапустите сервисы: | ||
− | < | + | <pre>sudo systemctl restart apache2</pre> |
− | < | + | <pre>sudo systemctl restart php8.1-fpm</pre> |
− | == 9. Мониторинг и логирование | + | == 9. Мониторинг и логирование == |
=== Настройка логирования === | === Настройка логирования === | ||
1. Настройте ротацию логов: | 1. Настройте ротацию логов: | ||
− | < | + | <pre>sudo nano /etc/logrotate.d/lamp</pre> |
2. Добавьте конфигурацию: | 2. Добавьте конфигурацию: | ||
− | < | + | <pre>/var/log/apache2/*.log { |
daily | daily | ||
missingok | missingok | ||
Строка 383: | Строка 383: | ||
endscript | endscript | ||
} | } | ||
− | </ | + | </pre> |
=== Создание скрипта мониторинга === | === Создание скрипта мониторинга === | ||
1. Создайте скрипт мониторинга: | 1. Создайте скрипт мониторинга: | ||
− | < | + | <pre>sudo nano /usr/local/bin/lamp-monitor.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <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 | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/lamp-monitor.sh</pre> |
4. Добавьте в crontab: | 4. Добавьте в crontab: | ||
− | < | + | <pre>sudo crontab -e</pre> |
5. Добавьте задачу: | 5. Добавьте задачу: | ||
− | < | + | <pre>*/5 * * * * /usr/local/bin/lamp-monitor.sh</pre> |
− | == 10. Резервное копирование | + | == 10. Резервное копирование == |
=== Создание скрипта резервного копирования === | === Создание скрипта резервного копирования === | ||
1. Создайте скрипт резервного копирования: | 1. Создайте скрипт резервного копирования: | ||
− | < | + | <pre>sudo nano /usr/local/bin/lamp-backup.sh</pre> |
2. Добавьте содержимое: | 2. Добавьте содержимое: | ||
− | < | + | <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" | ||
− | </ | + | </pre> |
3. Сделайте скрипт исполняемым: | 3. Сделайте скрипт исполняемым: | ||
− | < | + | <pre>sudo chmod +x /usr/local/bin/lamp-backup.sh</pre> |
4. Добавьте в crontab: | 4. Добавьте в crontab: | ||
− | < | + | <pre>sudo crontab -e</pre> |
5. Добавьте задачу: | 5. Добавьте задачу: | ||
− | < | + | <pre>0 3 * * * /usr/local/bin/lamp-backup.sh</pre> |
− | == 11. Установка популярных CMS | + | == 11. Установка популярных CMS == |
=== Установка WordPress === | === Установка WordPress === | ||
1. Скачайте WordPress: | 1. Скачайте WordPress: | ||
− | < | + | <pre>cd /tmp</pre> |
− | < | + | <pre>wget https://wordpress.org/latest.tar.gz</pre> |
− | < | + | <pre>tar -xzf latest.tar.gz</pre> |
2. Переместите файлы: | 2. Переместите файлы: | ||
− | < | + | <pre>sudo mv wordpress/* /var/www/example.com/public_html/</pre> |
− | < | + | <pre>sudo chown -R www-data:www-data /var/www/example.com/public_html</pre> |
3. Настройте WordPress: | 3. Настройте WordPress: | ||
− | < | + | <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. Отредактируйте конфигурацию: | ||
− | < | + | <pre>sudo nano /var/www/example.com/public_html/wp-config.php</pre> |
=== Установка Joomla === | === Установка Joomla === | ||
1. Скачайте Joomla: | 1. Скачайте Joomla: | ||
− | < | + | <pre>cd /tmp</pre> |
− | < | + | <pre>wget https://downloads.joomla.org/cms/joomla4/latest/Joomla_4.4.0-Stable-Full_Package.zip</pre> |
− | < | + | <pre>unzip Joomla_4.4.0-Stable-Full_Package.zip</pre> |
2. Переместите файлы: | 2. Переместите файлы: | ||
− | < | + | <pre>sudo mv Joomla_4.4.0-Stable-Full_Package/* /var/www/example.com/public_html/</pre> |
− | < | + | <pre>sudo chown -R www-data:www-data /var/www/example.com/public_html</pre> |
− | == 12. Устранение неполадок | + | == 12. Устранение неполадок == |
=== Частые проблемы === | === Частые проблемы === | ||
1. '''Apache не запускается''': | 1. '''Apache не запускается''': | ||
− | * Проверьте конфигурацию: < | + | * Проверьте конфигурацию: <pre>sudo apache2ctl configtest</pre> |
− | * Проверьте логи: < | + | * Проверьте логи: <pre>sudo journalctl -u apache2</pre> |
− | * Проверьте порты: < | + | * Проверьте порты: <pre>sudo netstat -tlnp | grep :80</pre> |
2. '''MySQL не подключается''': | 2. '''MySQL не подключается''': | ||
− | * Проверьте статус: < | + | * Проверьте статус: <pre>sudo systemctl status mysql</pre> |
− | * Проверьте логи: < | + | * Проверьте логи: <pre>sudo tail -f /var/log/mysql/error.log</pre> |
* Проверьте права пользователя | * Проверьте права пользователя | ||
3. '''PHP не работает''': | 3. '''PHP не работает''': | ||
− | * Проверьте модуль PHP: < | + | * Проверьте модуль PHP: <pre>sudo a2enmod php8.1</pre> |
* Проверьте конфигурацию PHP | * Проверьте конфигурацию PHP | ||
* Перезапустите Apache | * Перезапустите Apache | ||
Строка 520: | Строка 520: | ||
1. '''Проверка статуса сервисов''': | 1. '''Проверка статуса сервисов''': | ||
− | < | + | <pre>sudo systemctl status apache2</pre> |
− | < | + | <pre>sudo systemctl status mysql</pre> |
2. '''Проверка логов''': | 2. '''Проверка логов''': | ||
− | < | + | <pre>sudo tail -f /var/log/apache2/error.log</pre> |
− | < | + | <pre>sudo tail -f /var/log/mysql/error.log</pre> |
3. '''Проверка подключения к базе данных''': | 3. '''Проверка подключения к базе данных''': | ||
− | < | + | <pre>mysql -u myapp_user -p -e "SELECT 1;"</pre> |
4. '''Тестирование PHP''': | 4. '''Тестирование PHP''': | ||
− | < | + | <pre>php -r "echo 'PHP is working';"</pre> |
== Заключение == | == Заключение == |
Текущая версия на 10:33, 15 октября 2025
Содержание
- 1 Настройка LAMP стека (Linux, Apache, MySQL, PHP)
- 1.1 1. Подготовка системы
- 1.2 2. Установка Apache
- 1.3 3. Установка MySQL
- 1.4 4. Установка PHP
- 1.5 5. Настройка виртуальных хостов
- 1.6 6. Настройка SSL
- 1.7 7. Настройка безопасности
- 1.8 8. Оптимизация производительности
- 1.9 9. Мониторинг и логирование
- 1.10 10. Резервное копирование
- 1.11 11. Установка популярных CMS
- 1.12 12. Устранение неполадок
- 1.13 Заключение
Настройка 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):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для высоконагруженных LAMP приложений
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних проектов
Наши специалисты помогут с настройкой LAMP стека и оптимизацией производительности ваших веб-приложений!