Собственный VPS даёт полный контроль над WordPress: выбор PHP-версии, Redis-кэш, HTTP/2, без ограничений на плагины и ресурсы.
Шаг 1: LEMP-стек (Nginx + MySQL + PHP)
sudo apt update
sudo apt install -y nginx mysql-server php8.2-fpm php8.2-mysql php8.2-xml php8.2-mbstring php8.2-curl php8.2-gd php8.2-zip php8.2-imagick php8.2-redis
Шаг 2: База данных
sudo mysql -u root -p
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'СложныйПароль';
GRANT ALL ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
Шаг 3: Скачать WordPress
cd /var/www
sudo wget https://wordpress.org/latest.tar.gz
sudo tar xzf latest.tar.gz
sudo mv wordpress yourdomain.com
sudo chown -R www-data:www-data yourdomain.com
Шаг 4: Конфиг Nginx
sudo nano /etc/nginx/sites-available/yourdomain.com
server {
listen 80;
server_name yourdomain.com www.yourdomain.com;
root /var/www/yourdomain.com;
index index.php;
location / { try_files $uri $uri/ /index.php?$args; }
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
sudo ln -s /etc/nginx/sites-available/yourdomain.com /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Шаг 5: SSL Let's Encrypt
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com
Частые ошибки при установке WordPress на VPS
Error establishing a database connection
502 Bad Gateway
connect() to unix:/run/php/php8.2-fpm.sock failed (13: Permission denied)
The uploaded file exceeds the upload_max_filesize directive
| Сообщение | Причина | Решение |
|---|---|---|
| Error establishing a database connection | Неверные данные в wp-config.php или MySQL не запущен | Проверить systemctl status mysql и сверить DB_USER/DB_PASSWORD с тем, что создавали в шаге 2 |
| 502 Bad Gateway | Nginx не может достучаться до PHP-FPM — сокет не совпадает или демон не запущен | Проверить systemctl status php8.2-fpm и путь к сокету в fastcgi_pass |
| connect() to unix:/run/php/php8.2-fpm.sock failed (13: Permission denied) | Nginx работает от пользователя www-data, а сокет PHP-FPM создан с другими правами | В пуле PHP-FPM выставить listen.owner = www-data и listen.group = www-data |
| The uploaded file exceeds the upload_max_filesize directive | Лимит загрузки в php.ini меньше размера файла темы, плагина или медиа | Поднять upload_max_filesize и post_max_size в конфиге PHP-FPM, перезапустить сервис |
Готовый хостинг против собственного VPS
| Параметр | VPS с ручной установкой | Готовый хостинг WordPress |
|---|---|---|
| Выбор версии PHP | Любая, ставится вручную | Ограничен тем, что доступно на тарифе |
| Настройка Redis и кэша | Полный контроль, свои параметры | Часто уже встроено, но без тонкой настройки |
| Время до первого запуска сайта | 30–60 минут по этой инструкции | 5–10 минут через автоустановщик |
| Ответственность за обновления ОС и PHP | Полностью на администраторе | Берёт на себя хостинг-провайдер |
Если ручная настройка избыточна для задачи, установка через панель хостинга описана в статье WordPress в cPanel.
Когда ставить WordPress на голый VPS не стоит
- Нет опыта администрирования Linux и нет времени его получать — при поломке php-fpm или Nginx сайт упадёт полностью, и восстановить его без панели сложнее
- Сайт простой (визитка, блог) без нагрузки — переплата за администрирование VPS не окупится, обычный shared-хостинг справится не хуже
- Нужны автоматические обновления системы безопасности без ручного вмешательства — на VPS обновления PHP и ядра нужно отслеживать самостоятельно
- Команда привыкла к интерфейсу cPanel или ISPmanager для повседневных задач (почта, бэкапы, домены) — на голом VPS всё это придётся делать через консоль
Проверка результата установки
# Nginx и PHP-FPM подняты и активны
systemctl is-active nginx php8.2-fpm mysql
# Конфигурация Nginx синтаксически верна
sudo nginx -t
# Сайт отвечает кодом 200, а не 502/500
curl -o /dev/null -s -w '%{http_code}\n' http://yourdomain.com/
- Откройте
http://yourdomain.com— должен появиться мастер установки WordPress на пять шагов, а не ошибка PHP - Пройдите мастер, укажите название сайта и данные администратора, затем зайдите в
/wp-admin/ - Проверьте, что SSL действительно работает:
curl -I https://yourdomain.com/должен вернуть 200, а не ошибку сертификата - Убедитесь, что фоновые задачи WordPress (wp-cron) выполняются — опубликуйте отложенный пост и проверьте, что он вышел вовремя
После установки настройте регулярные бэкапы — они не создаются автоматически на голом VPS в отличие от хостинг-панелей, см. статью бэкап WordPress. Защиту от брутфорса и базовые правила безопасности разбирает материал безопасность WordPress.
Частые вопросы
Стоит ли переносить уже существующий сайт WordPress на VPS тем же способом, что описан в статье?
Инструкция описывает установку с нуля, а перенос готового сайта — отдельная задача: требуется скопировать файлы темы, плагинов и медиа, выгрузить и импортировать базу данных, затем обновить адрес сайта в настройках. Подготовленный здесь LEMP-стек и сертификат пригодятся как основа, но саму процедуру переноса контента статья не разбирает, для неё нужны дополнительные шаги.
Запустятся ли Nginx, MySQL и PHP-FPM автоматически после перезагрузки сервера?
Пакетные менеджеры обычно включают автозапуск этих служб прямо при установке, поэтому после перезагрузки сайт в большинстве случаев продолжает работать без ручных действий администратора. После первой перезагрузки стоит один раз проверить статус каждой службы и при необходимости включить автозапуск отдельно — иначе после сбоя питания сайт останется недоступным до вмешательства человека.
Нужно ли сразу менять данные администратора, заданные в мастере установки WordPress?
Да, логин и пароль администратора лучше задать надёжными и непохожими на стандартные вроде admin, поскольку страница входа в панель чаще всего становится целью автоматического подбора паролей ботами. Дополнительно стоит ограничить доступ к странице входа и подключить защиту от перебора, а не дожидаться первой подозрительной активности в журналах сервера.
Как добавить на тот же VPS второй сайт — нужен ли отдельный пользователь MySQL и своя конфигурация Nginx?
Да, для каждого нового сайта стоит создать отдельную базу данных и отдельного пользователя MySQL с правами только на неё, а также свой серверный блок конфигурации Nginx со своими путями и сертификатом. Один и тот же PHP-FPM можно оставить общим пулом для лёгких сайтов или разделить на отдельные пулы, если сайты заметно различаются по нагрузке на процессор.