Установка двух экземпляров WordPress на 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.
Если понравилась статья, подпишись на мой канал в VK или Telegram .