Установка двух экземпляров WordPress на Nginx

В этой статье я покажу как установить несколько экземпляров WordPress на физический или виртуальный сервер Debian 13. А в качестве web-сервера будем использовать Nginx.

Введение

Перед разворачиванием боевого WordPress, хочется с ним познакомится поближе. Для этого его можно развернуть у себя на виртуалке или на физическом сервере. В этой статье я показываю, как можно установить 2 экземпляра WordPress на одном сервере Debian 13. Например, на первом можно изучать создание Интернет Магазина, а на втором создание Личного Блога. По аналогии вы можете создать третий и четвертый экземпляр.

WordPress для своей работы требует:

  • веб сервер (Apache 2 или Nginx), в этой статье мы будем использовать Nginx;
    • дли использования Apache 2 у меня есть отдельная статья ;
  • интерпретатор языка PHP;
  • сервер баз данных MariaDB.

Все команды в статье выполняются от пользователя с правами sudo.

Подготовка сервера

Обновим кеш пакетов и устанавливаем Nginx:

sudo apt update && \
  sudo apt install nginx

Подготавливаем каталоги для разных экземпляров WordPress:

sudo mkdir /var/www/{wp1,wp2}

Устанавливаю PHP. Для Nginx потребуется php-fpm, для базы данных php-mysql, также потребуются дополнительные модули для работы WordPress:

sudo apt install php-fpm php-mysql php-curl \
  php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip

Выполним проверку версии PHP:

php -v

Вы должны увидеть что-то вроде этого:

PHP 8.4.21 (cli) (built: May  8 2026 05:56:48) (NTS)
Copyright (c) The PHP Group
Built by Debian
Zend Engine v4.4.21, Copyright (c) Zend Technologies
    with Zend OPcache v8.4.21, Copyright (c), by Zend Technologies

Перезапустим службу php-fpm и посмотрим запустилась ли она:

sudo systemctl restart php8.4-fpm.service && \
  systemctl status php8.4-fpm.service

Подготавливаем конфигурацию Nginx:

sudo nano /etc/nginx/sites-available/wp1
server {
    listen 80;
    listen [::]:80;
    root /var/www/wp1;
    index index.php index.html index.htm;
    server_name wp1.ru;
    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.4-fpm.sock;
    }
    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt { log_not_found off; access_log off; allow all; }
    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }
}

Второй конфиг:

sudo nano /etc/nginx/sites-available/wp2
server {
    listen 80;
    listen [::]:80;
    root /var/www/wp2;
    index index.php index.html index.htm;
    server_name wp2.ru;
    location / {
        try_files $uri $uri/ /index.php$is_args$args;
    }
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.4-fpm.sock;
    }
    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt { log_not_found off; access_log off; allow all; }
    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }
}

В конфигах я указываю что:

  • оба сайта работают на 80 порте,
  • корень для каждого сайта (/var/www/wp1 и /var/www/wp2),
  • название каждого сайта (wp1.ru и wp2.ru),
  • подключение к php (/var/run/php/php8.4-fpm.sock),
  • первая индексная страница это index.php.

Включаю данные конфигурации и выключаю дефолтную, проверяю все ли я сделал правильно и перезапускаю веб-сервер:

sudo ln -s /etc/nginx/sites-available/wp1 /etc/nginx/sites-enabled/ && \
  sudo ln -s /etc/nginx/sites-available/wp2 /etc/nginx/sites-enabled/ && \
  sudo rm /etc/nginx/sites-enabled/default && \
  sudo nginx -t && sudo systemctl restart nginx

Убедимся, что служба Nginx успешно запустилась:

systemctl status nginx

Устанавливаем MariaDB:

sudo apt install mariadb-server

Убедимся, что служба MariaDB успешно запустилась:

systemctl status mariadb

Выполняем базовую настройку безопасности MariaDB:

sudo mariadb-secure-installation

Подключаемся к консоли MariaDB:

sudo mariadb

В консоли создаём две базы, для первого и второго экземпляра WordPress:

CREATE DATABASE wp1 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL ON wp1.* TO 'wp_user1'@'localhost' IDENTIFIED BY 'pass1';
FLUSH PRIVILEGES;
CREATE DATABASE wp2 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
GRANT ALL ON wp2.* TO 'wp_user2'@'localhost' IDENTIFIED BY 'pass2';
FLUSH PRIVILEGES;
exit
  • База данных wp1, пользователь wp_user1, пароль pass1;
  • База данных wp2, пользователь wp_user2, пароль pass2.

В реальной эксплуатации используйте сложные пароли вместо pass1 и pass2.

