Home » Установка WordPress на Ubuntu 24 с LAMP стеком
Установка WordPress на Ubuntu 24 с LAMP стеком

Установка WordPress на Ubuntu 24 с LAMP стеком

Рано или поздно каждый админ сталкивается с задачей развернуть WordPress на собственном сервере. Да, можно использовать готовые решения хостинг-провайдеров, но где в этом кайф? Настоящий контроль начинается тогда, когда у тебя есть root-доступ и полная свобода настройки стека. В этой статье разберём, как поднять WordPress на Ubuntu 24 с классическим LAMP-стеком (Linux, Apache, MySQL, PHP) — проверенное временем решение, которое работает стабильно и предсказуемо.

Мы пошагово пройдём весь процесс: от чистой установки Ubuntu до запущенного WordPress-сайта. Рассмотрим не только базовую настройку, но и нюансы безопасности, оптимизации производительности и автоматизации развёртывания. Плюс разберём частые грабли, на которые наступают новички, и способы их избежать.

Почему LAMP и почему Ubuntu 24?

LAMP-стек — это как джинсы в мире веб-разработки: классика, которая никогда не выходит из моды. Apache по-прежнему держит около 25% рынка веб-серверов, MySQL остаётся одной из самых популярных СУБД, а PHP… ну, на нём написано огромное количество сайтов, и WordPress — яркий тому пример.

Ubuntu 24.04 LTS — отличный выбор для продакшена благодаря долгосрочной поддержке до 2034 года. В этой версии:

  • PHP 8.3 из коробки с улучшенной производительностью
  • MySQL 8.0 с поддержкой JSON и улучшенной безопасностью
  • Apache 2.4 с HTTP/2 и современными модулями
  • Обновлённые пакеты безопасности

Подготовка сервера

Для начала нужен VPS или выделенный сервер. Если у вас ещё нет сервера, можете заказать VPS для небольших проектов или выделенный сервер для более серьёзных задач.

Минимальные требования:

  • 1 GB RAM (рекомендуется 2 GB)
  • 20 GB свободного места
  • Ubuntu 24.04 LTS

Первым делом обновляем систему:

sudo apt update && sudo apt upgrade -y
sudo reboot

Установка Apache

Apache — наш веб-сервер. Устанавливаем и сразу включаем:

sudo apt install apache2 -y
sudo systemctl enable apache2
sudo systemctl start apache2

Проверяем статус:

sudo systemctl status apache2

Настраиваем файрвол для HTTP и HTTPS:

sudo ufw allow 'Apache Full'
sudo ufw enable

Теперь при переходе на IP-адрес вашего сервера должна отобразиться стандартная страница Apache “It works!”.

Установка MySQL

Устанавливаем MySQL Server:

sudo apt install mysql-server -y
sudo systemctl enable mysql
sudo systemctl start mysql

Обязательно запускаем скрипт безопасной настройки:

sudo mysql_secure_installation

Отвечаем на вопросы скрипта:

  • VALIDATE PASSWORD PLUGIN: Y (да)
  • Password validation policy: 2 (сильные пароли)
  • Remove anonymous users: Y
  • Disallow root login remotely: Y
  • Remove test database: Y
  • Reload privilege tables: Y

Создаём базу данных и пользователя для WordPress:

sudo mysql -u root -p
CREATE DATABASE wordpress_db;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'strong_password_here';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Установка PHP

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

sudo apt install php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-zip php-intl php-bcmath -y

Проверяем версию PHP:

php -v

Создаём тестовый файл для проверки:

sudo nano /var/www/html/info.php

Вставляем содержимое:

<?php
phpinfo();
?>

Переходим на `http://ваш_ip/info.php` — должна отобразиться страница с информацией о PHP. После проверки удаляем файл:

sudo rm /var/www/html/info.php

Скачивание и установка WordPress

Скачиваем последнюю версию WordPress:

cd /tmp
wget https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz

Копируем файлы WordPress в веб-директорию:

sudo cp -R wordpress/* /var/www/html/
sudo chown -R www-data:www-data /var/www/html/
sudo chmod -R 755 /var/www/html/

Создаём конфигурационный файл WordPress:

sudo cp /var/www/html/wp-config-sample.php /var/www/html/wp-config.php
sudo nano /var/www/html/wp-config.php

Обновляем настройки базы данных:

define('DB_NAME', 'wordpress_db');
define('DB_USER', 'wp_user');
define('DB_PASSWORD', 'strong_password_here');
define('DB_HOST', 'localhost');

Генерируем соли безопасности на https://api.wordpress.org/secret-key/1.1/salt/ и заменяем соответствующие строки в конфиге.

Настройка виртуального хоста Apache

Создаём конфигурацию виртуального хоста:

sudo nano /etc/apache2/sites-available/wordpress.conf

Вставляем конфигурацию:

<VirtualHost *:80>
    ServerName yourdomain.com
    ServerAlias www.yourdomain.com
    DocumentRoot /var/www/html
    
    ErrorLog ${APACHE_LOG_DIR}/wordpress_error.log
    CustomLog ${APACHE_LOG_DIR}/wordpress_access.log combined
    
    <Directory /var/www/html>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>

Активируем сайт и модуль rewrite:

sudo a2ensite wordpress.conf
sudo a2enmod rewrite
sudo systemctl reload apache2

Оптимизация и безопасность

Настройка PHP

Редактируем конфигурацию PHP для лучшей производительности:

sudo nano /etc/php/8.3/apache2/php.ini

Ключевые параметры:

memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
max_input_vars = 3000

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

Скрываем версию Apache:

sudo nano /etc/apache2/conf-enabled/security.conf

Изменяем:

ServerTokens Prod
ServerSignature Off

Создаём .htaccess для дополнительной защиты:

sudo nano /var/www/html/.htaccess

Добавляем базовые правила безопасности:

# Блокируем доступ к конфигурационным файлам
<files wp-config.php>
order allow,deny
deny from all
</files>

# Защищаем от инъекций
<IfModule mod_rewrite.c>
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} ^.*(\[|\]|\(|\)|<|>).* [NC,OR]
RewriteCond %{QUERY_STRING} (NULL|OUTFILE|LOAD_FILE) [OR]
RewriteCond %{QUERY_STRING} (\./|\../|\.../) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*('+|+' [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(\;|\|) [NC,OR]
RewriteCond %{QUERY_STRING} ^.*(%0A|%0D) [NC]
RewriteRule ^(.*)$ - [F,L]
</IfModule>

Автоматизация развёртывания

Создаём скрипт для автоматической установки:

sudo nano /usr/local/bin/wordpress-installer.sh

Содержимое скрипта:

#!/bin/bash

# Переменные
DB_NAME="wordpress_db"
DB_USER="wp_user"
DB_PASS="$(openssl rand -base64 32)"
WP_DIR="/var/www/html"

# Обновляем систему
apt update && apt upgrade -y

# Устанавливаем LAMP
apt install apache2 mysql-server php libapache2-mod-php php-mysql php-curl php-gd php-mbstring php-xml php-zip php-intl php-bcmath -y

# Настраиваем MySQL
mysql -e "CREATE DATABASE $DB_NAME;"
mysql -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
mysql -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';"
mysql -e "FLUSH PRIVILEGES;"

# Скачиваем и устанавливаем WordPress
cd /tmp
wget https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
cp -R wordpress/* $WP_DIR/
chown -R www-data:www-data $WP_DIR/
chmod -R 755 $WP_DIR/

# Создаём wp-config.php
cp $WP_DIR/wp-config-sample.php $WP_DIR/wp-config.php
sed -i "s/database_name_here/$DB_NAME/" $WP_DIR/wp-config.php
sed -i "s/username_here/$DB_USER/" $WP_DIR/wp-config.php
sed -i "s/password_here/$DB_PASS/" $WP_DIR/wp-config.php

# Включаем mod_rewrite
a2enmod rewrite
systemctl reload apache2

echo "WordPress установлен!"
echo "База данных: $DB_NAME"
echo "Пользователь: $DB_USER"
echo "Пароль: $DB_PASS"

Делаем скрипт исполняемым:

sudo chmod +x /usr/local/bin/wordpress-installer.sh

Сравнение с альтернативными решениями

Стек Производительность Простота настройки Потребление ресурсов Совместимость с WordPress
LAMP (Apache + MySQL + PHP) Хорошая Средняя Среднее Отличная
LEMP (Nginx + MySQL + PHP) Отличная Сложная Низкое Хорошая
Docker контейнеры Хорошая Простая Среднее Отличная
Панели управления (cPanel, Plesk) Средняя Очень простая Высокое Отличная

Мониторинг и обслуживание

Настраиваем базовый мониторинг системы:

sudo apt install htop iotop netstat-nat -y

Создаём скрипт для мониторинга производительности:

sudo nano /usr/local/bin/server-stats.sh
#!/bin/bash

echo "=== Использование CPU ==="
top -bn1 | grep "Cpu(s)" | awk '{print $2}' | cut -d'%' -f1

echo "=== Использование памяти ==="
free -h

echo "=== Использование диска ==="
df -h

echo "=== Активные соединения Apache ==="
netstat -an | grep :80 | wc -l

echo "=== Процессы MySQL ==="
mysqladmin -u root -p processlist

echo "=== Лог ошибок Apache (последние 10 строк) ==="
tail -n 10 /var/log/apache2/error.log

Настраиваем автоматическое обновление WordPress через WP-CLI:

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

Создаём cron-задачу для автоматических обновлений:

sudo crontab -e

Добавляем строку:

0 2 * * 1 /usr/local/bin/wp core update --path=/var/www/html --allow-root

Частые проблемы и их решения

Проблема: “Error establishing a database connection”

Решение:

  • Проверьте настройки в wp-config.php
  • Убедитесь, что MySQL работает: `sudo systemctl status mysql`
  • Проверьте права пользователя базы данных

Проблема: Файлы не загружаются

Решение:

  • Проверьте права доступа: `sudo chown -R www-data:www-data /var/www/html/`
  • Увеличьте лимиты в php.ini
  • Проверьте свободное место на диске

Проблема: Медленная работа сайта

Решение:

  • Включите кэширование (например, установите W3 Total Cache)
  • Оптимизируйте изображения
  • Увеличьте memory_limit в PHP
  • Настройте MySQL для SSD-дисков

Продвинутые настройки

Настройка SSL/TLS с Let’s Encrypt

Устанавливаем Certbot:

sudo apt install certbot python3-certbot-apache -y

Получаем SSL-сертификат:

sudo certbot --apache -d yourdomain.com -d www.yourdomain.com

Настраиваем автоматическое обновление:

sudo crontab -e
# Добавляем строку:
0 12 * * * /usr/bin/certbot renew --quiet

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

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

sudo a2enmod expires
sudo a2enmod headers
sudo systemctl reload apache2

Добавляем правила кэширования в .htaccess:

# Кэширование браузера
<IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpg "access plus 1 month"
    ExpiresByType image/jpeg "access plus 1 month"
    ExpiresByType image/gif "access plus 1 month"
    ExpiresByType image/png "access plus 1 month"
    ExpiresByType text/css "access plus 1 month"
    ExpiresByType application/pdf "access plus 1 month"
    ExpiresByType text/javascript "access plus 1 month"
    ExpiresByType application/javascript "access plus 1 month"
    ExpiresByType text/html "access plus 600 seconds"
</IfModule>

Интеграция с системами мониторинга

Настраиваем интеграцию с популярными системами мониторинга:

# Для Zabbix
sudo apt install zabbix-agent -y

# Для Nagios
sudo apt install nagios-nrpe-server -y

# Для Prometheus
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar xzf node_exporter-1.6.1.linux-amd64.tar.gz
sudo mv node_exporter-1.6.1.linux-amd64/node_exporter /usr/local/bin/

Интересные факты и нестандартные применения

Знаете ли вы, что WordPress используется не только для блогов? Вот несколько интересных применений:

  • Headless CMS: WordPress как бэкенд для мобильных приложений через REST API
  • Мультисайт-сеть: Один WordPress может управлять сотнями сайтов
  • E-commerce платформа: С WooCommerce превращается в полноценный интернет-магазин
  • Learning Management System: С плагинами типа LearnDash становится системой дистанционного обучения

Статистика использования WordPress:

  • 43% всех сайтов в интернете работают на WordPress
  • 60% сайтов с CMS используют WordPress
  • WordPress переведён на 169 языков
  • Каждый день создаётся около 500 новых сайтов на WordPress

Автоматизация backup’ов

Создаём скрипт для автоматического резервного копирования:

sudo nano /usr/local/bin/wp-backup.sh
#!/bin/bash

# Переменные
BACKUP_DIR="/var/backups/wordpress"
WP_DIR="/var/www/html"
DB_NAME="wordpress_db"
DB_USER="wp_user"
DB_PASS="your_password"
DATE=$(date +%Y-%m-%d_%H-%M-%S)

# Создаём директорию для бэкапов
mkdir -p $BACKUP_DIR

# Бэкап файлов
tar -czf $BACKUP_DIR/wp-files-$DATE.tar.gz $WP_DIR

# Бэкап базы данных
mysqldump -u $DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/wp-database-$DATE.sql

# Удаляем старые бэкапы (старше 7 дней)
find $BACKUP_DIR -type f -mtime +7 -delete

echo "Backup completed: $DATE"

Добавляем в cron для ежедневного выполнения:

sudo crontab -e
# Добавляем:
0 3 * * * /usr/local/bin/wp-backup.sh

Возможности автоматизации

С настроенным LAMP-стеком и WordPress открываются широкие возможности для автоматизации:

  • CI/CD пайплайны: Автоматическое развёртывание через Git hooks
  • Масштабирование: Ansible-плейбуки для развёртывания на множестве серверов
  • Мониторинг: Интеграция с Grafana для визуализации метрик
  • Безопасность: Автоматическое обновление и сканирование уязвимостей
  • Оптимизация: Скрипты для автоматической оптимизации изображений и базы данных

Заключение и рекомендации

Установка WordPress на Ubuntu 24 с LAMP-стеком — это классический и надёжный подход, который подойдёт для большинства проектов. Главные преимущества такого решения:

  • Полный контроль над всем стеком
  • Отличная совместимость с WordPress и плагинами
  • Огромное комьюнити и документация
  • Простота в обслуживании и отладке
  • Возможность тонкой настройки под конкретные задачи

Когда использовать:

  • Корпоративные сайты с высокими требованиями к безопасности
  • Проекты, требующие кастомизации на уровне сервера
  • Мультисайт-сети
  • Сайты с интенсивным использованием плагинов

Когда лучше выбрать альтернативы:

  • Высоконагруженные проекты — рассмотрите LEMP (Nginx)
  • Микросервисная архитектура — используйте Docker
  • Простые блоги — managed WordPress-хостинг
  • Статичные сайты — генераторы типа Jekyll или Hugo

Помните: правильно настроенный LAMP-стек способен выдерживать серьёзные нагрузки. Ключевые моменты для успеха — регулярное обновление, мониторинг производительности и бэкапы. Не забывайте про безопасность: используйте SSL, настройте файрвол и регулярно обновляйте все компоненты.

Этот стек проверен временем и миллионами сайтов — он просто работает. А с правильной настройкой автоматизации вы получите надёжную платформу, которая будет служить вам долгие годы.


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked