Установка WordPress с Nginx на Debian 13, 12, 11: полное руководство

WordPress — самая популярная система управления контентом (CMS) в мире. Для её работы требуется веб-сервер (Nginx), база данных (MariaDB/MySQL) и PHP. В этом руководстве я покажу полную установку WordPress с Nginx на Debian 13, 12 и 11 с нуля.

Релиз DebianPHPMariaDBNginx
Debian 13 (Trixie)8.411.81.26
Debian 12 (Bookworm)8.210.111.22
Debian 11 (Bullseye)7.410.51.18

Оглавление

Предварительные требования

Перед установкой убедитесь, что:

  • У вас есть доменное имя, привязанное к IP-адресу сервера (для HTTPS обязательно)
  • Открыты порты 80 (HTTP) и 443 (HTTPS) в файрволе
  • Вы имеете права sudo (администратора)

⚠️ ВАЖНО: Проверьте права sudo перед установкой

Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:

sudo whoami

Что делает: sudo — выполняет команду от имени суперпользователя; whoami — показывает имя текущего пользователя.

Ожидаемый вывод в терминале:

root

❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.


Обновление системы и установка утилит

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl wget unzip

Что делают утилиты:

  • curl — для получения секретных ключей с API WordPress
  • wget — для скачивания архива WordPress
  • unzip — для распаковки архива

Установка Nginx

sudo apt install -y nginx

Проверьте, что сервис запущен:

systemctl is-active nginx
systemctl is-enabled nginx

Ожидаемый вывод: active и enabled

Если Nginx не запущен:

sudo systemctl enable --now nginx

Настройка UFW (файрвола)

⚠️ Если вы подключаетесь по SSH, сначала разрешите SSH, чтобы не потерять доступ!

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable

Проверьте статус:

sudo ufw status

Ожидаемый вывод:

Status: active

To                         Action      From
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere

Установка MariaDB

sudo apt install -y mariadb-server mariadb-client

Проверьте, что сервис запущен:

systemctl is-active mariadb
systemctl is-enabled mariadb

Ожидаемый вывод: active и enabled

Безопасная настройка MariaDB

Запустите скрипт безопасной настройки:

sudo mariadb-secure-installation

Что делает: Этот скрипт запускается в терминале и задаёт вопросы о безопасности MariaDB. Он не требует входа в MariaDB — просто отвечайте на вопросы.

Рекомендуемые ответы:

ВопросОтветПочему
Enter current password for rootEnter (нажать Enter)Пароль root пуст по
умолчанию
Switch to unix_socket authenticationYИспользовать системную
аутентификацию
Change the root password?nОставляем без пароля
(безопасно через unix_socket)
Remove anonymous users?YУдаляем анонимных
пользователей
Disallow root login remotely?YЗапрещаем root-доступ по сети
Remove test database and access to it?YУдаляем тестовую базу
Reload privilege tables now?YПрименяем изменения

Установка PHP и расширений

Для Debian 13 (PHP 8.4):

sudo apt install -y php-fpm php-cli php-mbstring php-bcmath php-xml php-mysql php-gd php-curl php-zip php-imagick php-intl

Для Debian 12 (PHP 8.2): команда та же, версия определится автоматически.
Для Debian 11 (PHP 7.4): команда та же.

Проверьте версию PHP:

php -v

Проверьте, что PHP-FPM запущен (замените версию на вашу):

systemctl is-active php8.4-fpm   # Debian 13
# или
systemctl is-active php8.2-fpm   # Debian 12
# или
systemctl is-active php7.4-fpm   # Debian 11

Ожидаемый вывод: active


Скачивание и настройка WordPress

Скачайте и распакуйте архив

cd /tmp
wget -O wordpress-latest.zip https://wordpress.org/latest.zip
sudo unzip wordpress-latest.zip -d /var/www/html/

Что делает: Скачивает последнюю версию WordPress и распаковывает её в /var/www/html/wordpress/.

Установите права и владельца

sudo chown -R www-data:www-data /var/www/html/wordpress/

Что делает: Делает пользователя www-data (от которого работает веб-сервер) владельцем файлов WordPress.

sudo find /var/www/html/wordpress -type d -exec chmod 755 {} \;

Что делает: Для всех директорий устанавливает права 755 (владелец может всё, остальные — читать и выполнять).

sudo find /var/www/html/wordpress -type f -exec chmod 644 {} \;

Что делает: Для всех файлов устанавливает права 644 (владелец может читать и писать, остальные — только читать).


Создание базы данных и пользователя

Шаг 1: Войдите в оболочку MariaDB

sudo mariadb -u root