Кстати, если у вас будут ошибки, можете смотреть логи: sudo tail -f /var/log/nginx/error.log - ошибки веб-сервера Nginx; sudo journalctl -f -u mariadb - логи сервера баз данных MariaDB.

Установка WordPress

Устанавливаем curl и с её помощью скачиваем последнюю версию WordPress. Затем распаковываем скачанный архив в каталог /tmp:

sudo apt install curl && \
  cd /tmp && \
  curl -O https://wordpress.org/latest.tar.gz && \
  tar xzvf latest.tar.gz

Из файла wp-config-sample.php с помощью копирования делаем wp-config.php:

cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

И создаём каталог для обновлений WordPress. Он будет обновляться напрямую из веб-интерфейса:

mkdir /tmp/wordpress/wp-content/upgrade

Кидаем подготовленный экземпляр WordPress в подготовленные для него каталоги и настраиваем права:

sudo cp -a /tmp/wordpress/. /var/www/wp1
sudo cp -a /tmp/wordpress/. /var/www/wp2
sudo chown -R www-data:www-data /var/www/wp1/
sudo chown -R www-data:www-data /var/www/wp2/
sudo find /var/www/wp1/ -type d -exec chmod 750 {} \;
sudo find /var/www/wp2/ -type d -exec chmod 750 {} \;
sudo find /var/www/wp1/ -type f -exec chmod 640 {} \;
sudo find /var/www/wp2/ -type f -exec chmod 640 {} \;

Получаем ключи WordPress для первой установки, эти ключи нужно будет прописать в конфиг первого экземпляра WordPress:

curl -s https://api.wordpress.org/secret-key/1.1/salt/
sudo nano /var/www/wp1/wp-config.php
define( 'DB_NAME', 'wp1' );
define( 'DB_USER', 'wp_user1' );
define( 'DB_PASSWORD', 'pass1' );
***
define( 'FS_METHOD', 'direct' );
***
# Вставьте сюда свои ключи
define('AUTH_KEY',         ' ');
define('SECURE_AUTH_KEY',  ' ');
define('LOGGED_IN_KEY',    ' ');
define('NONCE_KEY',        ' ');
define('AUTH_SALT',        ' ');
define('SECURE_AUTH_SALT', ' ');
define('LOGGED_IN_SALT',   ' ');
define('NONCE_SALT',       ' ');

В конфиге я указал имя базы данных, логин и пароль для подключения к ней, а также дополнительную опцию define('FS_METHOD', 'direct'); для доступа к файловой системе (это необходимо для закачки обновлений WordPress). Ниже нужно заменить блок ключей полученных ранее.

Получаем ключи для второго WordPress:

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

Настраиваем второй экземпляр WordPress:

sudo nano /var/www/wp2/wp-config.php
define( 'DB_NAME', 'wp2' );
define( 'DB_USER', 'wp_user2' );
define( 'DB_PASSWORD', 'pass2' );
***
define( 'FS_METHOD', 'direct' );
***
# Вставьте сюда свои ключи
define('AUTH_KEY',         ' ');
define('SECURE_AUTH_KEY',  ' ');
define('LOGGED_IN_KEY',    ' ');
define('NONCE_KEY',        ' ');
define('AUTH_SALT',        ' ');
define('SECURE_AUTH_SALT', ' ');
define('LOGGED_IN_SALT',   ' ');
define('NONCE_SALT',       ' ');

Перезагружаем Nginx:

sudo systemctl restart nginx

Настройка hosts для доступа к сайтам

Для доступа к вашим экземплярам WordPress вы должны на своём компьютере в файле hosts прописать две записи, которые будут указывать на ваш сервер.

Этот файл лежит:

  • /etc/hosts - если у вас Linux.
  • C:\Windows\System32\drivers\etc\hosts - если у вас Windows.

В моём случае ip-адрес сервера 192.168.0.10 и записи будут такими:

192.168.0.10 wp1.ru
192.168.0.10 wp2.ru

Таким образом ваш компьютер будет искать сайты wp1.ru и wp2.ru на вашем сервере, а не в Интернете.

Теперь вы можете открыть сайт wp1.ru в браузере и донастроить WordPress из веб-интерфейса. И тоже самое проделать с сайтом wp2.ru.

Из веб интерфейса вам нужно будет указать:

  • язык сайта,
  • имя сайта,
  • логин/пароль админки,
  • ваш email.

Первоначальная настройка WordPress

После чего можно будет зайти в админку и начать эксперименты с WordPress.


Если понравилась статья, подпишись на мой канал в   VK   или   Telegram  .