Skip to content

This article is available in Russian. An English version is on the way.Open the Russian page

WordPress на Nginx, PHP-FPM и MariaDB

Установить WordPress вручную на LEMP: база, файлы, wp-config, права, HTTPS и отправка писем.

Level
Intermediate
Reading time
3 min read
Updated
Tested on
Ubuntu 22.04, Ubuntu 24.04, Debian 12
Contents
  1. Пакеты
  2. База данных
  3. Файлы WordPress
  4. Права
  5. Nginx
  6. Письма из WordPress
  7. Проверьте результат
  8. Частые ошибки

Статья собирает стек LEMP (Linux, Nginx, MariaDB, PHP) под один сайт WordPress. Домен уже должен указывать на сервер.

Пакеты

bash
$ apt update$ apt install -y nginx mariadb-server php-fpm php-mysql php-curl php-gd php-intl php-mbstring php-xml php-zip php-imagick unzip$ mariadb-secure-installation

На Ubuntu 22.04 скрипт называется mysql_secure_installation. Удалите анонимных пользователей и тестовую базу, запретите удалённый вход root.

База данных

bash
$ mariadb
sql
CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;CREATE USER 'wp'@'localhost' IDENTIFIED BY 'надёжный-пароль';GRANT ALL PRIVILEGES ON wordpress.* TO 'wp'@'localhost';FLUSH PRIVILEGES;EXIT;

Файлы WordPress

bash
$ cd /tmp$ curl -LO https://wordpress.org/latest.tar.gz$ tar xzf latest.tar.gz$ mkdir -p /var/www/example.com$ cp -a wordpress/. /var/www/example.com/$ cp /var/www/example.com/wp-config-sample.php /var/www/example.com/wp-config.php

Впишите параметры базы в wp-config.php и замените блок ключей безопасности на свежий — его выдаёт официальный генератор:

bash
$ curl -s https://api.wordpress.org/secret-key/1.1/salt/$ nano /var/www/example.com/wp-config.php
wp-config.php
define( 'DB_NAME', 'wordpress' );define( 'DB_USER', 'wp' );define( 'DB_PASSWORD', 'надёжный-пароль' );define( 'DB_HOST', 'localhost' );define( 'DISALLOW_FILE_EDIT', true );

DISALLOW_FILE_EDIT отключает редактор тем и плагинов в админке — если пароль администратора утечёт, через него не получится записать код на сервер.

Права

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

Nginx

/etc/nginx/sites-available/example.com — сокет подставьте по своей версии PHP
server {    listen 80;    listen [::]:80;    server_name example.com www.example.com;    root /var/www/example.com;    index index.php;    client_max_body_size 32m;    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 = /xmlrpc.php { deny all; }    location ~ /\. { deny all; }    location ~* /uploads/.*\.php$ { deny all; }}

Nginx проверяет блоки с регулярными выражениями по порядку, поэтому запрет на PHP в uploads сработает, только если стоит выше общего блока для .php. Перенесите его наверх, если хотите включить эту защиту.

bash
$ ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/$ rm -f /etc/nginx/sites-enabled/default$ nginx -t && systemctl reload nginx$ apt install -y certbot python3-certbot-nginx$ certbot --nginx -d example.com -d www.example.com

Откройте https://example.com и пройдите мастер установки: название сайта, логин администратора (не admin) и пароль.

Письма из WordPress

Проверьте результат

  • В админке: Инструменты → Здоровье сайта — нет критичных проблем.
  • curl -I https://example.com возвращает 200 или 301 на канонический адрес.
  • Загрузка картинки в медиатеку проходит без ошибки прав.

Частые ошибки

  • «Error establishing a database connection» — неверные данные в wp-config.php или не запущена MariaDB (systemctl status mariadb).
  • WordPress просит данные FTP при установке плагина — у каталога сайта владелец не www-data.
  • После включения HTTPS бесконечный редирект — в «Настройки → Общие» адрес сайта указан с http://.

Read to the end and the article counts toward your learning progress.

  • WordPress
  • CMS
  • LEMP
  • PHP
  • MariaDB
  • сайт

Was this article helpful?