Поиск по сайту:

Как настроить мультисайт WordPress с помощью Nginx в Ubuntu 14.04


Введение

Многосайтовая функция WordPress предлагает возможность создавать несколько веб-сайтов из одной установки WordPress. Каждый сайт может иметь отдельную тему, набор плагинов и набор контента (посты и страницы). Это снижает накладные расходы на обслуживание и обновление нескольких установок WordPress, позволяя вам размещать несколько сайтов, которые совершенно не связаны друг с другом.

Мультисайт WordPress бывает двух видов: подкаталог или поддомен. В этом уроке мы настроим мультисайт WordPress для использования поддоменов. Это означает, что сайты, которые мы создаем, будут иметь веб-адрес субдомена, такой как http://wp-site.net, чтобы каждый сайт выглядел независимым снаружи.

Предпосылки

Этот учебник требует, чтобы пользователь знал следующее:

  • Экраны администрирования сети WordPress
  • Основы мультисайтов WordPress

Мы создадим три сайта WordPress со следующими доменными именами:

  • Сайт 1:
    Домен: examplewp.com (основной домен)
    Это сайт, который создается при установке WordPress.
  • Сайт 2:
    Внешний домен: shoppingsite.com
    Субдомен: shoppingsite.example.com
  • Сайт 3:
    Внешний домен: companysite.org
    Субдомен: companysite.example.com

Первый домен — это основное доменное имя, через которое будет установлен WordPress. Обязательно настройте DNS для всех трех доменов, чтобы они указывали на IP-адрес дроплета, на котором будет размещаться WordPress.

Шаг 1. Настройка DNS-записей с подстановочными знаками

В этом разделе мы добавим подстановочную запись DNS для основного домена, чтобы в любое время можно было добавить больше сайтов без необходимости использования отдельных записей A. (Кроме того, вы можете добавить новую запись A для каждого поддомена.)

Примечание. Это необходимо сделать только для *основного домена (examplewp.com в этом руководстве).

Войдите в панель управления DigitalOcean и перейдите в раздел «Сеть». Отредактируйте основной домен и создайте подстановочную запись A для этого домена, указывающую на IP-адрес дроплета. Запись с подстановочными знаками создается путем ввода звездочки (*) в поле ввода имени хоста, как показано на снимке экрана ниже.

Если вы размещаете DNS своего домена в другом месте, вам следует вместо этого установить запись с подстановочными знаками.

Что вы должны увидеть сейчас:

DNS-запросы для любого random-sub-domain.examplewp.com должны возвращать IP-адрес вашего дроплета.

Шаг второй — установка и настройка стека LEMP

В этом разделе мы установим и настроим Nginx, MySQL и PHP. Существует подробная статья о настройке стека LEMP, на которую вы можете сослаться, если хотите. Этот раздел послужит быстрой настройкой. В образе Ubuntu 14.04 также есть LEMP на вкладке «Приложения» в разделе «Выбор изображения» при создании капли.

Обновите репозитории и установите Nginx, MySQL, PHP5-FPM и другие необходимые модули PHP.

apt-get update
apt-get install -y nginx mysql-server php5-fpm php5-mysql php5-curl php5-mcrypt php5-gd

При установке сервера MySQL вам будет предложено ввести пароль для пользователя базы данных root. Пожалуйста, введите надежный пароль и не оставляйте его пустым. Вы введете пароль дважды.

Создайте корень документа для Nginx, в котором будут храниться файлы WordPress. В этом руководстве мы будем использовать /usr/share/nginx/wordpress.

mkdir /usr/share/nginx/wordpress

Мы заменим виртуальный хост Nginx по умолчанию нашим собственным, поэтому удалите его символическую ссылку в каталоге с поддержкой сайтов.

rm /etc/nginx/sites-enabled/default

Создайте новый файл виртуального хоста в каталоге, доступном для сайтов. Этот файл может называться как угодно. В нашем примере мы назовем его wp-ms.

nano /etc/nginx/sites-available/wp-ms

Отредактируйте этот файл и поместите следующую конфигурацию. Отредактируйте текст, выделенный красным, в соответствии с вашей средой. В строке server_name вы должны добавить все три (или более) мультисайтовых домена и поддомен с подстановочным знаком для первого домена.

server {
    listen [::]:80 ipv6only=off;
    server_name examplewp.com *.examplewp.com shoppingsite.com companysite.org;

    root /usr/share/nginx/wordpress;
    index index.php index.html index.htm;

    location / {
	    try_files $uri $uri/ /index.php?$args ;
    }

    location ~ /favicon.ico {
        access_log off;
        log_not_found off;
    }

    location ~ \.php$ {
        try_files $uri /index.php;
		include fastcgi_params;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
	}

	access_log	/var/log/nginx/$host-access.log;
	error_log	/var/log/nginx/wpms-error.log;
}

Если в этой капле будет размещена только эта установка WordPress, директивы listen и server_name можно изменить на следующие:

