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
⚠️ Важно: Даже после настройки HTTPS оставляйте порт 80 открытым. Let’s Encrypt использует HTTP-01 валидацию через порт 80 для автоматического обновления сертификатов. Если закрыть порт 80, сертификаты не будут обновляться.
Установка 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
Настройка PHP-сессий
Некоторые плагины (например, WooCommerce) используют PHP-сессии. Убедитесь, что директория для сессий существует и имеет правильные права:
sudo install -d -o root -g root -m 1733 /var/lib/php/sessions
Скачивание и настройка 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 ~* /wp-sitemap.*\.xml {
try_files $uri $uri/ /index.php$is_args$args;
}
client_max_body_size 100M;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.4-fpm.sock;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
fastcgi_intercept_errors on;
}
gzip on;
gzip_comp_level 6;
gzip_min_length 1000;
gzip_proxied any;
gzip_disable "msie6";
gzip_types application/atom+xml application/geo+json application/javascript application/x-javascript application/json application/ld+json application/manifest+json application/rdf+xml application/rss+xml application/xhtml+xml application/xml font/eot font/otf font/ttf image/svg+xml text/css text/javascript text/plain text/xml;
location ~* \.(?:css(\.map)?|js(\.map)?|jpe?g|png|gif|ico|cur|heic|webp|tiff?|mp3|m4a|aac|ogg|midi?|wav|mp4|mov|webm|mpe?g|avi|ogv|flv|wmv)$ {
expires 90d;
access_log off;
}
location ~* \.(?:svgz?|ttf|ttc|otf|eot|woff2?)$ {
add_header Access-Control-Allow-Origin "*";
expires 90d;
access_log off;
}
location ~ /\.ht {
access_log off;
log_not_found off;
deny all;
}
}
⚠️ Для 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: Проверьте подключение к БД вручную:
mariadb -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: Очистите кэш браузера.
8.6 Белый экран (White Screen of Death)
Симптом: При открытии сайта или админ-панели пустая белая страница.
Причина: PHP-ошибка, которая не отображается из-за настроек display_errors.
Пошаговое решение:
Шаг 1: Включите режим отладки в wp-config.php:
sudo nano /var/www/html/wordpress/wp-config.php
Добавьте перед строкой /* That's all, stop editing! Happy publishing. */:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
@ini_set( 'display_errors', 0 );
Шаг 2: Перезагрузите страницу и проверьте лог:
sudo tail -50 /var/www/html/wordpress/wp-content/debug.log
Шаг 3: После исправления ошибки выключите режим отладки:
sudo nano /var/www/html/wordpress/wp-config.php
Измените:
define( 'WP_DEBUG', false );
Чек-лист: что проверить после установки
- [ ] 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→ страница установки - [ ] База данных создана:
mariadb -e "SHOW DATABASES;" | grep wordpress - [ ] Пользователь БД создан:
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 - [ ] Директория PHP-сессий настроена:
ls -ld /var/lib/php/sessions - [ ] 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 для защиты
Связанные статьи:
- Как добавить пользователя в sudoers в Debian
- Установка Nginx на Debian
- Защита Nginx с помощью Let’s Encrypt