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