listen [::]:80 default_server ipv6only=off;
server_name examplewp.com *.examplewp.com;

Использование переменной $host в директиве access_log создает отдельные файлы журнала для каждого домена, такие как examplewp.com-access.log и >shoppingsite.com-access.log. Использовать такие переменные для директивы error_log невозможно, поэтому все ошибки регистрируются в одном файле.

Сохраните этот файл и создайте символическую ссылку на этот файл в каталоге с поддержкой сайтов.

ln -s /etc/nginx/sites-available/wp-ms /etc/nginx/sites-enabled/wp-ms

Выполните тест конфигурации Nginx и перезапустите, если он возвращает OK.

service nginx configtest
service nginx restart

Шаг третий — создайте базу данных MySQL и пользователя для WordPress

В этом разделе мы создадим базу данных MySQL для WordPress и пользователя с разрешениями только для этой базы данных.

Войдите в командную строку MySQL как пользователь root.

mysql -u root -p

Создайте базу данных.

CREATE DATABASE wordpress;

Создайте пользователя MySQL и предоставьте права доступа к этой базе данных:

CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress_user'@'localhost';

Замените слово пароль надежным паролем. Сбросьте привилегии и выйдите из командной строки MySQL.

FLUSH PRIVILEGES;
exit

Запишите эти детали, так как они понадобятся в четвертом шаге.

Имя базы данных: wordpress

Более подробную информацию о пользователях MySQL можно найти в этой статье.

Шаг четвертый — скачайте и установите WordPress

В этом разделе мы загрузим последнюю версию WordPress и установим ее. Это будет наш первый сайт, examplewp.com.

Загрузите и распакуйте WordPress.

wget http://wordpress.org/latest.tar.gz
tar -xf latest.tar.gz

Переместите извлеченные файлы в корень документа.

mv wordpress/* /usr/share/nginx/wordpress/

Назначьте владельца пользователю www-data. Это важно для загрузки мультимедиа и для работы обновлений ядра/плагина/темы в WordPress.

chown -R www-data:www-data /usr/share/nginx/wordpress

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

http://examplewp.com/

При необходимости вы можете добавить суффикс \www к URL-адресу. Нажмите кнопку «Создать файл конфигурации», а затем кнопку «Поехали!». Заполните данные базы данных (используйте информацию из третьего шага) и нажмите «Отправить».

На этом этапе WordPress установит соединение с базой данных, чтобы проверить введенные учетные данные. После успешного подключения появится кнопка «Выполнить установку». Нажмите здесь. Заполните форму «Необходимая информация», чтобы настроить название сайта, имя пользователя, пароль и адрес электронной почты, а затем нажмите «Установить WordPress». В целях безопасности рекомендуется выбирать нестандартное имя пользователя.

Шаг пятый — включите мультисайт и создайте дополнительные сайты

В этом разделе мы включим WordPress Multisite и создадим два дополнительных сайта, упомянутых в разделе «Предварительные требования» этой статьи.

Страница настройки сети.

Отредактируйте файл wp-config.php:

nano /usr/share/nginx/wordpress/wp-config.php

Добавьте следующий код перед комментарием /* Вот и все, прекратите редактирование! Удачного ведения блога. */:

/* Multisite settings */
define( 'WP_ALLOW_MULTISITE', true );

Мы будем редактировать этот файл еще несколько раз в течение этого урока. Не стесняйтесь добавлять все новые строки в только что созданный раздел /* Multisite settings */.

Сохраните файл. Войдите в панель администратора WordPress и перейдите в Инструменты > Настройка сети. Выберите параметр «Поддомены», измените название сети по желанию и нажмите «Установить».

Вам будут представлены два блока кода, которые нужно добавить в файлы wp-config.php и .htaccess. Скопируйте код wp-config.php, который выглядит примерно так:

define('MULTISITE', true);
define('SUBDOMAIN_INSTALL', true);
define('DOMAIN_CURRENT_SITE', 'examplewp.com');
define('PATH_CURRENT_SITE', '/');
define('SITE_ID_CURRENT_SITE', 1);
define('BLOG_ID_CURRENT_SITE', 1);

Отредактируйте файл wp-config.php.

nano /usr/share/nginx/wordpress/wp-config.php

Добавьте эти строки перед комментарием /* Вот и все, прекратите редактирование! Удачного ведения блога. */ и сохраните его. Код, отображаемый для .htaccess, можно игнорировать, так как Nginx не имеет этого файла.

Выйдите из панели администратора WordPress и войдите снова. На панели инструментов администратора в левом верхнем углу выберите Мои сайты > Администратор сети > Сайты.

Нажмите кнопку «Добавить новый», чтобы открыть форму «Добавить новый сайт». На следующем снимке экрана показаны заполненные данные для сайта покупок в нашем примере. Введенный адрес сайта будет формировать поддомен этого сайта.

Нажмите «Добавить сайт», и созданный сайт будет доступен через http://shoppingsite.examplewp.com.

