+7 (920) 556-26-91 пн–пт: 10:00–19:00 (МСК)
Проконсультироваться

Инструкции

Как установить WordPress 7.1 на VPS с nginx и PHP 8.3

WordPress 7.1, php8.3-fpm и MySQL 8.0 из Ubuntu 24.04. Сокет FPM, try_files, соли с wordpress.org, HTTPS сразу.

Как установить WordPress 7.1 на VPS с nginx и PHP 8.3

Короткий ответ: на чистом Ubuntu 24.04 VPS ставите стек из репозитория дистрибутива — php8.3-fpm (ветка 8.3.6) и mysql-server 8.0.46 из main, либо MariaDB 10.11 из universe. WordPress берёте только как wordpress.org/latest.zip — на 13–14 сентября 2026 это ветка 7.1 (релиз 19 августа 2026). PHP отдаёте через nginx и сокет FPM, в location / обязательно try_files $uri $uri/ /index.php?$args;. Сокет проверяете в пуле: обычно /run/php/php8.3-fpm.sock. HTTPS включаете сразу после Certbot. PHP 8.4 и 8.5 в noble нет — Ondřej PPA для этой установки не нужен.

Гайд рассчитан на один сайт на одном VPS. Предполагается, что сервер уже обновлён, создан пользователь с sudo, настроены SSH-ключи и firewall, как в первой настройке Ubuntu 24.04. Домен должен указывать A-записью на IPv4 сервера. Все команды ниже выполняйте от пользователя с sudo, если не сказано иначе.

Что ставим: версии на 13–14 сентября 2026

Официальные требования WordPress — PHP 8.3 или новее, MySQL 8.0+ или MariaDB 10.11+, HTTPS обязателен. Источник: wordpress.org/about/requirements. На Ubuntu 24.04 это закрывается пакетами дистрибутива, без сторонних репозиториев PHP.

Компонент Откуда Что должно получиться
WordPress latest.zip ветка 7.1, 19 августа 2026
PHP-FPM universe Ubuntu 24.04 пакет php8.3-fpm, ветка 8.3.6
СУБД main / universe mysql-server 8.0.46 или MariaDB 10.11
Веб-сервер пакет nginx try_files + unix-сокет FPM
TLS Certbot HTTPS сразу после выпуска сертификата
CLI официальный phar WP-CLI команда wp в /usr/local/bin

Проверьте, что PHP 8.4/8.5 действительно нет в noble:

apt-cache search '^php8\.[0-9]-fpm$'
apt-cache policy php8.3-fpm php8.4-fpm php8.5-fpm

Кандидат должен быть только у php8.3-fpm. Если пакет «не найден», включите universe и обновите индекс: sudo add-apt-repository universe && sudo apt update. На большинстве облачных образов 24.04 universe уже включён.

PHP 8.3-FPM и база данных

Ставьте интерпретатор, FPM и расширения, без которых ядро WordPress и типовые темы не собирают картинки, XML-RPC, REST и загрузки. Imagick не обязателен — достаточно GD.

sudo apt update
sudo apt install -y nginx php8.3-fpm php8.3-cli php8.3-mysql php8.3-xml \
  php8.3-gd php8.3-curl php8.3-mbstring php8.3-zip php8.3-intl php8.3-bcmath \
  unzip curl
php -v
php-fpm8.3 -v

В выводе обеих команд должна быть ветка 8.3.6. Сокет и пользователя пула смотрите в файле, а не в статьях: разные образы иногда меняют только комментарии, но listen обязан совпасть с nginx.

grep -E '^(listen|user|group|listen.owner|listen.group)' \
  /etc/php/8.3/fpm/pool.d/www.conf
systemctl enable --now php8.3-fpm
systemctl is-active php8.3-fpm
ls -l /run/php/php8.3-fpm.sock

Типичные значения: listen = /run/php/php8.3-fpm.sock, user = www-data, group = www-data. Если сокета нет — journalctl -u php8.3-fpm -n 50 --no-pager и не идите дальше, пока FPM не слушает.

База: проще взять MySQL из main. MariaDB 10.11 из universe тоже удовлетворяет требованиям wordpress.org; не ставьте оба сервера на один порт 3306.

sudo apt install -y mysql-server
mysqld --version
sudo systemctl enable --now mysql
sudo mysql --protocol=socket