Что делает: Запускает интерактивную оболочку MariaDB с правами администратора. После выполнения этой команды приглашение в терминале сменится на MariaDB [(none)]>.

Шаг 2: Выполните SQL-команды внутри MariaDB

Теперь вы находитесь внутри MariaDB. Выполните следующие команды (замените strong_password_here на надёжный пароль):

CREATE DATABASE wordpress;

Что делает: Создаёт базу данных с именем wordpress.

CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'strong_password_here';

Что делает: Создаёт пользователя wpuser, который может подключаться только с этого же компьютера (localhost). Пароль задаётся вместо strong_password_here.

GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';

Что делает: Даёт пользователю wpuser полный доступ к базе данных wordpress.

FLUSH PRIVILEGES;

Что делает: Обновляет права доступа, чтобы изменения вступили в силу.

EXIT;

Что делает: Выходит из оболочки MariaDB. После этого вы вернётесь в обычный терминал (приглашение сменится обратно на $ или #).


Настройка wp-config.php

Перейдите в директорию WordPress

cd /var/www/html/wordpress/

Скопируйте файл примера конфигурации

sudo cp wp-config-sample.php wp-config.php

Что делает: Создаёт рабочий файл конфигурации из образца.

Отредактируйте конфигурационный файл

sudo nano wp-config.php

Что делает: Открывает файл в текстовом редакторе nano.

Измените настройки подключения к БД

Найдите эти строки и замените их значениями, которые вы задали при создании базы данных:

define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', 'strong_password_here' );
define( 'DB_HOST', 'localhost' );

Добавьте дополнительные константы (рекомендуется)

Перед строкой /* That's all, stop editing! Happy publishing. */ добавьте:

define( 'FS_METHOD', 'direct' );
define( 'WP_MEMORY_LIMIT', '256M' );

Что делает: FS_METHOD разрешает WordPress устанавливать обновления напрямую (без FTP). WP_MEMORY_LIMIT увеличивает лимит памяти для WordPress.

Сгенерируйте уникальные ключи безопасности

В терминале (не внутри MariaDB!) выполните:

curl -s https://api.wordpress.org/secret-key/1.1/salt/

Что делает: Получает от официального API WordPress уникальные ключи для шифрования cookies.

Скопируйте ВЕСЬ вывод (строки с define(...)).

В редакторе nano найдите строки, начинающиеся с define('AUTH_KEY' и заканчивающиеся ..._salt', выделите их и вставьте скопированные ключи. Удалите старые пустые строки.

Сохраните файл: Ctrl+O, Enter, Ctrl+X.


Настройка Nginx для WordPress

Создайте конфигурационный файл для вашего сайта

Замените example.com на ваше реальное доменное имя:

sudo nano /etc/nginx/sites-available/example.com.conf

Что делает: Создаёт новый файл конфигурации для вашего сайта.

Вставьте содержимое конфигурации

Для Debian 13 (PHP 8.4):

server {
    listen 80;
    listen [::]:80;
    server_name example.com www.example.com;
    root /var/www/html/wordpress;
    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.4-fpm.sock;
    }

    location ~ /\.ht {
        deny all;
    }

    client_max_body_size 100M;
}

⚠️ Для Debian 12: замените php8.4-fpm.sock на php8.2-fpm.sock
⚠️ Для Debian 11: замените php8.4-fpm.sock на php7.4-fpm.sock

Включите сайт и удалите стандартный

sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

Что делает: Создаёт символическую ссылку, которая «включает» сайт.

sudo rm -f /etc/nginx/sites-enabled/default

Что делает: Удаляет стандартную заглушку Nginx.

Проверьте конфигурацию и перезагрузите Nginx

sudo nginx -t

Что делает: Проверяет, нет ли ошибок в конфигурационных файлах.

Ожидаемый вывод: syntax is ok и test is successful

sudo systemctl reload nginx

Что делает: Перезагружает Nginx без разрыва активных соединений.


Настройка PHP (оптимизация)

Отредактируйте php.ini для вашей версии PHP

Debian 13:

sudo nano /etc/php/8.4/fpm/php.ini

Debian 12:

sudo nano /etc/php/8.2/fpm/php.ini

Debian 11:

sudo nano /etc/php/7.4/fpm/php.ini

Измените следующие параметры (найдите строки с помощью Ctrl+W):

upload_max_filesize = 100M
post_max_size = 100M
max_execution_time = 300
memory_limit = 256M

Перезапустите PHP-FPM

Debian 13:

sudo systemctl restart php8.4-fpm

Debian 12:

sudo systemctl restart php8.2-fpm

Debian 11:

sudo systemctl restart php7.4-fpm

Завершение установки WordPress через браузер

  1. Откройте браузер и перейдите по адресу http://example.com/wp-admin/install.php (замените example.com на ваш домен или IP-адрес)
  2. Выберите язык
  3. На следующем экране заполните:
  • Название сайта — придумайте название
  • Имя пользователя — введите уникальное имя (не admin)
  • Пароль — используйте надёжный пароль (можно сгенерировать автоматически)
  • Ваш email — укажите рабочий email
  • Видимость для поисковиков — для тестового сайта отметьте «Не индексировать»
  1. Нажмите кнопку «Install WordPress»
  2. После успешной установки нажмите «Log In» и войдите с созданными данными

Настройка HTTPS с Let’s Encrypt

Установка Certbot

sudo apt install -y python3-certbot-nginx

Получение сертификата

⚠️ Перед выполнением убедитесь, что ваше доменное имя указывает на IP-адрес сервера!

Замените you@example.com на ваш email, example.com на ваш домен:

sudo certbot --nginx --agree-tos --redirect --email you@example.com -d example.com -d www.example.com

Что делают флаги:

  • --nginx — автоматически настроить Nginx
  • --agree-tos — согласиться с условиями Let’s Encrypt
  • --redirect — перенаправлять HTTP → HTTPS
  • -d — домен (можно несколько)

Проверка автоматического обновления

Let’s Encrypt сертификаты действуют 90 дней. Certbot автоматически обновляет их через systemd-таймер.

systemctl is-active certbot.timer
systemctl is-enabled certbot.timer

Ожидаемый вывод: active и enabled

sudo certbot renew --dry-run

Что делает: Проверяет процесс обновления без реального изменения сертификата.

Ожидаемый вывод: Congratulations, all simulated renewals succeeded


Решение типичных проблем

8.1 Ошибка: 502 Bad Gateway

Симптом: Страница не открывается, браузер показывает ошибку 502.

Причина: PHP-FPM не запущен или в конфигурации Nginx указан неверный путь к сокету.

Пошаговое решение:

Шаг 1: Проверьте статус PHP-FPM:

systemctl status php8.4-fpm   # Debian 13

Шаг 2: Убедитесь, что в конфигурации Nginx указан правильный сокет:

grep fastcgi_pass /etc/nginx/sites-available/example.com.conf

Шаг 3: Перезапустите PHP-FPM и перезагрузите Nginx:

sudo systemctl restart php8.4-fpm
sudo systemctl reload nginx

8.2 Ошибка: Error establishing a database connection

Симптом: На сайте отображается сообщение об ошибке подключения к базе данных.

Причина: Неверные данные в wp-config.php или MariaDB не запущена.

Пошаговое решение:

Шаг 1: Проверьте статус MariaDB:

systemctl status mariadb

Шаг 2: Проверьте данные в wp-config.php:

grep -E "DB_NAME|DB_USER|DB_PASSWORD|DB_HOST" /var/www/html/wordpress/wp-config.php

Шаг 3: Проверьте подключение к БД вручную:

mysql -u wpuser -p -e "SHOW DATABASES;"

Что делает: Пытается подключиться к MariaDB от имени пользователя wpuser. При запросе введите пароль, который вы задали при создании пользователя.


8.3 Ошибка: 413 Request Entity Too Large

Симптом: При загрузке файла через админ-панель WordPress появляется ошибка 413.

Причина: Лимит размера загружаемого файла в Nginx меньше, чем в PHP.

Пошаговое решение:

Шаг 1: Увеличьте лимит в конфигурации Nginx. Откройте файл:

sudo nano /etc/nginx/sites-available/example.com.conf

Добавьте строку внутри блока server { ... }:

client_max_body_size 100M;

Шаг 2: Измените лимиты в php.ini (см. раздел настройки PHP).

Шаг 3: Перезагрузите Nginx и перезапустите PHP-FPM:

sudo systemctl reload nginx
sudo systemctl restart php8.4-fpm

8.4 Ошибка: Permission denied (не создаются файлы)

Симптом: WordPress не может создать директорию uploads или установить плагины. Появляется сообщение: «Unable to create directory wp-content/uploads/…»

Причина: Неправильные права на директорию /var/www/html/wordpress/.

Пошаговое решение:

Шаг 1: Проверьте владельца файлов:

ls -la /var/www/html/wordpress/

Шаг 2: Исправьте права:

sudo chown -R www-data:www-data /var/www/html/wordpress/
sudo find /var/www/html/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/html/wordpress -type f -exec chmod 644 {} \;

Шаг 3: Создайте директорию для загрузок вручную (если нужно):

sudo install -d -o www-data -g www-data -m 755 /var/www/html/wordpress/wp-content/uploads

8.5 Ошибка: Бесконечный редирект (HTTPS redirect loop)

Симптом: Сайт зацикливается между HTTP и HTTPS, браузер выдаёт ошибку «слишком много перенаправлений».

Причина: WordPress находится за обратным прокси (Cloudflare, балансировщик), который завершает HTTPS, а сам сервер получает обычный HTTP. WordPress не знает, что оригинальный запрос был по HTTPS.

Пошаговое решение:

Шаг 1: Отредактируйте wp-config.php:

sudo nano /var/www/html/wordpress/wp-config.php

Шаг 2: Добавьте следующий код перед строкой /* That's all, stop editing! Happy publishing. */:

define('FORCE_SSL_ADMIN', true);

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false) {
    $_SERVER['HTTPS'] = 'on';
}

