Повний посібник з розгортання WordPress на Debian з Nginx: від встановлення до оптимізації
Востаннє змінено 17 Вересня 2025 в
24 min read
22
0
Spartak Itskovich
Game Content Writer
WordPress є найпопулярнішою системою керування контентом у світі, що використовується більш ніж на 43% всіх веб-сайтів. Debian, як одна з найстабільніших дистрибуцій Linux, забезпечує надійну основу для хостингу WordPress. Цей детальний посібник охоплює весь процес розгортання WordPress на Debian з використанням стеку LEMP (Linux, Nginx, MariaDB/MySQL, PHP), від початкового налаштування системи до просунутих методів оптимізації та захисту.
Підготовка системи та передумови
Системні вимоги
Перед початком встановлення WordPress на Debian необхідно переконатися, що ваша система відповідає мінімальним вимогам. Для стабільної роботи WordPress рекомендується мати щонайменше 1 ГБ оперативної пам'яті, 20 ГБ дискового простору та стабільне з'єднання з Інтернетом.
Для початку роботи оновіть систему до останньої версії через термінал:
# sudo - виконати команду з правами адміністратора # apt update - оновити список доступних пакетів # && - виконати наступну команду тільки якщо попередня успішна # apt upgrade -y - встановити всі доступні оновлення без запитань sudo apt update && sudo apt upgrade -y
Ця команда спочатку оновлює список доступних пакетів (apt update), а потім встановлює оновлення (apt upgrade).
Перевірте версію Debian за допомогою команди:
# cat - вивести вміст файлу на екран # /etc/debian_version - файл що містить версію Debian cat /etc/debian_version
Налаштування мережі та файрволу
Налаштування безпеки починається з правильної конфігурації мережевих з'єднань та файрволу. Встановіть UFW (Uncomplicated Firewall) для базового захисту:
# sudo apt install - встановити пакет з правами адміністратора # ufw - назва пакету файрволу # -y - автоматично відповісти "так" на всі запитання sudo apt install ufw -y # sudo ufw allow - дозволити підключення через файрвол # ssh - дозволити SSH підключення (порт 22) sudo ufw allow ssh # 'Nginx Full' - дозволити HTTP (порт 80) та HTTPS (порт 443) для Nginx sudo ufw allow 'Nginx Full' # sudo ufw enable - активувати файрвол sudo ufw enable
Ці команди встановлюють файрвол, дозволяють SSH з'єднання та HTTP/HTTPS трафік для Nginx, а потім активують захист.
Встановлення стеку LEMP
Встановлення Nginx Web Server
Nginx є високопродуктивним веб-сервером, який забезпечує кращу продуктивність та менше споживання ресурсів.
Встановлення Nginx на Debian:
# sudo apt install - встановити пакет з правами адміністратора # nginx - назва пакету веб-сервера Nginx # -y - автоматично підтвердити встановлення sudo apt install nginx -y
Після встановлення запустіть та активуйте Nginx для автоматичного запуску при завантаженні системи:
# sudo systemctl start - запустити службу # nginx - назва служби для запуску sudo systemctl start nginx # sudo systemctl enable - активувати автозапуск служби при завантаженні # nginx - назва служби для активації sudo systemctl enable nginx
Перевірте статус служби:
# sudo systemctl status - перевірити стан служби # nginx - назва служби для перевірки sudo systemctl status nginx
Тестування Nginx можна виконати, відвідавши http://localhost або IP-адресу вашого сервера у веб-браузері.
Встановлення MySQL/MariaDB
MariaDB є сучасною заміною MySQL, яка забезпечує кращу продуктивність та додаткові можливості. Для WordPress рекомендується використовувати саме MariaDB:
# sudo apt install - встановити пакети з правами адміністратора # mariadb-server - серверна частина MariaDB # mariadb-client - клієнтські утиліти для підключення до MariaDB # -y - автоматично підтвердити встановлення sudo apt install mariadb-server mariadb-client -y
Запустіть службу бази даних:
# sudo systemctl start - запустити службу # mariadb - назва служби MariaDB sudo systemctl start mariadb # sudo systemctl enable - активувати автозапуск при завантаженні # mariadb - назва служби для активації sudo systemctl enable mariadb
Виконайте безпечне налаштування MariaDB:
# sudo - виконати з правами адміністратора # mysql_secure_installation - скрипт для налаштування безпеки MariaDB sudo mysql_secure_installation
Під час налаштування встановіть надійний пароль для root-користувача та відповідайте "Y" на всі запитання безпеки.
Встановлення PHP та PHP-FPM
PHP-FPM (FastCGI Process Manager) є оптимальним вибором для роботи з Nginx, забезпечуючи кращу продуктивність та безпеку. Встановіть PHP разом з необхідними модулями:
# sudo apt install - встановити пакети з правами адміністратора # php - основний пакет PHP # php-fpm - FastCGI Process Manager для PHP # php-mysql - модуль для роботи з базами даних MySQL/MariaDB # ... (інші модулі) # -y - автоматично підтвердити встановлення sudo apt install php php-fpm php-mysql php-cli php-common php-zip php-curl php-mbstring php-xml php-gd php-intl php-bcmath -y
# sudo systemctl start - запустити службу # php8.2-fpm - назва служби PHP-FPM (версія може відрізнятися) sudo systemctl start php8.2-fpm # замініть на вашу версію PHP # sudo systemctl enable - активувати автозапуск при завантаженні # php8.2-fpm - назва служби для активації sudo systemctl enable php8.2-fpm
Налаштування бази даних для WordPress
Створення бази даних
Увійдіть до MySQL/MariaDB як root-користувач:
# sudo - виконати з правами адміністратора # mysql - клієнт для підключення до MariaDB # -u root - підключитися як користувач root # -p - запитати пароль при підключенні sudo mysql -u root -p
Створіть окрему базу даних для WordPress:
-- CREATE DATABASE - команда створення нової бази даних -- wordpress_db - назва бази даних для WordPress -- CHARACTER SET utf8mb4 - встановити кодування UTF-8 з підтримкою емодзі -- COLLATE utf8mb4_unicode_ci - встановити правила сортування для Unicode CREATE DATABASE wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Ця команда створює базу даних з назвою wordpress_db та налаштовує кодування UTF-8 для підтримки всіх мов світу.
Створіть окремого користувача для WordPress та надайте йому відповідні привілеї:
-- CREATE USER - команда створення нового користувача -- 'wp_user' - ім'я користувача для WordPress -- @'localhost' - користувач може підключатися тільки з локального сервера -- IDENTIFIED BY 'secure_password' - встановити пароль для користувача CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'secure_password'; -- GRANT ALL PRIVILEGES - надати всі права доступу -- ON wordpress_db.* - до всіх таблиць у базі wordpress_db -- TO 'wp_user'@'localhost' - користувачу wp_user з localhost GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost'; -- FLUSH PRIVILEGES - застосувати зміни прав доступу FLUSH PRIVILEGES; -- EXIT - вийти з MariaDB клієнта EXIT;
Замініть secure_password на надійний пароль, який складається з великих і малих літер, цифр та спеціальних символів.
Завантаження та встановлення WordPress
Завантаження WordPress
Перейдіть до тимчасової директорії та завантажте останню версію WordPress:
# cd - змінити поточну директорію # /tmp - перейти до тимчасової директорії cd /tmp # wget - утиліта для завантаження файлів з Інтернету # [https://wordpress.org/latest.tar.gz](https://wordpress.org/latest.tar.gz) - URL останньої версії WordPress wget [https://wordpress.org/latest.tar.gz](https://wordpress.org/latest.tar.gz)
Команда wget завантажує файли з Інтернету, а cd змінює поточну директорію.
Розархівуйте завантажений файл:
# tar - утиліта для роботи з архівами # x - розархівувати файли # z - обробляти gzip стиснення # v - показувати процес розархівування (verbose) # f - вказати файл архіву # latest.tar.gz - назва файлу для розархівування tar xzvf latest.tar.gz
Скопіюйте файли WordPress до кореневої директорії веб-сервера:
# sudo - виконати з правами адміністратора # cp - команда копіювання файлів # -R - копіювати рекурсивно (включно з підпапками) # wordpress/* - всі файли з папки wordpress # /var/www/html/ - директорія призначення (корінь веб-сервера) sudo cp -R wordpress/* /var/www/html/
Встановіть правильні дозволи для файлів:
# sudo chown - змінити власника файлів # -R - рекурсивно для всіх файлів і папок # www-data:www-data - встановити власника та групу www-data # /var/www/html/ - директорія для зміни власника sudo chown -R www-data:www-data /var/www/html/ # sudo find - знайти файли та папки з правами адміністратора # /var/www/html/ - директорія для пошуку # -type d - шукати тільки директорії (папки) # -exec chmod 755 {} \; - виконати chmod 755 для кожної знайденої папки # 755 - дозволи: власник може все, інші тільки читати та виконувати sudo find /var/www/html/ -type d -exec chmod 755 {} \; # sudo find - знайти файли з правами адміністратора # /var/www/html/ - директорія для пошуку # -type f - шукати тільки файли (не папки) # -exec chmod 644 {} \; - виконати chmod 644 для кожного знайденого файлу # 644 - дозволи: власник може читати та писати, інші тільки читати sudo find /var/www/html/ -type f -exec chmod 644 {} \;
Ці команди встановлюють власника файлів (www-data - користувач веб-сервера) та правильні дозволи.
Створення конфігураційного файлу
Скопіюйте зразок конфігураційного файлу:
# cd - змінити поточну директорію # /var/www/html/ - перейти до кореневої директорії сайту cd /var/www/html/ # sudo cp - скопіювати файл з правами адміністратора # wp-config-sample.php - зразок конфігураційного файлу WordPress # wp-config.php - основний конфігураційний файл WordPress sudo cp wp-config-sample.php wp-config.php
Відредагуйте конфігураційний файл за допомогою текстового редактора:
# sudo nano - відкрити текстовий редактор з правами адміністратора # wp-config.php - файл для редагування sudo nano wp-config.php
Змініть наступні рядки відповідно до створеної бази даних:
// define - функція PHP для визначення константи // 'DB_NAME' - назва константи для імені бази даних // 'wordpress_db' - значення константи (назва вашої бази даних) define('DB_NAME', 'wordpress_db'); // 'DB_USER' - константа для імені користувача бази даних // 'wp_user' - ім'я користувача, створеного для WordPress define('DB_USER', 'wp_user'); // 'DB_PASSWORD' - константа для пароля бази даних // 'secure_password' - пароль користувача бази даних define('DB_PASSWORD', 'secure_password'); // 'DB_HOST' - константа для адреси сервера бази даних // 'localhost' - база даних знаходиться на цьому ж сервері define('DB_HOST', 'localhost');
Налаштування Nginx Server Blocks
Створення Server Block
Nginx використовує Server Blocks для обслуговування кількох доменів.
Створіть новий файл конфігурації для вашого домену:
# sudo nano - відкрити редактор з правами адміністратора # /etc/nginx/sites-available/ - директорія для конфігурацій сайтів # your-domain.com - назва файлу конфігурації (замініть на ваш домен) sudo nano /etc/nginx/sites-available/your-domain.com
Додайте наступну конфігурацію для WordPress з Nginx:
server { # server - початок блоку конфігурації сервера listen 80; listen [::]:80; server_name your-domain.com [www.your-domain.com](https://www.your-domain.com); root /var/www/html; index index.php index.html index.htm; # Логування access_log /var/log/nginx/your-domain.com-access.log; error_log /var/log/nginx/your-domain.com-error.log; # Основний location block location / { try_files $uri $uri/ /index.php$is_args$args; } # Обробка PHP файлів через PHP-FPM location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } # Заборона доступу до системних файлів location ~ /\.ht { deny all; } # Оптимізація статичних файлів location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ { expires 1y; add_header Cache-Control "public, immutable"; log_not_found off; } # WordPress специфічні налаштування location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } # Захист від доступу до конфігураційних файлів location ~* \.(conf|engine|inc|info|install|make|module|profile|test|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(\..*|Entries.*|Repository|Root|Tag|Template)$|\.php_ { deny all; } }
Ця конфігурація визначає, як Nginx обробляє запити до вашого сайту.
Активуйте новий сайт створивши символічне посилання:
Ці налаштування визначають, скільки процесів PHP запускати та які ліміти встановити.
Оновіть конфігурацію Nginx для використання нового пулу:
location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm-wordpress.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
Перезапустіть PHP-FPM:
# sudo systemctl restart - перезапустити службу # php8.2-fpm - назва служби PHP-FPM sudo systemctl restart php8.2-fpm
Завершення встановлення WordPress
Веб-інтерфейс налаштування
Відкрийте веб-браузер та перейдіть за адресою вашого домену. Ви побачите екран початкового налаштування WordPress.
Виберіть мову інтерфейсу та введіть інформацію про сайт:
Назва сайту
Ім'я користувача адміністратора
Надійний пароль
Email адресу адміністратора
Після завершення налаштування ви зможете увійти до панелі адміністратора WordPress за адресою http://your-domain.com/wp-admin/.
Налаштування безпеки WordPress
Захист файлу wp-config.php
Файл wp-config.php містить критично важливу інформацію про ваш сайт. На відміну від інших веб-серверів, Nginx не використовує .htaccess файли, тому захист конфігурується безпосередньо в server block:
# Заборона доступу до wp-config.php location ~* wp-config\.php { deny all; } # Заборона доступу до логів та конфігураційних файлів location ~* \.(log|conf)$ { deny all; }
Приховування версії Nginx
Додайте до основної конфігурації Nginx:
# sudo nano - відкрити редактор з правами адміністратора # /etc/nginx/nginx.conf - основний файл конфігурації Nginx sudo nano /etc/nginx/nginx.conf
Налаштуйте автоматичне поновлення сертифікатів через cron:
# sudo crontab -e - редагувати розклад завдань для root користувача sudo crontab -e
Додайте наступний рядок для перевірки поновлення щодня о 12:00:
# 0 12 * * * - час виконання (хвилина година день місяць день_тижня) # /usr/bin/certbot renew - команда поновлення сертифікатів # --quiet - тихий режим (без виводу, якщо все добре) 0 12 * * * /usr/bin/certbot renew --quiet
Повна оптимізація WordPress з Nginx
Налаштування FastCGI кешування
FastCGI кеш є однією з найефективніших методик оптимізації для Nginx з PHP.
Додайте до конфігурації Nginx:
http { # Налаштування FastCGI кешу fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=WORDPRESS:100m inactive=60m; fastcgi_cache_key "$scheme$request_method$host$request_uri"; fastcgi_cache_use_stale error timeout invalid_header http_500; fastcgi_ignore_headers Cache-Control Expires Set-Cookie; } server { # Змінні для управління кешуванням set $skip_cache 0; # Виключення кешування для POST запитів if ($request_method = POST) { set $skip_cache 1; } # Виключення кешування для URL з параметрами if ($query_string != "") { set $skip_cache 1; } # Виключення кешування для адмін панелі if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") { set $skip_cache 1; } # Виключення кешування для залогінених користувачів if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") { set $skip_cache 1; } # Налаштування кешування для PHP location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.2-fpm.sock; # FastCGI кеш fastcgi_cache WORDPRESS; fastcgi_cache_valid 200 60m; fastcgi_cache_valid 404 1m; add_header X-Cache $upstream_cache_status; fastcgi_cache_bypass $skip_cache; fastcgi_no_cache $skip_cache; } }
Створіть директорію для кешу:
# sudo mkdir - створити директорію з правами адміністратора # -p - створити всі необхідні батьківські директорії # /var/cache/nginx - шлях до директорії кешу sudo mkdir -p /var/cache/nginx # sudo chown - змінити власника директорії # www-data:www-data - встановити власника та групу www-data sudo chown www-data:www-data /var/cache/nginx
# sudo chmod - змінити права доступу до файлу # +x - додати право на виконання # /usr/local/bin/clear-nginx-cache.sh - шлях до скрипту sudo chmod +x /usr/local/bin/clear-nginx-cache.sh
Резервне копіювання та обслуговування
Стратегія резервного копіювання
Створіть скрипт для автоматичного резервного копіювання з урахуванням Nginx конфігурації:
# sudo nano - створити новий скрипт резервного копіювання sudo nano /usr/local/bin/wp-backup.sh
#!/bin/bash # Змінні DB_NAME="wordpress_db" DB_USER="wp_user" DB_PASSWORD="secure_password" WP_PATH="/var/www/html" NGINX_PATH="/etc/nginx" BACKUP_PATH="/backups/wordpress" DATE=$(date +%Y%m%d_%H%M%S) # Створення директорії для бекапів mkdir -p $BACKUP_PATH # Резервне копіювання бази даних mysqldump -u$DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_PATH/database_$DATE.sql # Резервне копіювання файлів WordPress tar -czf $BACKUP_PATH/wordpress_files_$DATE.tar.gz -C $WP_PATH . # Резервне копіювання конфігурації Nginx tar -czf $BACKUP_PATH/nginx_config_$DATE.tar.gz -C $NGINX_PATH . # Видалення старих бекапів (старших за 30 днів) find $BACKUP_PATH -type f -name "*.sql" -mtime +30 -delete find $BACKUP_PATH -type f -name "*.tar.gz" -mtime +30 -delete echo "Backup completed: $DATE"
Ця помилка часто виникає через проблеми з PHP-FPM. Перевірте:
Статус PHP-FPM:
sudo systemctl status php8.2-fpm
Правильність шляху до сокета в конфігурації Nginx.
Дозволи на сокет PHP-FPM:
# ls - показати список файлів з деталями # -la - показати всі файли з детальною інформацією # /run/php/ - директорія з PHP-FPM сокетами ls -la /run/php/
Помилка 413 Request Entity Too Large
Збільште ліміти завантаження у Nginx:
server { client_max_body_size 64M; }
Проблеми з постійними посиланнями
Nginx потребує ручного налаштування rewrite правил. Переконайтеся, що у вашій конфігурації є:
# sudo chown - змінити власника рекурсивно для всіх файлів # www-data:www-data - встановити власника та групу sudo chown -R www-data:www-data /var/cache/nginx # sudo chmod - змінити дозволи рекурсивно # 755 - дозволи читання, запису, виконання для власника та читання, виконання для інших sudo chmod -R 755 /var/cache/nginx
Очистіть кеш:
# sudo rm - видалити файли з правами адміністратора # -rf - рекурсивно та принудово # /var/cache/nginx/* - всі файли кешу sudo rm -rf /var/cache/nginx/* # sudo systemctl reload - перезавантажити конфігурацію без зупинки сервісу sudo systemctl reload nginx
Проблеми з SSL
Перевірте конфігурацію SSL:
sudo nginx -t sudo certbot certificates
Якщо сертифікат не оновлюється автоматично:
# sudo certbot renew - оновити сертифікати # --dry-run - тестовий режим без реальних змін # --nginx - використовувати плагін Nginx sudo certbot renew --dry-run --nginx
Висновок
Розгортання WordPress на Debian з Nginx забезпечує високу продуктивність та надійність завдяки перевагам стеку LEMP. Nginx демонструє значно кращі показники продуктивності, особливо при високому навантаженні, завдяки ефективній архітектурі обробки подій.
Ключові переваги Nginx для WordPress:
Продуктивність: Nginx споживає менше пам'яті та процесорних ресурсів, обробляючи тисячі одночасних з'єднань з мінімальними витратами ресурсів.
FastCGI кешування забезпечує значне прискорення роботи сайту, зменшуючи навантаження на PHP та базу даних.
Масштабованість: Архітектура Nginx дозволяє легко масштабувати додаток для обслуговування мільйонів запитів на день без значної деградації продуктивності.
Безпека: Централізоване управління конфігурацією на рівні сервера підвищує безпеку, оскільки всі налаштування контролюються адміністратором.
Гнучкість: Server blocks Nginx надають більше можливостей для налаштування, дозволяючи створювати складні правила маршрутизації та обробки запитів.
Правильно налаштований WordPress з Nginx на Debian може забезпечувати час відповіді менше 100 мілісекунд навіть при високому навантаженні.
Регулярне обслуговування, моніторинг та оновлення гарантують, що ваш сайт залишатиметься швидким, безпечним та стабільним протягом тривалого часу.
Оцініть статтю за 5-бальною шкалою
Будь першим, хто оцінить цю новину!
Найшли помилку? Виділіть її та натисніть Ctrl + Enter, щоб повідомити нас.