Повторите эти шаги, чтобы создать второй сайт (companysite.examplewp.com в нашем примере).

Что вы должны увидеть сейчас:

Следующие три сайта WordPress:

  • examplewp.com
  • shoppingsite.examplewp.com
  • companysite.examplewp.com

У каждого из них будет свой контент, тема и активный набор плагинов.

Шаг шестой — настройка сопоставления доменов

В этом разделе мы дадим вам возможность использовать отдельное доменное имя для каждого сайта WordPress, загрузив и включив плагин WordPress MU Domain Mapping. Этот плагин позволяет пользователям WordPress Multisite сопоставлять свой блог/сайт с другим доменом.

Войдите в свою каплю через SSH и загрузите плагин WordPress MU Domain Mapping. Сначала установите команду unzip, а затем распакуйте подключаемый модуль.

wget http://downloads.wordpress.org/plugin/wordpress-mu-domain-mapping.latest-stable.zip
apt-get install unzip
unzip wordpress-mu-domain-mapping.latest-stable.zip

Переместите извлеченные файлы в каталог плагинов WordPress.

mv wordpress-mu-domain-mapping /usr/share/nginx/wordpress/wp-content/plugins/

Скопируйте файл Sunrise.php из каталога плагина в каталог wp-content.

cp /usr/share/nginx/wordpress/wp-content/plugins/wordpress-mu-domain-mapping/sunrise.php /usr/share/nginx/wordpress/wp-content/

Отредактируйте файл wp-config.php и добавьте следующую строку перед комментарием /* Вот и все, прекратите редактирование! Удачного ведения блога. */.

Файл: /usr/share/nginx/wordpress/wp-config.php

define('SUNRISE', 'on');

Сохраните этот файл и вернитесь в веб-браузер. На панели инструментов WordPress перейдите в «Мои сайты» > «Сетевой администратор» > «Плагины».

Нажмите ссылку «Активировать сеть» под плагином WordPress MU Domain Mapping. Перейдите в «Настройки» > «Сопоставление домена» и внесите следующие изменения в параметры домена:

  • Снимите флажок Удаленный вход.
  • Проверьте постоянное перенаправление
  • Снимите флажок Перенаправлять административные страницы на исходный домен сайта.

Нажмите «Сохранить». Эти настройки перенаправляют все запросы к поддоменам (например, companysite.org), включая страницы администрирования (/wp-admin).

На следующем шаге мы будем сопоставлять доменное имя с каждым сайтом на основе его идентификатора сайта. Есть много способов найти идентификатор сайта, но для упрощения администрирования мы создадим простой обязательный плагин WordPress, который отображает дополнительный столбец идентификатора на странице «Сайты».

Войдите в свою каплю через SSH и создайте каталог mu-plugins.

mkdir /usr/share/nginx/wordpress/wp-content/mu-plugins

Создайте файл PHP внутри этого каталога и вставьте следующий код:

nano /usr/share/nginx/wordpress/wp-content/mu-plugins/wpms_blogid.php

Вы можете точно скопировать этот контент:

<?php
add_filter( 'wpmu_blogs_columns', 'do_get_id' );
add_action( 'manage_sites_custom_column', 'do_add_columns', 10, 2 );
add_action( 'manage_blogs_custom_column', 'do_add_columns', 10, 2 );

function do_add_columns( $column_name, $blog_id ) {
    if ( 'blog_id' === $column_name )
	    echo $blog_id;
    return $column_name;
}

function do_get_id( $columns ) {
	$columns['blog_id'] = 'ID';
	return $columns;
}

В разделе «Сайты» > «Все сайты» теперь должен отображаться дополнительный столбец идентификатора.

Запишите значения ID для каждого сайта и перейдите на страницу Настройки > Домены. Введите идентификатор сайта, а затем внешний домен сайта. Например, поскольку идентификатор сайта компании равен 3, на этой странице идентификатор сайта должен быть равен 3, а домен — companysite.org.

Вы можете добавить префикс \www, если хотите установить URL-адрес сайта как www.companysite.org. Повторите эти шаги для других доменов. Нажмите Сохранить внизу страницы.

Что вы должны увидеть сейчас:

Каждый сайт будет иметь собственное доменное имя вместо поддомена; то есть ввод http://companysite.org. Вы должны увидеть изменение названия сайта в верхнем левом углу страницы.

Теперь каждый сайт можно вести отдельно через собственную панель администратора WordPress:

http://examplewp.com/wp-admin/
http://shoppingsite.com/wp-admin/
http://companysite.org/wp-admin/

Обновления ядра/плагинов/тем и установка плагинов/тем должны выполняться со страницы сетевого администрирования основного домена:

http://examplewp.com/wp-admin/network/

дальнейшее чтение

  • Настройка мультисайта WordPress на Apache
  • Не используйте мультисайт WordPress от Мики Эпштейн
  • Администрирование нескольких сайтов WordPress