Шаг 3: Если вы используете Cloudflare, убедитесь, что в настройках SSL выбран режим Full (strict).

Шаг 4: Очистите кэш браузера.


Чек-лист: что проверить после установки

  • [ ] Nginx работает: systemctl status nginxactive (running)
  • [ ] MariaDB работает: systemctl status mariadbactive (running)
  • [ ] PHP-FPM работает: systemctl status php8.4-fpmactive (running)
  • [ ] Сайт открывается: http://example.com/wp-admin/install.php → страница установки
  • [ ] База данных создана: sudo mariadb -e "SHOW DATABASES;"wordpress
  • [ ] Пользователь БД создан: sudo mariadb -e "SELECT user FROM mysql.user WHERE user='wpuser';"
  • [ ] wp-config.php настроен: проверьте DB_NAME, DB_USER, DB_PASSWORD
  • [ ] Конфигурация Nginx активна: ls /etc/nginx/sites-enabled/example.com.conf
  • [ ] HTTPS работает (если настроен): https://example.com → зелёный замок
  • [ ] Автообновление сертификата: sudo certbot renew --dry-runsuccess

Обновление WordPress

WordPress обновляется через админ-панель. При появлении уведомления об обновлении нажмите «Обновить сейчас». Обновления плагинов и тем — также через интерфейс.


