Как установить WordPress на VPS: Nginx, PHP, MySQL
WordPress на VPS работает быстрее, чем на обычном хостинге: ресурсы сервера закреплены за вами, а настройки PHP, базы данных и кеша можно менять под свой сайт. Никто не ограничивает число сайтов, плагины и нагрузку.
В инструкции ставим WordPress на связку LEMP: Linux, Nginx, MySQL и PHP. На всё уходит 20–30 минут. В конце у вас будет сайт на HTTPS с настроенными лимитами загрузки, базовой защитой и кешированием статики.
Требования:
- VPS на Ubuntu 22.04, 24.04 или 26.04. Для небольшого сайта хватит 1 ГБ RAM, для интернет-магазина на WooCommerce берите от 2 ГБ.
- Пользователь с sudo и настроенный firewall. Если сервер новый, сначала пройдите базовую настройку VPS.
- Домен, A-записи которого (для
example.comиwww) указывают на IP сервера.
Во всех командах заменяйте example.com на свой домен.
Шаг 1. Установите Nginx, MySQL и PHP
Одна команда ставит веб-сервер, базу данных, PHP и модули, которые нужны WordPress:
sudo apt update
sudo apt install -y nginx mysql-server php-fpm php-mysql php-curl php-gd php-intl php-mbstring php-xml php-zip php-imagick
Откройте веб-порты в firewall:
sudo ufw allow 'Nginx Full'
Узнайте установленную версию PHP — она понадобится в конфиге Nginx:
ls /run/php/
В выводе будет файл вроде php8.3-fpm.sock. Число в названии зависит от версии Ubuntu: в 22.04 это 8.1, в 24.04 — 8.3. Дальше в статье используется 8.3, подставляйте свою версию.
Вместо MySQL можно поставить MariaDB (mariadb-server): WordPress работает с обеими, команды ниже одинаковые.
Шаг 2. Создайте базу данных
WordPress хранит записи, страницы и настройки в базе данных. Создадим для него отдельную базу и пользователя, у которого есть доступ только к ней.
Сначала сгенерируйте пароль и сохраните его:
openssl rand -base64 24
Войдите в консоль MySQL:
sudo mysql
Выполните команды по одной, подставив свой пароль:
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'ВАШ_ПАРОЛЬ';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Запомните три значения: имя базы wordpress, пользователь wpuser и пароль. Они понадобятся на шаге 6.
В Ubuntu база данных по умолчанию слушает только localhost и из интернета недоступна. Не открывайте порт 3306 в firewall.
Шаг 3. Скачайте WordPress
Скачайте последнюю версию с официального сайта и распакуйте в папку сайта:
cd /tmp
curl -LO https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
sudo mkdir -p /var/www/example.com
sudo cp -a /tmp/wordpress/. /var/www/example.com/
Нужна русская версия? Язык выбирается на первом экране установки в браузере, отдельный архив скачивать не нужно.
Передайте файлы пользователю www-data, от имени которого работают Nginx и PHP:
sudo chown -R www-data:www-data /var/www/example.com
Без этого WordPress не сможет загружать картинки, ставить плагины и обновляться и будет спрашивать данные FTP.
Шаг 4. Настройте Nginx
Создайте конфиг сайта:
sudo nano /etc/nginx/sites-available/example.com
Вставьте содержимое. Замените домен и версию PHP в строке fastcgi_pass:
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com;
index index.php;
client_max_body_size 64m;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~* \.(css|js|jpg|jpeg|png|gif|webp|svg|ico|woff2)$ {
expires 30d;
}
location = /xmlrpc.php {
deny all;
}
}
Что делают ключевые строки:
try_files ... /index.php?$args— отправляет все запросы в WordPress. Без неё красивые ссылки вроде/blog/my-post/отдают ошибку 404.fastcgi_pass— передаёт PHP-файлы на обработку в PHP-FPM.client_max_body_size 64m— разрешает загружать файлы до 64 МБ: темы, плагины, видео.expires 30d— браузер кеширует картинки, стили и скрипты на 30 дней, повторные визиты загружаются быстрее.location = /xmlrpc.php— закрывает устаревший интерфейс, через который боты подбирают пароли. Уберите этот блок, только если пользуетесь мобильным приложением WordPress или плагином Jetpack.
Включите сайт, проверьте конфиг и примените изменения:
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Шаг 5. Включите HTTPS
Получите бесплатный сертификат Let's Encrypt до установки WordPress: тогда сайт сразу запомнит адрес с https://, и его не придётся менять в настройках.
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
Certbot сам допишет в конфиг настройки SSL, включит перенаправление на HTTPS и автопродление. Подробности и проверка автопродления — в статье как установить SSL-сертификат Let's Encrypt на Nginx.
Шаг 6. Завершите установку в браузере
Откройте https://example.com. Появится мастер установки WordPress:
- Выберите язык сайта и админки.
- Введите данные базы из шага 2: имя базы
wordpress, пользовательwpuser, ваш пароль, серверlocalhost. Префикс таблиц замените со стандартногоwp_на свой, напримерs7k_: это мешает типовым автоматическим атакам. - Создайте администратора. Не называйте его
admin: этот логин боты пробуют первым. Используйте пароль, который предложил WordPress, и сохраните его в менеджере паролей. - Войдите в админку по адресу
https://example.com/wp-admin/.
После входа откройте Настройки → Постоянные ссылки и выберите «Название записи». Ссылки вида /nazvanie-stati/ лучше для SEO, чем /?p=123.
Шаг 7. Настройте лимиты PHP и планировщик
Лимиты PHP. По умолчанию PHP принимает файлы до 2 МБ — этого не хватит даже на фотографию с телефона. Создайте файл с настройками (подставьте свою версию PHP):
printf '%s\n' 'upload_max_filesize = 64M' 'post_max_size = 64M' 'memory_limit = 256M' 'max_execution_time = 300' | sudo tee /etc/php/8.3/fpm/conf.d/99-wordpress.ini
sudo systemctl restart php8.3-fpm
Проверьте в админке: Медиафайлы → Добавить должно показывать максимальный размер 64 МБ.
Планировщик задач. WordPress выполняет фоновые задачи (отложенные публикации, проверку обновлений, рассылки) только в момент, когда кто-то открывает сайт. На сайте с малой посещаемостью задачи опаздывают, на нагруженном — замедляют страницы. Надёжнее запускать их системным cron.
Откройте файл настроек WordPress:
sudo nano /var/www/example.com/wp-config.php
Добавьте строку выше комментария /* That's all, stop editing! */:
define('DISABLE_WP_CRON', true);
Откройте cron пользователя www-data:
sudo crontab -u www-data -e
Добавьте запуск каждые 5 минут:
*/5 * * * * php /var/www/example.com/wp-cron.php > /dev/null 2>&1
Как защитить WordPress
WordPress — самая популярная CMS, поэтому её атакуют чаще всего. Почти все взломы происходят через устаревшие плагины и слабые пароли.
- Обновляйте всё. Включите автообновление плагинов и тем в админке. Удалите плагины и темы, которыми не пользуетесь: отключённый плагин тоже можно взломать.
- Ставьте плагины только из официального каталога. «Бесплатные» копии платных тем и плагинов с пиратских сайтов почти всегда содержат вредоносный код.
- Включите двухфакторную аутентификацию для администраторов с помощью плагина.
- Запретите редактор файлов в админке. Если злоумышленник попадёт в админку, он не сможет вписать свой код в тему. Добавьте в
wp-config.phpстроку:define('DISALLOW_FILE_EDIT', true); - Ограничьте подбор паролей. Поставьте плагин для ограничения попыток входа или подключите Cloudflare с правилом для
/wp-login.php. Как это сделать — в статье как защитить VPS от DDoS-атак. - Делайте бэкапы. Нужны две вещи: база данных и папка
wp-contentс картинками, темами и плагинами. Храните копии вне сервера.
Дамп базы одной командой:
sudo mysqldump wordpress | gzip > ~/wordpress-$(date +%F).sql.gz
Архив файлов сайта:
sudo tar -czf ~/wp-content-$(date +%F).tar.gz -C /var/www/example.com wp-content
Как ускорить WordPress
- Поставьте плагин кеширования страниц. Это даёт самый большой эффект: готовая страница отдаётся без запуска PHP и запросов к базе.
- Проверьте OPcache. Он кеширует скомпилированный PHP-код и обычно уже включён. Проверка:
php -m | grep -i opcache. - Подключите объектный кеш Redis для магазинов и сайтов с большим числом запросов к базе:
sudo apt install -y redis-server php-redis, затем плагин Redis Object Cache. - Сжимайте картинки. Изображения — самая тяжёлая часть страницы. Загружайте их в WebP и не шире, чем нужно дизайну.
- Следите за числом плагинов. Каждый плагин добавляет код, который выполняется на каждой странице.
Частые ошибки
- 502 Bad Gateway. Nginx не может подключиться к PHP. Чаще всего в
fastcgi_passуказана не та версия PHP. Сверьте с выводомls /run/php/и проверьте службу:sudo systemctl status php8.3-fpm. - «Error establishing a database connection». Неверное имя базы, пользователь или пароль в
wp-config.php, либо MySQL не запущен:sudo systemctl status mysql. На серверах с 1 ГБ RAM базу может убивать система из-за нехватки памяти — добавьте swap. - Страницы записей отдают 404, главная работает. В конфиге Nginx нет строки
try_files $uri $uri/ /index.php?$args;. - 413 Request Entity Too Large при загрузке файла. Увеличьте
client_max_body_sizeв Nginx и лимиты PHP из шага 7. - WordPress просит данные FTP при установке плагина. Файлы сайта принадлежат не тому пользователю. Повторите
sudo chown -R www-data:www-data /var/www/example.com. - Белый экран. Ошибка в PHP, обычно из-за плагина или нехватки памяти. Причина будет в логе:
sudo tail -n 50 /var/log/nginx/error.log. - Сайт открывается без стилей или браузер пишет о смешанном содержимом. WordPress установили по HTTP, а потом включили HTTPS. Исправьте оба адреса в Настройки → Общие на
https://.
Чек-лист
Частые вопросы
Какой VPS нужен для WordPress? Блогу или сайту компании хватит 1 vCPU и 1 ГБ RAM. Для WooCommerce или сайта с тысячами посетителей в день берите 2 vCPU и 2–4 ГБ RAM.
Нужна ли панель управления? Нет. Всё из этой статьи делается в консоли, а сайтом вы управляете из админки WordPress. Панель удобна, если сайтов много и не хочется работать с конфигами вручную.
Можно ли разместить несколько сайтов на одном VPS? Да. Для каждого сайта повторите шаги 2–6: своя база, своя папка в /var/www и свой конфиг Nginx.
Nginx или Apache для WordPress? Оба подходят. Nginx тратит меньше памяти и быстрее отдаёт статику, поэтому лучше для небольших VPS. Apache понимает файлы .htaccess, которые используют некоторые плагины; в Nginx такие правила пишутся в конфиге.
Как перенести сайт с обычного хостинга? Подготовьте сервер по шагам 1–5, затем перенесите папку wp-content и дамп базы или воспользуйтесь плагином миграции. Домен переключайте на новый IP в последнюю очередь, когда проверили сайт на новом сервере.