В клиенте MySQL создайте отдельную базу и пользователя только с правами на неё. Пароль сгенерируйте сами (openssl rand -base64 24) и никуда не копируйте из гайдов.

CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'СВОЙ_ПАРОЛЬ';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
FLUSH PRIVILEGES;
QUIT;

Проверка входа этим пользователем: mysql -u wpuser -p -e 'SHOW DATABASES;'. Должна быть видна только wordpress плюс служебные схемы, к которым у него нет прав на запись.

Каталог сайта и WordPress 7.1

Не распаковывайте архив в /var/www/html поверх заглушки nginx, если собираетесь держать несколько сайтов. Один домен — один корень. Ниже example.com замените на свой FQDN.

sudo mkdir -p /var/www/example.com
cd /tmp
curl -fL -o wordpress.zip https://wordpress.org/latest.zip
unzip -t wordpress.zip
sudo unzip -q wordpress.zip -d /var/www/example.com
sudo sh -c 'mv /var/www/example.com/wordpress/* /var/www/example.com/'
sudo rmdir /var/www/example.com/wordpress
ls /var/www/example.com/wp-load.php /var/www/example.com/wp-admin/index.php

curl -fL обязателен: без -f вы можете сохранить HTML-страницу ошибки как zip. Контрольная точка — наличие wp-load.php в корне, не во вложенной папке wordpress/. Версию пакета проверьте так:

grep wp_version /var/www/example.com/wp-includes/version.php

Должно быть $wp_version = '7.1'; или патч той же ветки, если wordpress.org уже отдал 7.1.x в latest.zip. Не подменяйте архив «сборками» с зеркал.

nginx: try_files и FastCGI

Пока нет сертификата, слушайте 80. После Certbot этот же server-блок получит 443. Рецепт постоянных ссылок — из документации WordPress по nginx: статика отдаётся с диска, остальное уходит в index.php. Не используйте try_files ... /index.php; без ?$args — сломаются query string у постоянных ссылок.

Создайте /etc/nginx/sites-available/example.com:

server {
    listen 80;
    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 ~* /\.ht {
        deny all;
    }
}

Если grep ^listen в пуле показал не unix-сокет, а 127.0.0.1:9000, в fastcgi_pass пишите 127.0.0.1:9000. Не копируйте сокет из памяти. Включайте сайт только после теста конфигурации.

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
curl -sI -H 'Host: example.com' http://127.0.0.1/ | head

Ожидаете HTTP 302 на /wp-admin/install.php или 200 с установщиком — не 404 и не «File not found». «File not found» почти всегда значит, что nginx бьёт не в тот сокет или root не совпадает с каталогом, где лежит index.php.

wp-config.php, соли и права

Соли и ключи не копируйте из статей. Их выдаёт только api.wordpress.org/secret-key/1.1/salt/. Сначала файл конфигурации из образца, затем вставка солей и реквизитов БД.

cd /var/www/example.com
sudo cp wp-config-sample.php wp-config.php
curl -fsS https://api.wordpress.org/secret-key/1.1/salt/

Откройте wp-config.php и замените блок AUTH_KEYNONCE_SALT целиком выводом curl. В том же файле:

  • DB_NAMEwordpress
  • DB_USERwpuser
  • DB_PASSWORD — пароль, который задали в MySQL
  • DB_HOSTlocalhost
  • DB_CHARSETutf8mb4
  • table_prefix оставьте wp_, если это единственный сайт в базе

Права — как в каноне администрирования: каталоги 755, файлы 644, wp-config.php 400 или 440. Владелец дерева — www-data, чтобы работали загрузки и автообновления тем/плагинов. Конфиг лучше сделать читаемым группе www-data, но не всем.

sudo chown -R www-data:www-data /var/www/example.com
sudo find /var/www/example.com -type d -exec chmod 755 {} \;
sudo find /var/www/example.com -type f -exec chmod 644 {} \;
sudo chown root:www-data /var/www/example.com/wp-config.php
sudo chmod 440 /var/www/example.com/wp-config.php

Проверка, что FPM читает конфиг: sudo -u www-data test -r /var/www/example.com/wp-config.php && echo ok. Посторонний пользователь без группы www-data читать его не должен.

