TürkiyeVPS

Установка WordPress на VPS: с Nginx, PHP 8.3 и MariaDB

Установите WordPress вручную на VPS с Ubuntu 24.04: установка Nginx, PHP 8.3-FPM и MariaDB, создание базы данных, настройка wp-config, серверный блок Nginx, бесплатный SSL и базовые меры безопасности.

6 мин чтения

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.