WordPress — самая популярная система управления контентом (CMS) в мире. Для её работы требуется веб-сервер (Nginx), база данных (MariaDB/MySQL) и PHP. В этом руководстве я покажу полную установку WordPress с Nginx на Debian 13, 12 и 11 с нуля.
| Релиз Debian | PHP | MariaDB | Nginx |
|---|---|---|---|
| Debian 13 (Trixie) | 8.4 | 11.8 | 1.26 |
| Debian 12 (Bookworm) | 8.2 | 10.11 | 1.22 |
| Debian 11 (Bullseye) | 7.4 | 10.5 | 1.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 WordPresswget— для скачивания архива WordPressunzip— для распаковки архива
Установка 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 root | Enter (нажать Enter) | Пароль root пуст по умолчанию |
| Switch to unix_socket authentication | Y | Использовать системную аутентификацию |
| 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 через браузер
- Откройте браузер и перейдите по адресу
http://example.com/wp-admin/install.php(заменитеexample.comна ваш домен или IP-адрес) - Выберите язык
- На следующем экране заполните:
- Название сайта — придумайте название
- Имя пользователя — введите уникальное имя (не
admin) - Пароль — используйте надёжный пароль (можно сгенерировать автоматически)
- Ваш email — укажите рабочий email
- Видимость для поисковиков — для тестового сайта отметьте «Не индексировать»
- Нажмите кнопку «Install WordPress»
- После успешной установки нажмите «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 nginx→active (running) - [ ] MariaDB работает:
systemctl status mariadb→active (running) - [ ] PHP-FPM работает:
systemctl status php8.4-fpm→active (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-run→success
Обновление 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 для защиты