Задача: Хочу разобрать как настраивается MultiSite on WordPress
Меня давно интересовал функционал от WordPress
о том, как можно управлять множеством сайтов из единой консоли, т.е. не как сейчас у меня для каждого блога своя Консоль, а все соединено в одном месте. Есть как минусы, так и плюсы такого решения. Но для расширения кругозора нужно рассмотреть, как на Ubuntu 22.04 + WordPress
(последний релиз) разворачивается MultiSite.
Можно ли его использовать в боевой эксплуатации. Сейчас я составлю пошаговую заметку по данной задаче.
Тестовые характеристики системы на которой разбираю интересующую меня тему
RAM: 4Gb
CPU: 1 sockets, 2 cores
HDD: 50Gb
OS: Ubuntu 22.04 Server
Виртуальная машина создана на тестовом сервере под управлением Debian 10 + Proxmox 6.4-13
Шаг №1:
Провожу базовую настройку системы для последующего использования:
ekzorchik@srv-us2204a:~$ sudo nano /etc/sudoers.d/ekzorchik ekzorchik ALL=(ALL) NOPASSWD:ALL ekzorchik@srv-us2204a:~$ sudo rm -Rf /var/lib/apt/lists ekzorchik@srv-us2204a:~$ sudo nano /etc/update-manager/release-upgrades [DEFAULT] Prompt=never ekzorchik@srv-us2204a:~$ sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y ekzorchik@srv-us2204a:~$ sudo apt-get install -y mc qemu-guest-agent htop net-tools ekzorchik@srv-us2204a:~$ sudo reboot ekzorchik@srv-us2204a:~$ uname -a && lsb_release -a Linux srv-us2204a 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 22.04.3 LTS Release: 22.04 Codename: jammy ekzorchik@srv-us2204a:~$
Шаг №2:
Настраиваю локаль:
ekzorchik@srv-us2204a:~$ sudo rm -f /etc/localtime ekzorchik@srv-us2204a:~$ sudo ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime ekzorchik@srv-us2204a:~$ sudo locale-gen en_US.UTF-8 Generating locales (this might take a while)... en_US.UTF-8... done Generation complete. ekzorchik@srv-us2204a:~$ echo "LC_ALL="en_US.UTF-8"" | sudo -s tee /etc/default/locale LC_ALL=en_US.UTF-8 ekzorchik@srv-us2204a:~$ echo "LANG="en_US.UTF-8"" | sudo tee -a /etc/default/locale LANG=en_US.UTF-8 ekzorchik@srv-us2204a:~$ echo "LANGUAGE="en.US.UTF-8"" | sudo tee -a /etc/default/locale LANGUAGE=en.US.UTF-8 ekzorchik@srv-us2204a:~$
Шаг №3:
Устанавливаю сервис базы данных, удаляю тестовые базы, создаю базу под WordPress
, создаю пользователя под базу WordPress
и создаю пароль под пользователя WordPress:
ekzorchik@srv-us2204a:~$ sudo apt-get install -y mariadb-server mariadb-client ekzorchik@srv-us2204a:~$ mysql --version mysql Ver 15.1 Distrib 10.6.12-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper ekzorchik@srv-us2204a:~$ ekzorchik@srv-us2204a:~$ mysqld --version mysqld Ver 10.6.12-MariaDB-0ubuntu0.22.04.1 for debian-linux-gnu on x86_64 (Ubuntu 22.04) ekzorchik@srv-us2204a:~$ ekzorchik@srv-us2204a:~$ sudo mysql -u root -e "alter user 'root'@'localhost' identified by '712mbddr@';" ekzorchik@srv-us2204a:~$ sudo mysql -u root ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) ekzorchik@srv-us2204a:~$ sudo mysql -u root -p712mbddr@ -e "show databases"; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ ekzorchik@srv-us2204a:~$ ekzorchik@srv-us2204a:~$ sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf [mysqld] default-authentication-plugin=mysql_native_password ekzorchik@srv-us2204a:~$ sudo systemctl restart mariadb.service && sudo systemctl status mariadb.service | head -n5 ● mariadb.service - MariaDB 10.6.12 database server Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2023-08-23 09:47:30 MSK; 13ms ago Docs: man:mariadbd(8) https://mariadb.com/kb/en/library/systemd/ ekzorchik@srv-us2204a:~$ sudo systemctl is-active ma machine.slice man-db.service man-db.timer mariadb.service mariadb.socket ekzorchik@srv-us2204a:~$ sudo systemctl is-active mariadb.service active ekzorchik@srv-us2204a:~$
Изменяю режим работы mysql:
ekzorchik@srv-us2204a:~$ sudo mysql -u root -p712mbddr@ -e "alter user 'root'@'localhost' identified via mysql_native_password;" ekzorchik@srv-us2204a:~$ sudo mysql -u root -e "set password=password('712mbddr@');" ekzorchik@srv-us2204a:~$ sudo mysql -u root -p712mbddr@ -e "delete from mysql.user where user=''" ekzorchik@srv-us2204a:~$ sudo mysql -u root -p712mbddr@ -e "delete from mysql.user where user='root' and host not in ('localhost','127.0.0.1','::1')" ekzorchik@srv-us2204a:~$ sudo mysql -u root -p712mbddr@ -e "drop database if exists test" ekzorchik@srv-us2204a:~$ sudo mysql -u root -p712mbddr@ -e "delete from mysql.db where db='test' or db='test\\_%'" ekzorchik@srv-us2204a:~$ sudo mysql -u root -p712mbddr@ -e "drop database if exists db_wp" ekzorchik@srv-us2204a:~$ sudo mysql -u root -p712mbddr@ -e "create database db_wp character set utf8 collate utf8_general_ci"; ekzorchik@srv-us2204a:~$ sudo mysql -u root -p712mbddr@ -e "drop user if exists 'us_wp'@'localhost'" ekzorchik@srv-us2204a:~$ sudo mysql -u root -p712mbddr@ -e "create user 'us_wp'@'localhost' identified by '612mbddr@'" ekzorchik@srv-us2204a:~$ sudo mysql -u root -p712mbddr@ -e "grant all on db_wp.* to 'us_wp'@'localhost'"; ekzorchik@srv-us2204a:~$
Шаг №4:
Устанавливаю в систему Ubuntu 22.04 Web
—сервис, в моем случае я предпочитаю nginx:
ekzorchik@srv-us2204a:~$ sudo apt-get install -y nginx ekzorchik@srv-us2204a:~$ sudo systemctl enable nginx Synchronizing state of nginx.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable nginx ekzorchik@srv-us2204a:~$ ekzorchik@srv-us2204a:~$ sudo rm /etc/nginx/sites-enabled/default ekzorchik@srv-us2204a:~$ sudo rm /etc/nginx/sites-available/default ekzorchik@srv-us2204a:~$ sudo rm -f /var/www/html/index.html /var/www/html/index.nginx-debian.html
Шаг №5:
Устанавливаю интерпретатор PHP:
ekzorchik@srv-us2204a:~$ sudo apt install -y php php-{fpm,pear,cgi,common,mbstring,net-socket,gd,xml-util,mysql,bcmath} ekzorchik@srv-us2204a:~$ sudo nano /etc/php/8.1/fpm/php.ini upload_max_filesize = 32M post_max_size = 32M memory_limit = 128M max_execution_time = 300 max_input_time = 60 ;max_input_vars = 1000 ekzorchik@srv-us2204a:~$ sudo nano /etc/php/8.1/fpm/pool.d/www.conf user = www-data group = www-data listen.owner = www-data listen.group = www-data
проверяю внесенные изменения в fpm:
ekzorchik@srv-us2204a:~$ sudo php-fpm8.1 --test [24-Aug-2023 12:17:57] NOTICE: configuration file /etc/php/8.1/fpm/php-fpm.conf test is successful ekzorchik@srv-us2204a:~$ sudo systemctl restart nginx.service php8.1-fpm.service
вместе с пакетами выше была произведена установка apache2
, поэтому выключаю сервис apache2:
ekzorchik@srv-us2204a:~$ sudo systemctl disable apache2.service Synchronizing state of apache2.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install disable apache2 Removed /etc/systemd/system/multi-user.target.wants/apache2.service. ekzorchik@srv-us2204a:~$ ekzorchik@srv-us2204a:~$ sudo netstat -tulpn | grep apache2 ekzorchik@srv-us2204a:~$ php --version PHP 8.1.2-1ubuntu2.13 (cli) (built: Jun 28 2023 14:01:49) (NTS) Copyright (c) The PHP Group Zend Engine v4.1.2, Copyright (c) Zend Technologies with Zend OPcache v8.1.2-1ubuntu2.13, Copyright (c), by Zend Technologies ekzorchik@srv-us2204a:~$
Шаг №6:
Скачиваю с официального сайта wordpress
самую последнюю версию CMS WordPress:
ekzorchik@srv-us2204a:~$ wget wordpress.org/latest.tar.gz ekzorchik@srv-us2204a:~$ tar zxf latest.tar.gz ekzorchik@srv-us2204a:~$ rm -f latest.tar.gz ekzorchik@srv-us2204a:~$ sudo mv wordpress/ /var/www/html/wordpress ekzorchik@srv-us2204a:~$ sudo chown -R www-data:www-data /var/www/html/wordpress/ ekzorchik@srv-us2204a:~$ sudo chmod -R 755 /var/www/html/wordpress/ ekzorchik@srv-us2204a:~$
Шаг №7:
Привожу wp-config.php
к виду для работы с MultiSite:
ekzorchik@srv-us2204a:~$ sudo cp /var/www/html/wordpress/wp-config-sample.php /var/www/html/wordpress/wp-config.php
На заметку: Отобразить содержимое wp-config.php
без комментариев и пустых строк:
cat /var/www/html/wordpress/wp-config.php | grep -v "/***/\|*" | grep -v "^[[:space:]]*$" ekzorchik@srv-us2204a:~$ sudo nano /var/www/html/wordpress/wp-config.php <?php define( 'DB_NAME', 'db_wp' ); define( 'DB_USER', 'us_wp' ); define( 'DB_PASSWORD', '612mbddr@' ); define( 'DB_HOST', 'localhost' ); define( 'DB_CHARSET', 'utf8' ); define( 'DB_COLLATE', '' ); define( 'AUTH_KEY', 'put your unique phrase here1' ); define( 'SECURE_AUTH_KEY', 'put your unique phrase here1a' ); define( 'LOGGED_IN_KEY', 'put your unique phrase here2b' ); define( 'NONCE_KEY', 'put your unique phrase here3c' ); define( 'AUTH_SALT', 'put your unique phrase here4d' ); define( 'SECURE_AUTH_SALT', 'put your unique phrase here5e' ); define( 'LOGGED_IN_SALT', 'put your unique phrase here6f' ); define( 'NONCE_SALT', 'put your unique phrase here7g' ); $table_prefix = 'wp_cms_db'; define( 'WP_DEBUG', false ); if ( ! defined( 'ABSPATH' ) ) { } require_once ABSPATH . 'wp-settings.php';
Шаг №8:
Создаю конфигурацию описывающую поведение nginx
для работы с CMS
сервисом WordPress:
ekzorchik@srv-us2204a:~$ sudo nano /etc/nginx/sites-available/wordpress.conf server { listen 80; server_name 172.33.33.112; root /var/www/html/wordpress; index index.php; access_log /var/log/access-wp.log; error_log /var/log/error-wp.log; location / { try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; gzip on; # gzip_disable "msie6"; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript; location ~ /\. { deny all; } location ~ /.well-known { allow all; } location ~* /(?:uploads|files)/.*\.php$ { deny all; } location ~* ^.+\.(ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|rss|atom|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { access_log off; log_not_found off; expires max; } } } ekzorchik@srv-us2204a:~$ sudo ln -s /etc/nginx/sites-available/wordpress.conf /etc/nginx/sites-enabled/wordpress.conf ekzorchik@srv-us2204a:~$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful ekzorchik@srv-us2204a:~$ sudo systemctl restart nginx php8.1-fpm.service ekzorchik@srv-us2204a:~$ sudo netstat -tulpn | grep :80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3416/nginx: master ekzorchik@srv-us2204a:~$
Шаг №9:
Затем обращаюсь через браузер с основной системы к системе где развернут WordPress
и произвожу окончательную настройку:
http://172.33.33.112/wp-admin/install.php
Язык: выбираю Русский
И нажимаю "Продолжить"
Указываю именование сайта, административный логин и пароль
Название сайта: tips_db_home
Имя пользователя: ekzorchik
Пароль: 712mbddr@
Ваш e-mail: support@ekzorchik.ru
и нажимаю «Установить WordPress»
После чего, вижу
Поздравляем!
WordPress установлен. Желаем успешно работы!
Имя пользователя: ekzorchik
Пароль: Выбранный вами пароль
Нажимаю «Войти» и URL-ссылка в браузере трансформируется в http://172.33.33.112/wp-login.php
И после успешной авторизации
Шаг №10:
Настраиваем WordPress
на работу в режиме Multisite:
ekzorchik@srv-us2204a:~$ sudo nano /var/www/html/wordpress/wp-config.php /* добавляем перед следующим комментария всего лишь одну строку */ define( 'WP_ALLOW_MULTISITE', true); /* That's all, stop editing! Happy publishing. */ ekzorchik@srv-us2204a:~$ sudo systemctl restart nginx php8.1-fpm.service
Перелогиниваемся в развернутый WordPress
под административной записью, в моем случае это учетная запись ekzorchik.
Открываем "Консоль" - Инструменты (Tools) - Установка сети (Network Setup)
Установка в подкаталог: Поскольку ваш сайт установлен в каталог, сайты вашей сети должны использовать подкаталоги.
Адрес сервера: Интернет-адресом вашей сети будет 172.33.33.112.
Название сети: Сайты tips_db_home
E-mail администратора сети: support@ekzorchik.ru
и нажимаю "Установить"
, после сформируют правила конфигурации сети для wp-config.php
которые нужно указать перед строкой /* Это всё, дальше не редактируем. Успехов! */:
(выглядеть это будет так)
/* Add any custom values between this line and the "stop editing" line. */ define( 'WP_ALLOW_MULTISITE', true); define( 'MULTISITE', true ); define( 'SUBDOMAIN_INSTALL', false ); define( 'DOMAIN_CURRENT_SITE', '172.33.33.112' ); define( 'PATH_CURRENT_SITE', '/' ); define( 'SITE_ID_CURRENT_SITE', 1 ); define( 'BLOG_ID_CURRENT_SITE', 1 ); /* That's all, stop editing! Happy publishing. */
После не забываем сохранить внесенные изменения.
ekzorchik@srv-us2204a:~$ sudo systemctl restart nginx php8.1-fpm.service
опять перелогиниваемся в WordPress
(http://172.33.33.112/wp-login.php
)
Имя пользователя или email: ekzorchik
Пароль: 712mbbdr@
Язык: Русский
и нажимаю "Войти".
Если Вы обратите внимание, то консоль управления стала немного другой:
Отобразить какие сайты в данный момент присутствуют или добавить
Мои сайты - Управление сетью - Сайты
Итого, я для себя рассмотрел, как включается настройка мультисайт для CMS
системы WordPress
когда можно из единой консоли управлять несколькими сайтами на одном хостинге. Вот только следует учитывать нагрузку, создаваемую уже ими, не получится оптимизировать по отдельности, т.к. конфигурационные файлы одни и база одна.
Для себя мне проще развернуть каталоги под блоги: /var/www/html/{win,lin,net,home,ekzorchik}
и уже в них развернуть файлы wordpress.org/latest.tar.gz
дабы после под каждый сайт создать конфигурационный файл для Web-сервиса nginx с учетом нагрузки.
Пока на этом завершу свою заметку, если будет время, то рассмотрю на боевой среде как можно это применить, а пока у меня все, с уважением автор блога