Удаление WordPress (полная очистка)

Шаг 1: Удалите файлы WordPress

sudo rm -rf /var/www/html/wordpress/

Шаг 2: Удалите базу данных и пользователя

sudo mariadb -u root -e "DROP DATABASE IF EXISTS wordpress; DROP USER IF EXISTS 'wpuser'@'localhost'; FLUSH PRIVILEGES;"

Шаг 3: Удалите конфигурацию Nginx

sudo rm -f /etc/nginx/sites-available/example.com.conf
sudo rm -f /etc/nginx/sites-enabled/example.com.conf
sudo systemctl reload nginx

Шаг 4: Удалите SSL-сертификат (если создавали)

sudo certbot delete --cert-name example.com

Шаг 5: Удалите пакеты (опционально — только если сервер больше не нужен для других сайтов)

sudo apt remove nginx mariadb-server mariadb-client php-fpm php-cli php-mbstring php-bcmath php-xml php-mysql php-gd php-curl php-zip php-imagick php-intl python3-certbot-nginx
sudo apt autoremove

Часто задаваемые вопросы (FAQ)

Вопрос: Можно ли установить WordPress без домена?
Ответ: Да, на время тестирования можно использовать IP-адрес. Но для HTTPS и нормальной работы в интернете домен необходим.

Вопрос: Как увеличить максимальный размер загружаемого файла?
Ответ: Измените upload_max_filesize и post_max_size в php.ini, а также client_max_body_size в конфигурации Nginx. Затем перезагрузите Nginx и перезапустите PHP-FPM.

Вопрос: Как обновить PHP до новой версии на Debian?
Ответ: Для Debian 13 и 12 можно использовать репозиторий Sury (см. установку PHP на Debian).

Вопрос: Почему WordPress просит FTP при установке плагинов?
Ответ: Потому что владельцем файлов является не www-data. Исправляется командой sudo chown -R www-data:www-data /var/www/html/wordpress/.

Вопрос: Нужно ли перезагружать сервер после установки?
Ответ: Нет, достаточно перезапустить сервисы (systemctl reload nginx, systemctl restart php8.4-fpm).


Заключение

Теперь WordPress установлен на вашем Debian с Nginx, MariaDB и PHP-FPM. Ваш сайт работает под управлением современного стека и защищён HTTPS (если настроен Let’s Encrypt).

Что дальше?

  • Настройте резервное копирование
  • Установите кеширование для ускорения
  • Настройте мониторинг сервера
  • Установите Fail2ban для защиты