Установка WordPress на VPS: с Nginx, PHP 8.3 и MariaDB
Установите WordPress вручную на VPS с Ubuntu 24.04: установка Nginx, PHP 8.3-FPM и MariaDB, создание базы данных, настройка wp-config, серверный блок Nginx, бесплатный SSL и базовые меры безопасности.
WordPress на собственном VPS даёт полный контроль: версию PHP, настройки кеша и конфигурацию сервера определяете вы. Взамен обновления, безопасность и резервное копирование тоже становятся вашей заботой. В этом руководстве мы установим на Ubuntu 24.04 стек LEMP (Linux, Nginx, MariaDB, PHP) и опубликуем WordPress.
Перед началом направьте A-запись DNS вашего домена на IP-адрес VPS — она понадобится на шаге с SSL. В примерах используется ornek.com; замените его своим доменом.
1. Установите Nginx, PHP 8.3 и MariaDB
Подключитесь по SSH и обновите пакеты. Версия PHP по умолчанию в репозиториях Ubuntu 24.04 — 8.3:
sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx mariadb-server php8.3-fpm php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip php8.3-intl
Для обработки изображений можно дополнительно установить рекомендуемое WordPress расширение Imagick:
sudo apt install -y php8.3-imagick
Проверьте, что службы работают:
systemctl status nginx php8.3-fpm mariadb --no-pager
2. Защитите MariaDB
sudo mariadb-secure-installation
В Ubuntu пользователь root в MariaDB по умолчанию аутентифицируется через unix_socket, то есть войти может только root сервера командой sudo mariadb. Поэтому на вопросы «Switch to unix_socket authentication» и «Change the root password» можно ответить n. На вопросы об удалении анонимных пользователей, запрете удалённого входа root, удалении тестовой базы и перезагрузке таблиц привилегий отвечайте Y.
3. Создайте базу данных и пользователя
Создайте для WordPress отдельную базу и пользователя с правами только на неё:
sudo mariadb
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'GucluBirSifre123!';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Обязательно замените пароль на свой — длинный и случайный. Сгенерировать случайный пароль можно командой openssl rand -base64 24.
4. Скачайте WordPress и настройте права
Скачайте последнюю версию прямо с wordpress.org:
cd /tmp
curl -LO https://wordpress.org/latest.tar.gz
tar xzf latest.tar.gz
sudo mv wordpress /var/www/ornek.com
sudo chown -R www-data:www-data /var/www/ornek.com
sudo find /var/www/ornek.com -type d -exec chmod 755 {} \;
sudo find /var/www/ornek.com -type f -exec chmod 644 {} \;
Когда владелец файлов — www-data, WordPress может устанавливать плагины и темы из панели и сам выполнять обновления. Права 755 для папок и 644 для файлов рекомендует сам WordPress; никогда не ставьте файлам права 777.
5. Подготовьте файл wp-config.php
cd /var/www/ornek.com
sudo cp wp-config-sample.php wp-config.php
sudo nano wp-config.php
Заполните строки базы данных данными, созданными на шаге 3:
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', 'GucluBirSifre123!' );
define( 'DB_HOST', 'localhost' );
В том же файле замените блок из восьми ключей безопасности (AUTH_KEY, SECURE_AUTH_KEY и т. д.) уникальными значениями. Новые значения можно получить в официальном сервисе WordPress:
curl -s https://api.wordpress.org/secret-key/1.1/salt/
Скопируйте вывод и вставьте его вместо строк с текстом put your unique phrase here. Затем над строкой /* That's all, stop editing! */ добавьте следующее — это отключит редактор файлов тем и плагинов в панели управления:
define( 'DISALLOW_FILE_EDIT', true );
Исправьте владельца и права файла:
sudo chown www-data:www-data wp-config.php
sudo chmod 640 wp-config.php
6. Увеличьте лимиты загрузки PHP
По умолчанию PHP разрешает загружать файлы размером до 2 МБ — проблемы начнутся при первой же загрузке темы или большого изображения. Вместо правки основного php.ini удобнее создать отдельный файл настроек: так изменения проще сохранить при обновлениях:
sudo nano /etc/php/8.3/fpm/conf.d/99-wordpress.ini
upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 256M
max_execution_time = 120
sudo systemctl restart php8.3-fpm
7. Напишите серверный блок Nginx
sudo nano /etc/nginx/sites-available/ornek.com
server {
listen 80;
server_name ornek.com www.ornek.com;
root /var/www/ornek.com;
index index.php index.html;
client_max_body_size 64M;
location / {
try_files $uri $uri/ /index.php?$args;
}
location = /xmlrpc.php {
deny all;
}
location ~* /wp-content/uploads/.*\.php$ {
deny all;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~ /\.(?!well-known) {
deny all;
}
location ~* \.(css|js|jpg|jpeg|png|gif|webp|svg|ico|woff2?)$ {
expires 30d;
access_log off;
}
}
Важные моменты:
try_files $uri $uri/ /index.php?$args: если реального файла нет, запрос передаётся WordPress. От этой строки зависит работа постоянных ссылок (вроде/blog/yazi-adi).fastcgi_pass: передаёт PHP-запросы на сокет PHP 8.3-FPM. Имя сокета должно совпадать с версией PHP.- Запрет PHP в папке uploads: даже если из-за уязвимости в папку загрузок попадёт PHP-файл, выполнить его не получится. Nginx проверяет блоки с регулярными выражениями сверху вниз, поэтому этот блок должен стоять перед общим блоком
\.php$. xmlrpc.php: часто используется при атаках перебором паролей. Если вы пользуетесь инструментом, которому нужен XML-RPC, например Jetpack или мобильным приложением WordPress, удалите этот блок.
Включите сайт:
sudo ln -s /etc/nginx/sites-available/ornek.com /etc/nginx/sites-enabled/
sudo rm -f /etc/nginx/sites-enabled/default
sudo nginx -t
sudo systemctl reload nginx
8. Файрвол и SSL
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
Получите бесплатный SSL-сертификат Let's Encrypt:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d ornek.com -d www.ornek.com
SSL лучше настроить до запуска мастера установки WordPress: тогда WordPress с самого начала сохранит адрес сайта как https://, и менять его потом не придётся.
9. Пройдите мастер установки
Откройте в браузере https://ornek.com. Пройдите шаги выбора языка, названия сайта, имени администратора, пароля и электронной почты. Не выбирайте для администратора предсказуемое имя вроде admin и используйте надёжный пароль.
Базовая безопасность и обслуживание
- Обновления: поддерживайте ядро WordPress, темы и плагины в актуальном состоянии. Неиспользуемые плагины и темы не просто отключайте, а удаляйте.
- Обновления сервера: регулярно обновляйте пакеты Ubuntu. Про SSH-ключи, запрет входа под root и Fail2ban читайте в нашем руководстве по безопасности Linux-сервера.
- Попытки входа: подумайте о плагине, ограничивающем перебор паролей на странице входа, и о двухфакторной аутентификации.
- Резервные копии: регулярно копируйте базу данных и папку
wp-contentи храните копии за пределами сервера:
sudo mariadb-dump wordpress | gzip > ~/wordpress-db-$(date +%F).sql.gz
sudo tar czf ~/wordpress-dosyalar-$(date +%F).tar.gz -C /var/www/ornek.com wp-content wp-config.php
Если вы не хотите администрировать сервер
Управлять своим VPS — полезный опыт, но не у каждого бизнеса есть на это время. Если ваша цель — просто опубликовать сайт на WordPress, есть два варианта:
- WordPress-хостинг: работает на NVMe-дисках; после оплаты наша команда устанавливает WordPress и передаёт вам сайт готовым к работе.
- Веб-хостинг: собственная панель управления, phpMyAdmin и файловый менеджер, поддержка PHP 8.3 и MariaDB. Актуальные цены (в долларах США) указаны на странице тарифа. Если хотите разобраться в различиях, прочитайте нашу статью что такое веб-хостинг.
Если вам нужно несколько сайтов, особые настройки PHP или другие приложения помимо WordPress, больше гибкости даст VPS с root-доступом.
Часто задаваемые вопросы
Постоянные ссылки выдают ошибку 404. Почему?
Nginx не читает файл .htaccess от Apache. Убедитесь, что в серверном блоке внутри location / есть строка try_files $uri $uri/ /index.php?$args;, затем выполните sudo nginx -t и sudo systemctl reload nginx.
Появляется «Ошибка установки соединения с базой данных». Что делать?
Проверьте, что значения DB_NAME, DB_USER и DB_PASSWORD в wp-config.php в точности совпадают с созданными на шаге 3 и что MariaDB работает (systemctl status mariadb).
При установке плагина WordPress просит данные FTP. Почему?
WordPress запрашивает FTP, когда не может записывать в файлы. Проверьте, что владелец папки сайта — www-data: sudo chown -R www-data:www-data /var/www/ornek.com.
При загрузке файлов появляется «413 Request Entity Too Large».
Эту ошибку выдаёт Nginx. Увеличьте client_max_body_size в серверном блоке вместе с upload_max_filesize и post_max_size в PHP, затем перезагрузите Nginx и PHP-FPM.
Можно ли запустить несколько сайтов WordPress на одном VPS?
Да. Для каждого сайта достаточно создать отдельную базу данных и пользователя, отдельную папку (например, /var/www/site2.com) и отдельный серверный блок Nginx.
Читайте также
Если на VPS с 512 МБ или 1 ГБ RAM падают приложения, swap — первая помощь. Как добавить swap в Ubuntu 24.04, в...
Бот не должен засыпать вместе с ноутбуком. Пошагово: запуск Telegram-бота на Python 24/7 на VPS с Ubuntu 24.04...
Собираетесь запустить сервер Metin2, но не знаете, хватит ли VPS или нужен VDS? Сравниваем общий и выделенный...