HTTPS, WP-CLI и установка ядра

Не оставляйте установщик на голом HTTP. Выпустите сертификат по гайду Certbot + nginx + Let’s Encrypt, затем проверьте, что сайт отвечает 200 по HTTPS на обоих именах, если используете www.

curl -sI https://example.com/ | head
curl -sI https://www.example.com/ | head

WP-CLI ставьте официальным phar, не пакетом из случайного PPA. Проверка подписи — на странице установки WP-CLI; ниже минимальный путь, который использует тот же phar.

cd /tmp
curl -fO https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
wp --info

Установку ядра выполняйте от www-data, иначе файлы создадутся от root и админка не сможет писать в wp-content.

sudo -u www-data wp --path=/var/www/example.com core is-installed || \
sudo -u www-data wp --path=/var/www/example.com core install \
  --url='https://example.com' \
  --title='Сайт' \
  --admin_user='admin' \
  --admin_email='you@example.com' \
  --prompt=admin_password
sudo -u www-data wp --path=/var/www/example.com core version
sudo -u www-data wp --path=/var/www/example.com option get siteurl

Пароль администратора вводите в prompt, не в историю shell. siteurl и home должны быть с https://. Если поставили сайт по HTTP и только потом включили TLS, исправьте URL:

sudo -u www-data wp --path=/var/www/example.com option update siteurl 'https://example.com'
sudo -u www-data wp --path=/var/www/example.com option update home 'https://example.com'

Финальная проверка с сервера:

  1. curl -sI https://example.com/ — 200, не редирект на IP.
  2. curl -sI https://example.com/wp-login.php — 200.
  3. sudo -u www-data wp --path=/var/www/example.com core verify-checksums — checksums ядра совпадают с wordpress.org.
  4. В браузере откройте /wp-admin/ и войдите созданным пользователем.

Если checksums «failed», архив битый или файлы правили вручную — скачайте latest.zip заново, не «чините» ядро плагинами. Дальше темы, постоянные ссылки и плагины настраиваются уже в админке; этот гайд заканчивается на воспроизводимом ядре 7.1 за nginx + PHP 8.3 + MySQL 8.0.

Частые вопросы

Почему не PHP 8.4 или 8.5, если wordpress.org пишет «8.3 или новее»?

Рекомендация wordpress.org — PHP 8.3+. В Ubuntu 24.04 (noble) из репозитория ставится php8.3-fpm ветки 8.3.6. Пакетов php8.4-fpm и php8.5-fpm в noble нет. PPA Ondřej Surý для этой задачи не обязателен: ядро 7.1 штатно работает на 8.3. Если позже переедете на другой релиз Ubuntu, где есть 8.4/8.5, это будет уже другой чеклист.

MySQL или MariaDB?

Оба варианта входят в требования: MySQL 8.0+ или MariaDB 10.11+. На Ubuntu 24.04 mysql-server 8.0.46 лежит в main и обычно проще. MariaDB 10.11 — universe. Не слушайте оба на 3306 одновременно. Для WordPress разницы в этом гайде нет: те же utf8mb4, тот же пользователь с GRANT только на одну базу.

Зачем 440 на wp-config.php, если тогда «не пишутся настройки»?

Файл содержит пароль БД и соли. 644 с владельцем www-data читает любой локальный пользователь. 440 с владельцем root:www-data даёт чтение PHP и запрещает запись: WordPress не должен сам переписывать конфиг из админки. Меняете соли и реквизиты — правите файл вручную под sudo, затем снова chmod 440.

WP-CLI пишет Permission denied на wp-content

Вы запускаете wp от root или от своего sudo-пользователя, а каталог принадлежит www-data. Всегда: sudo -u www-data wp --path=/var/www/example.com .... Если уже насоздавали файлов от root, верните владельца: sudo chown -R www-data:www-data /var/www/example.com/wp-content, не трогая режим 440 у wp-config.php.

Установщик открывается, но стили и постоянные ссылки «ломаются»

Смотрите nginx: в location / должна быть строка try_files $uri $uri/ /index.php?$args; из документации WordPress по nginx. Проверьте, что Certbot не завёл второй server-блок без этой строки. После смены постоянных ссылок в админке nginx не нужно «генерировать .htaccess» — на nginx его нет.

Ещё гайды