4. Основы CMS WordPress, ставим гостевую ОС
Итак, настала пора перейти к нашей практической цели: установке WordPress, а, как мы писали в первой статье, первым шагом к достижению этой цели является установка Linux.
Мы будем устанавливать Debian Linux 11 с кодовым именем bull’s-eye (яблочко). Почему именно эту версию?
Во-первых это самый последний на момент написания статьи устойчивый (стабильный, проверенный) свободно-распространяемый официальный дистрибутив Debian Linux.
Во-вторых Debian Linux – операционная система, проверенная временем, обладающая самым мощным набором пакетов программ и, в силу всего этого, наиболее подходящая для нашей цели, однако это не значит, что вы обязательно должны ставить именно её – если у вас есть опыт и уверенность, то можете ставить любую Unix-подобную ОС, главное чтобы вы смогли поднять на ней web-сервер, php и MySQL. Можно даже установить Windows, поднять MySQL на нём и заставить работать PHP c Internet Information Services, причём автор имеет опыт в этом направлении и именно поэтому предлагает не искать приключений, а пойти по первому пути.
Таким образом, начинаем действовать:
- заходим по ссылке;
- находим кнопку скачивания нужного нам дистрибутива для архитектуры AMD64:
- нажатие на неё приведёт к скачиванию необходимого iso-образа дистрибутива:
- находим этот файл в каталоге “Загрузки” и переносим его в ваш каталог дистрибутивов, например, как мы в каталог (директорию, папку) “D:Distrib.dsk”;
- запускаем Диспетчер Hyper-V описанным в предыдущей статье способом: нажатием комбинации клавиш {Windows, R}, набором virtmgmt.msc и нажатием Enter;
- в появившемся окне Диспетчер Hyper-V (Hyper-V Manager в английском варианте) видим установленную нами в предыдущей статье виртуальную машину с именем WordPress-01 и любым способом выбираем пункт меню “Параметры” этой виртуальной машины (например, через контекстное меню, как на снимке ниже, или через меню “Действия” или правую вкладку “Действия”:
- здесь нам нужно будет установить DVD-привод, в который мы будем “вставлять” скачанный образ дистрибутивного DVD-диска, для чего нажимаем кнопку “Добавить”:
- выбираем DVD-дисковод и снова жмём на “Добавить”
- далее указываем полный путь к скачанному нами файлу образа устанавливаемой операционной системы Debian 11 либо найдя и выбрав его с помощью кнопки “Обзор”, либо просто набрав D:Distrib.dskdebian-11.4.0-amd64-netinst.iso
- теперь определяем порядок просмотра устройств для загрузки – нам нужно, чтобы DVD-дисковод был первым:
- следующим крайне важным моментом является отключение режима безопасной загрузки, ибо иначе у вас не получится установить Linux, так как он её не поддерживает (снимаем птичку):
- всё, подготовительный этап на этом завершён, теперь возвращаемся в меню Диспетчер Hyper-V, выбираем нашу виртуальную машину и сначала запускаем её кнопкой “Пуск”,
а затем подключаемся к ней кнопкой “Подключить”, в результате чего у вас должно появиться новое окно с запущенной установкой ОС Debian 11: - если оно не появилось, то проверьте, выбрали ли вы верный порядок просмотра устройств при загрузке виртуальной машины, первым должен быть DVD-привод со смонтированным iso-образом дистрибутива Debian GNU/Linux 11, после чего инициируйте перезагрузку симулируя нажатие комбинации (Ctrl, Alt, Del} с помощью меню “Действие”:
- Итак, уже можно установить ОС, выбрав пункт меню “Install”, однако если вы хотите иметь возможность выбрать именно такую конфигурацию, которая вам нужна, то всегда выбирайте “Advanced options …”, а затем “… Expert install”, что приведёт вас к большому числу промежуточных меню, большая часть из которых интуитивно понятна и позволяет вам специфицировать многие параметры системы, но некоторые меню требуют пояснения, чем мы сейчас и займёмся, предварительно обратив ваше внимание на то, что для перехода от поля к полю здесь нужно будет использовать клавишу табуляции, а для подтверждения выбора клавишу “Enter”:
- пункт “Загрузка компонентов с установочного носителя” вызовет следующее новое окно:
где нам не нужно ничего выбирать, а просто нажать на Enter, перейдя на кнопку “Продолжить” при помощи клавиши табуляции; - пункт “Настройка сети”
предполагает запрос на разрешение автоматически назначить ip-адрес через dhcp, на что нужно ответить отказом, после чего последуют обычные вопросы об ip-адресе, маске сети, шлюзе и dns-сервере, на которые мы в нашем случае внешнего виртуального коммутатора должны отвечать таким образом, как если бы к тому же коммутатору, к которому подключена ваша физическая машина с основной операционной системой, была бы подключена ещё одна машина, например стандартным ответом будет следующий:- ip-адрес: 192.168.1.11
- маска подсети: 255.255.255.0
- шлюз: 192.168.1.1
- dns-серверы: 192.168.1.1
- настройка сети заканчивается просьбой ввести имя компьютера (у нас WordPress-1):
и имя домена (имеется ввиду dns-имя), в который вы хотите включить эту машину - далее последует группа вопросов, связанных с пунктом меню “Настройка учётных записей пользователей и паролей”, где мы подтверждаем использование теневых паролей, запрещаем вход в систему под логином “root”, придумываем и вводим логин и пароль;
- настройку времени делаем так, как предлагает система, то есть подтверждаем использование NTP и выбираем ваш часовой пояс;
- далее остановимся на разметке дисков, где выбираем второй вариант (шифрование нам ни к чему, так как мы не собираемся хранить файлы с документами в системе)
а, в новом окне выбираем для простоты “Все файлы в одном разделе” - теперь нужно будет задать имя (например WordPress-1-Volumes) и размер (max) группы томов:
- на следующий важный вопрос отвечаем утвердительно, несмотря на предупреждение:подтверждаем запись изменений на диск и переходим к этапу установки базовой системы и пакетов программ, где соглашаемся со всеми предложениями системы, то есть по сути всё время жмём на Enter, кроме экрана выбора ПО, где проставляем птички следующим образом:
- остался последний шаг, установка загрузчика, на что мы соглашаемся:
после чего может последовать вопрос, на который важно ответить утвердительно, иначе система может не загрузиться; - всё, после этого будет ещё всего два экрана, один информационный:
и один, требующий действия, суть которого ясна из контекста: - Если всё, что написано выше было сделано верно, то переходим в окно “Параметры” Диспетчера Hyper-V и вновь смотрим на верный порядок загрузки, где микропрограмма загрузки EFI находится в отдельном файле и он указан первым для просмотра (если у вас не так, то система может не загрузиться),
после чего инициируем запуск гостевой операционной системы кнопкой “Пуск” и соединяемся с ней кнопкой “Подключить” из вкладки “Действия” Диспетчера Hyper-V, и если всё было сделано верно, то должно появиться новое окно со следующим содержимым:
которое означает не что иное, как успешное завершение процесса установки Debian GNU/Linux в минимально необходимой нам конфигурации.
- пункт “Загрузка компонентов с установочного носителя” вызовет следующее новое окно:
3. Основы CMS WordPress, выбираем и ставим VMM (гипервизор)
В предыдущей статье было обосновано, что LAMPу лучше всего ставить на виртуальную машину. А для этого нужно сначала установить на ваше оборудование один из вариантов гипервизора или, что то же, монитора виртуальных машин VMM (Virtual Machine Monitor).
Для тех, кто не знаком с соответствующей теорией, мы рекомендуем почитать главу 7 книги-учебника Таненбаума и Боса “Современные операционные системы”.
Нам здесь достаточно будет привести несколько определений.
Основной или базовой (Host OS) операционной системой называется операционная система, общающаяся непосредственно с аппаратурой компьютера.
Гостевой (Guest OS) называется операционная система, установленная на виртуальной машине.
Как видно из приведённой выше схемы, существует три типа виртуализации:
- Случай, когда гипервизор работает непосредственно на аппаратуре, фактически выполняя ряд функций обычной операционной системы.
- Случай, когда гипервизор работает как приложение в основной операционной системе и не является её частью
- Гибридный вариант, когда гипервизор работает как отдельный сервис в рамках основной операционной системы и является её частью.
Поскольку мы действуем в предположении, что и рабочая станция и сервер у нас должны располагаться на одном и том же компьютере, то гипервизор первого типа для нас не подходит. Отметим только, что если всё же вы готовы выделить отдельный компьютер под сервер, то непременно ставьте VMM первого типа, так как он зарекомендовал себя как очень надёжный и быстрый механизм поддержки работы виртуальных машин. Особо выделим, что даже у коммерческих продуктов типа Windows, гипервизор первого типа Hyper-V Server 2019, который, в частности, используем и мы в своей работе, является бесплатным свободно распространяемым продуктом высокого класса для серьёзных предприятий, при применении которого лицензионные требования возникают только по отношению к гостевым операционным системам.
Так уж исторически произошло, что большинство персональных компьютеров в России (да и в мире вообще) работает на одной из версий ОС Windows. Причин тому можно назвать много. Приведём лишь три из них. Первая и самая главная, это гениальный коммерческий талант Билла Гейтса, основателя компании Микрософт. Вы только почитайте вот эту статью, где очень хорошо описан этот момент. Вторая, не менее важная, очень высокое качество набора инструментов Microsoft Office. Именно благодаря второму моменту более безопасное и мощное семейство ОС Linux никак не может похвастаться таким количеством клиентов. Ну и третий момент – это количество и разнообразие разработанного программного обеспечения для ПК с архитектурой Intel x86 (IA-32) или AMD64 и OC Windows намного больше, чем для других архитектур и операционных систем. В частности, если драйвер рассматривать тоже как программное обеспечение, то вероятность того, что ваша видеокарта, любая другая плата расширения или периферийное оборудование, будут иметь адекватно работающий драйвер под Windows намного выше, чем вероятность наличия такового под другую ОС.
Исходя из этого, мы сейчас научимся ставить гипервизор третьего типа на ПК с OC Windows версии 8.0 или старше. Но это не значит, что вы тоже обязательно должны ставить именно Windows Hyper-V VMM. Если у вас установлен Linux, то мы можем посоветовать очень хорошо себя зарекомендовавшую систему виртуализации Proxmox Virtual Environment. В общем-то, можете использовать любой гипервизор, к которому лежит у вас душа и который работает на вашей ОС, как основной (Host OS).
Итак, мы действуем в предположении, что у вас на компьютере есть установленная версия Windows не младше Windows 8 Professional (Windows Server 2008 для серверной линейки), процессор имеет хотя бы 2 ядра и поддерживает виртуализацию, а оперативной памяти достаточно, чтобы можно было что-то выделить под гостевую операционную систему (по хорошему, ПК должен иметь не менее 8 Gbyte RAM для этого). Кроме этого, понятное дело, нужно чтобы на винчестере было достаточно места для установки гостевой операционной системы и самого гипервизора, так что нам будет нужен ПК с объёмом винчестера минимум 512 GB. Все эти требования с лихвой удовлетворяются средним современным ПК, так что фактически всё это не является проблемой.
Порядок действий таков:
- нажимаем комбинацию клавиш: {Windows, R}, набираем appwiz.cpl, жмём “ОК”;
- в появившемся окне:
выбираем “Включение или отключение компонентов Windows” из меню слева;
- в появившемся новом небольшом окне ставим птичку в квадрате (checkbox) напротив Hyper-V и нажимаем “ОК”;
- дожидаемся установки компоненты и при появлении нижеследующего окна жмём на кнопку “Перезагрузить сейчас”:
- после того, как система полностью перезагрузится, в меню средств администрирования системы появятся два новых пункта “Диспетчер Hyper-V” и “Быстрое создание Hyper-V”, и вы можете ими воспользоваться, однако поскольку в разных версиях Windows меню выглядят по-разному, то я предпочитаю, и вам советую всегда пользоваться комбинацией клавиш: {Windows, R}, после чего набирать virtmgmt.msc и жать на “ОК”, ибо это всегда работает во всех версиях одинаково и, самое главное, вам не придётся терять время на поиски нужных пунктов меню;
- в появившемся окне Диспетчер Hyper-V (Hyper-V Manager в английском варианте):
- вы уже можете увидеть возможность создать виртуальную машину, однако перед тем, как её реализовать, важно проделать подготовительную работу, а именно: создать виртуальный коммутатор, для чего нажимаем на кнопку “Диспетчер виртуальных коммутаторов” в секции или меню “Действия”:
- выбираем тип из появившегося меню, для чего крайне важно понимать различие типов виртуальных коммутаторов:
- первый вариант, внешняя сеть, говорит о том, что виртуальные машины будут в той же сети, что и физическая машина с основной ОС, то есть фактически мы будем иметь как бы ещё один или несколько ip-адресов (по количеству создаваемых виртуальных машин), привязанных к тому же физическому адаптеру, что и хост-машина – наиболее часто используемый вариант и он подходит для наших целей;
- второй вариант, внутренняя сеть, подразумевает создание некоей сети, которая предназначена только для взаимодействия виртуальных машин друг с другом, а также с хост-машиной, но другие компьютеры в физической сети не будут иметь к ней доступа – не так часто используемый вариант, подходит для нас только в том варианте, когда сайт с WordPress установлен на физической машине с основной ОС (Host OS), а база данных на виртуальной машине с гостевой ОС;
- ну и третий, самый редкий вариант, когда сеть организуется только между виртуальными машинами, а доступа даже к хосту основной ОС нет – используется в основном для целей тестирования и отладки тех или иных сервисов, которые в случае использования в коммутаторах первых двух типов могут навредить вовлечённым в повседневную работу процессам, доступ к виртуальной машине в такой сети возможен только средствами Диспетчера Hyper-V, так что этот вариант сети напоминает VPN
- итак, мы выбираем первый вариант и нажимаем на кнопку “Создать виртуальный коммутатор”, что приводит к появлению следующего окна:
- здесь мы введём имя нашего виртуального коммутатора (например “Hyper-V Virtual Switch #1”), напишем примечание (например, “Виртуальный коммутатор для доступа к виртуальной машине WordPress”) и нажмём на клавишу “ОК” (если для ваших целей нужно определить номер VLAN, то это можно сделать с помощью соответствующего флажка, но мы не будем это делать, так как это выходит за рамки излагаемого материала и только отметим, что данная возможность, позволяет изолировать создаваемую виртуальную локальную сеть от остальных сетей, предоставив ей отдельный номер, причём так, что все сетевые устройства и, в частности, виртуальные машины с одним номером VLAN, будут работать в некой единой воображаемой виртуальной локальной сети, независимо от того, где они находятся)
- в результате появится следующее промежуточное предупреждающее окно:
- здесь очень важно, чтобы вы знали текущую конфигурацию вашей сети, для чего как обычно запустите соответствующую оснастку (snap-in) Windows комбинацией клавиш {Windows, R} и вводом ncpa.cpl, после чего просмотрите конфигурацию (особенно DNS) и запомните на случай, если её нужно будет восстанавливать;
- если вы готовы, то нажмите на кнопку “Да” и у вас через секунд 5-10, появится ещё одно сетевое устройство vEthernet (Hyper-V Virtual Switch #1) в выводе результата работы оснастки “ncpa.cpl”, которое перенесёт на себя ip-настройки вашего физического сетевого адаптера:
- если не учесть этого момента, то легко можно запутаться – ещё раз, теперь ваш физический сетевой адаптер, к которому вы привязывали виртуальный коммутатор, будет использовать только компоненту связи с расширяемым управляемым виртуальным коммутатором 2-ого уровня Hyper-V и драйвер протокола LLDP, а все его бывшие сетевые настройки автоматически перекочуют на новое виртуальное сетевое подключение, имеющее указанное вами при создании виртуального сетевого коммутатора имя (на практике статические настройки dns не переносятся и их приходится вносить вручную, ибо без правильной настройки dns, как вы понимаете, у вас мало что будет работать):
- помимо этого, как вы можете видеть на приведённом чуть выше снимке с экрана, если у вас Windows 10 или старше, в списке сетевых устройств сразу после установки компоненты (роли) Hyper-V, появился ещё и новый виртуальный сетевой адаптер vEthernet (Default Switch), который не имеет прямого отношения к обсуждаемой нами теме создания внешнего виртуального коммутатора, а используется по умолчанию для внутренних виртуальных коммутаторов и обеспечивает функционирование механизма NAT, позволяющего даже в этом случае организовать функционирование интернет на гостевой операционной системе.
- всё, теперь мы будучи готовы к установке виртуальной машины, возвращаемся к окну Диспетчера Hyper-V (Hyper-V Manager) и выбираем из меню (или секции) “Действия” (Actions) подменю “Создать-Виртуальная машина” (New-Virtual Machine):
- в очередном окне читаем информацию, ставим птичку в квадратике (checkbox),
чтобы в следующий раз она не выдавалась и жмём на клавишу “Далее” (Next), а не “Готово” (Finish) – привыкните не искать быстрых и лёгких путей там, где это не стоит делать, чтобы потом долго не разгребать то, что сделает система автоматом по умолчанию;
- в следующем окне нужно будет ввести имя вашей виртуальной машины (у нас WordPress-01)
- а также определить место в файловой системе основной операционной системы (Host OS), где будут размещаться виртуальные машины – можно оставить путь по умолчанию (как на снимке с экрана), а можно ввести свой путь, например D:\Hyper-V или вообще выделить отдельный логический диск под виртуальные машины, критически важным здесь является скорость и надёжность соответствующего раздела файловой системы основной операционной системы;
- после нажатия на кнопку “Далее” (Next) система предложит нам выбрать поколение создаваемой виртуальной машины – выбирайте поколение 2 для современных операционных систем (мы будем ставить в качестве гостевой ОС Debian Linux 11, bullseye, и Hyper-V поддерживает виртуальные машины 2-ого поколения для этой ОС (смотрите эту статью);
- следующее окно процесса установки предложит вам определить количество оперативной памяти (RAM), которое вы готовы выделить для запуска виртуальной машины (естественно, что отобрав её у хост-машины) – для наших целей желательно 4096, а лучше, выделите 8192, если вам позволяет конфигурация хоста, и оставьте включённым флаг “Использовать для этой виртуальной машины динамическую память”;
- после нажатия на кнопку “Далее” (Next) следующее, что нам нужно будет сделать, так это выбрать сетевой адаптер, через который будет работать новая виртуальная машина – благо мы его предварительно создали и остаётся только выбрать его из списка:
- на предпоследнем шаге определяем местонахождение файла, содержащего виртуальный жёсткий диск виртуальной машины – здесь опять-таки можно оставить всё по умолчанию, а можно указать и свой путь, например “D:\Hyper-V\Virtual Hard Disks”, делая упор на скорость и надёжность устройства (мы тоже предпочитаем хранить саму виртуальную машину и её диск в одной отдельной быстрой и надёжной каталожной структуре, но здесь как на снимке с экрана демонстрируем вариант по умолчанию);
- что касается размера виртуального жёсткого диска то всё зависит от того, что за операционная среда будет стоять на виртуальной машине, для наших целей будет достаточно и значения по умолчанию, но всё же лучше указать 256 ГБ, особенно, если учитывать то, что на нашей виртуальной машине будет размещаться не только собственно LAMPa, но и несколько сайтов со своими базами данных;
- ну и в последнем, завершающем окне мы ничего не меняем, так как учиться устанавливать гостевую ОС будем в следующей статье, а просто нажимаем “Далее”
- получаем совсем уже последнее информационное окно:
- обращаем внимание на то, где по умолчанию располагается файл, содержащий наш виртуальный жёсткий диск, нажимаем кнопку “Готово” (Finish) и на этом завершаем процесс создания новой виртуальной машины Hyper-V.
2. Основы CMS WordPress — выбираем HSP
Перечисленное в первой статье операционное окружение “LAMP” предъявляет некоторые требования к железу (hardware), на котором оно будет стоять. Обсудим здесь этот вопрос.
Вопрос этот довольно серьёзный, так как от подхода к его решению во многом зависит успех вашего предприятия (имеется ввиду ваше намерение создать и непрерывно поддерживать в работоспособном состоянии один или несколько сайтов на WordPress).
Всё во-многом, конечно же зависит от того, что за сайты вы будете разрабатывать. Если речь идёт о сайтах-визитках, состоящих из одной страницы (landing page), то это одно дело, а если речь идёт об интернет-магазинах, а тем паче целых интернет-порталах, то другое. Однако, в любом случае нужно понимать, что есть некие минимальные требования. В принципе LAMP можно поставить на самую обычную современную (и даже не очень) рабочую станцию (персональный компьютер). Важно понимать, что нам совсем не нужны графические возможности от операционной системы Linux и ставить мы будем только ядро и несколько важных дополнительных утилит с интерфейсом в виде командной строки.
Все элементы LAMP изначально имели довольно скромные требования к аппаратному обеспечению. Исходя из этого вам может показаться, что для WordPress вполне подойдёт некий виртуальный хостинг. Поверьте нашему опыту – не подойдёт, по очень многим причинам, самая главная из которых заключается в том, что вам предоставляется виртуальная машина с конкретным операционным окружением (в смысле версий тех же Linux, Apache, MySQL и PHP). А WordPress – это живая постоянно развивающаяся система, которая точно так же как и, скажем, Windows, постоянно обновляется, а для того, чтобы перейти на новую версию WordPress вам зачастую нужно будет обновить php, а для того, чтобы обновить php, иногда нужно обновить ядро Linux, а сделать это на виртуальном хостинге вы сами не сможете. Можно попросить сделать это техподдержку, но она делает это планово, только тогда, когда это нужно многим, и вообще очень неохотно.
Можно возразить и сказать, а зачем было обновлять WordPress, меня и так всё устраивало. Что ж, да – именно такого же мнения придерживался и автор этих строк, пока его сайт в один прекрасный момент не сломали. Нужно отдавать себе отчёт в том, что WordPress – это ПО со свободно распространяемым исходным кодом и поэтому оно очень уязвимо. Скажу больше, есть некая статистика, которая говорит о том, что как только происходит обновление той или иной системы, улучшающее её безопасность, через неделю старая версия системы уже подвергается мощным атакам. Так студенты отделений безопасности учатся находить уязвимости и хорошо, если среди них не будет злоумышленников. И не нужно думать, что простенький сайт из одной страницы не будет взломан – для роботов всё равно. Уж по крайней мере спам будет приходить регулярно, и весь этот мусор будет писаться в базу данных вашего сайта.
Таким образом, понятно, что лучшим вариантом для WordPress является аренда выделенного лично вам виртуального сервера, что у HSP (Hosting Service Provider) называется VDS (Virtual Dedicated Server) или VPS (Virtual Private Server). Стоит это относительно не дорого, если учитывать, что ЦОД (Центры Обработки Данных, Data Center) снабжаются дублирующими резервными источниками электропитания, мощнейшими системами охлаждения, системами резервного копирования и т. д.
Вместе с тем, стоит заметить, что когда мы рекомендуем выбрать VDS/VPS-хостинг, то имеем ввиду, что на WordPress обычно не реализуют высоконагруженные (HighLoad) решения. Если, всё же вы создали такое, например, при помощи мощнейшего плагина Advanced Classifieds & Directory Pro, позволяющего делать аналоги aliexpress, то вам придётся улучшить конфигурацию хостинга и арендовать наряду с виртуальным выделенным сервером, ещё и физический выделенный сервер (Dedicated Server), на котором разместить СУБД MariaDB. Понятно что для порталов (тесно связанных между собой нескольких сайтов и web-приложений) вам нужно будет иметь несколько VDS и несколько Dedicated Server.
Что касается виртуальных хостингов (shared hostings), то они вполне подходят для статических сайтов, которые никто никогда не ломает. Единственное, не нагружайте их тяжёлым контентом, типа видео.
Обратим ваше внимание ещё и на то, что при желании можно организовать мини-хостинг у себя дома или на работе. У этого варианта есть и недостатки (вышеописанные элементы резервирования на ваших плечах), и преимущества, связанные с тем, что абсолютно всё под вашим контролем и не нужно ни с кем общаться для решения тех или иных проблем (а они, поверьте, бывают всегда).
Что для этого нужно, так это наличие надёжного оптоволоконного провайдера-интернет и как минимум одного выделенного ip-адреса. Будет совсем хорошо, если будет два разных провайдера и два выделенных ip-адреса из разных ip-подсетей. Благо в России в настоящее время цены вполне адекватны и частному лицу можно за 1000 рублей в месяц получить надёжный оптоволоконный канал со скоростью Гбит в секунду и за 500 рублей в месяц выделенный ip-адрес.
Если вы выберите виртуальный выделенный сервер на каком-либо хостинге, то можно сразу приступать к установке Linux, о которой мы поговорим в четвёртой статье.
Если же захотите организовать всё у себя, то самым разумным будет развернуть систему виртуальных машин. В том случае, если вы готовы выделить отдельный ПК под LAMPу, то тоже можно сразу читать четвёртую статью, но если у вас есть только один мощный ПК, который вы готовы держать постоянно включённым, и который вы хотите использовать для разных целей, то вам нужно сначала прочесть третью статью.
1. Основы CMS WordPress — теория
Система Управления Контентом (CMS) WordPress – это свободно распространяемое на условиях лицензии GPL2 программное обеспечение (ПО), написанное на серверном скриптовом языке программирования общего назначения php.
Логично что для того, чтобы такое ПО работало, нужна операционная среда, в которой может выполняться php-код.
Немного об истории языка php
Изначально язык php был интерпретируемым, а не компилируемым, поэтому он всегда работал в связке с www-сервером. Он либо запускал новый процесс с интерпретатором php каждый раз, когда появлялся запрос от пользователя (cgi), либо содержал в себе интерпретатор php в качестве резидентного модуля (apache mod_php).
Номер текущей стабильной версии PHP 8.1.8, а первая версия 1.0 вышла в далёком 1995 году. Поскольку язык постоянно развивается, то постепенно грань между интерпретируемостью и компилируемостью кода на php начала несколько размываться. Сегодня среду выполнения php-кода (Zend Engine) можно рассматривать как некий аналог виртуальной машины java. Существуют даже проекты, которые позволяют как бы компилировать php-код и получать исполняемые на рабочей станции программы с графическим пользовательским интерфейсом (GUI). Но даже в этом случае невозможно обойтись без www-сервера. Так называемые компиляторы есть не что иное, как упаковщики в единый исполняемый файл (например, с расширением .exe, для Windows) как минимум четырёх необходимых компонент, www-сервера, php-интерпретатора, кода самой программы и www-браузера.
Классическое операционное окружение
Итак, уже понятно, что для того, чтобы установить WordPress, нам нужно иметь по крайней такую операционную среду, в которой присутствуют www-сервер и php-интерпретатор.
CMS WordPress представляет из себя вместе с дополнительными внешними модулями (plug-in modules) довольно мощный инструмент Для её работы обязательно нужна ещё и система управления базой данных (СУБД). Родной для CMS WordPress СУБД является MySQL, изначально разработанная одноимённой шведской компанией. СУБД распространялась как свободное ПО на основе лицензии GNU GPL.
Сегодня MySQL принадлежит корпорации Oracle и распространяется в трёх вариантах дистрибутива: двух коммерческих и одной свободной на основе той же GNU GPL.
Помимо MySQL официальный дистрибутив WordPress поддерживает работу с более новой СУБД MariaDB.
Если же есть желание использовать другие СУБД с WordPress то нужно будет потрудиться дополнительно. Например, установить CMS WordPress с СУБД PostgreSQL можно попытаться при помощи специальных плагинов. Однако мы не будем рекомендовать это делать, так как WordPress довольно хорошо работает и с “родными” для него СУБД.
Nullus est locus domestica sede jucundior (Нет лучшего места на земле, чем родной дом).
Marcus Tullius Cicero (Марк Тулий Цицерон)
Классическое операционное окружение для WordPress – это так называемая LAMPа (LinuxApacheMySQLPHP). Именно это окружение мы и научимся устанавливать в следующих статьях.
10. Основы CMS WordPress, русификация и мультиязычность
Итак, в предыдущей статье мы проиллюстрировали, как установить WordPress и, казалось бы, на этом нужно завершать тему, однако установить WordPress – это только пол дела. Для того, чтобы им можно было нормально пользоваться, нужно решить ещё ряд задач, одной из которых и посвящается эта статья.
WordPress, как вы уже скорее всего поняли, если читали предыдущие статьи, состоит из нескольких обязательных (неотъемлемых) частей (внутренних модулей) и дополнительной в виде внешних plugin-модулей. Так вот, из этих модулей только ядро является продуктом собственно компании WordPress. И оно мультиязычно, то есть, как мы видели в предыдущей статье, при установке можно выбрать нужный язык (в нашем случае русский) и CMS будет вроде как работать на выбранном языке, однако, на самом деле это далеко не так. Дело в том, что вторая основная компонента системы – тема, разрабатывается уже другими компаниями и, как правило, тема, которая подходит к вашему проекту, не будет содержать нужного языка, а зачастую вообще является одноязычной. К этому добавляются аналогичные проблемы с plugin-модулями.
И ещё один момент – если уж у нас всегда есть нормально работающая система на английском языке, то почему бы не внедрить модуль который бы не заменял английские страницы, а делал бы их дубли на русском языке, так чтобы при желании с вашим сайтом могли бы работать, как англоязычные пользователи, так и русскоязычные. Таким образом можно было бы даже сделать многоязычный сайт подобно тем, что мы постоянно видим на просторах Интернета.
Займёмся решением поставленной задачи. Возможны два варианта:
- ваша тема не полностью русифицирована
- ваша тема совсем не русифицирована
В первом случае имеет смысл установить очень хороший плагин под названием Loca Translate. Для этого заходим в меню “Плагины” Панели Управления сайтом по адресу http://site-1.sysadmin.bz/wp-admin/plugins.php:
Видим, что по умолчанию в процессе установки WordPress были также установлены два плагина “Akismet Anti-Spam” и “Hello Dolly”. И тот и другой нам не нужны, поэтому спокойно удаляем их, последовательно нажимая на красные надписи-кнопки “Удалить” и подтверждая намерения. Далее нажимаем на верхнюю кнопку “Добавить новый”, в появившемся новом окне в поле поиска справа вводим “Loco”, видим, что система нашла плагин “Loco Translate” и жмём кнопку “Установить”:
Теперь можно удалить пустой каталог WordPress, а также исходный архив latest.zip и файл index.html, который мы создавали в предыдущей статье под номером 8. Сделать это можно как с помощью Midnight Commander, так и с помощью последовательного выполнения двух команд:
rm -d wordpress
rm -f latest.zip index.html
Таким образом, первый шаг мы сделали и у нас в корне нашего сайта развёрнута структура дистрибутива WordPress.
Теперь, на втором шаге нужно немного повозиться с правами к файлам дистрибутива, ибо иначе либо система будет слишком уязвима, либо наоборот, прав будет не хватать. Сначала надо сделать владельцем всех файлов дистрибутива пользователя www-data и группу с тем же именем. Далее, в соответствии с трёхзвенной структурой прав UNIX-подобных систем нам нужно дать полные права владельцу и группе на все каталоги (папки, директории) дистрибутива, но лишить права записи в них всех остальных пользователей (код в нотации триады rwx: 775). Что касается файлов, то для пользователя и группы www-data нужно дать все права, кроме права выполнения, а для всех остальных только право чтения (код 664). Самый важный и уязвимый файл wp-config.php не должен содержать вообще никаких прав для посторонних (т.е. никто, кроме пользователей группы root и www-data, а также перечисленных в файле /etc/sudoers не должен иметь даже право читать его). Делается это следующей последовательностью команд:
chown -R www-data:www-data ./
sudo find . -type d -exec chmod 775 {} +
sudo find . -type f -exec chmod 664 {} +
sudo mv wp-config-sample.php wp-config.php
sudo chmod 660 wp-config.php
Пришло время заняться третьим шагом, после чего можно будет запускать установку системы через www-браузер. Шаг большой и сложный. Конечная цель – отредактировать файл wp-config.php в соответствие с нужными нам параметрами.
Если открыть этот файл, то можно увидеть, что в первую очередь надо задать ряд параметров базы данных сайта, ибо без этого установка не начнётся:
- адрес сервера, где находится база данных (у нас она тут же, поэтому оставляем localhost, но нужно понимать, и это объяснялось в статье по MySQL, что это не обязательно и можно указать любой ip-адрес, где находится ваша СУБД и соответствующий порт, если он отличается от 3306);
- имя базы данных;
- имя пользователя;
- пароль пользователя;
- кодировка базы данных;
- правила сопоставления (collation)
Для того, чтобы понять дальнейший материал вам лучше перечитать статью 6 о MySQL. Нашей локальной задачей будет создание базы данных site-1.sysadmin.bz (название может быть любое, но для избежания путаницы лучше называть базу данных и пользователя точно так же, как и сам сайт, для которого они предназначены), заведение специального пользователя базы данных (что крайне желательно, но не обязательно, так как можно использовать и созданного нами в статье 6 универсального пользователя), предоставление этому пользователю всех прав на созданную базу данных (если мы будем использовать не специального пользователя, то у него будет доступ ко многим базам данных, что ухудшает безопасность).
Итак, приступим к реализации нашего плана. Запускаем MySQL Workbench и соединяемся с СУБД. Выбираем среднюю вкладку “Schemas” в левом столбце, жмём на правую кнопку мыши, после чего выбираем левой кнопкой из контекстного меню пункт “Create Schema”:
В появившемся новом окне вводим имя базы данных, кодироку символов (Charset) и правила сопоставления (collation) оставляем по умолчанию, далее жмём на кнопку “Apply (Применить)”:
Результатом этих действий будет генерация простейшего sql-скрипта, который можно было бы написать самому. но нам здесь важно было показать, как это делается при помощи MySQL Workbench, ибо далее будут действия, приводящие к скриптам посложней. В данном случае в появившемся новом окне нам остаётся согласиться с выполнением скрипта:
После этого создастся схема база данных с заданным нами именем site1-sysadmin.bz. Далее нам лучше тут же ответить себе на вопрос о кодировке и сопоставлении. Для этого нажимаем на кнопку со второй пиктограммой напротив имени нашей схемы базы данных:
и видим в соответствующем поле, что по умолчанию у нас база данных создалась с кодировкой utf8mb4, а правило сопоставления символов в ней имеет код utf8mb4_0900_ai_ci. Эту информацию можно было бы получить и при помощи sql-запроса:
Полученную информацию мы будем вводить в соответсвующее место файла wp-config.php. Напомним, что для того, чтобы приступить к этому нам осталось ещё получить имя пользователя базы данных и его пароль, а для этого надо его создать, к чему и приступим. Переходим на вкладку “Administration” в левом столбце MySQL Workbench и выбираем меню “Users and Privileges”, где нажимаем кнопку “Add Account”:
Здесь в поле “Login name” заменяем “newuser” на “site-1.sysadmin.bz”, в поле “Authentication Type” оставляем “Standard” (ещё раз отметим, что это очень важно для WordPress), в поле “Limit to Hosts Matching” – localhost, а в полях Password и “Confirm Password” вводим одинаковый достаточно сложный пароль. Остаётся нажать кнопку “Apply” и пользователь создастся.
Далее нам останется дать права нашему новому пользователю на базу данных. Делается это следующим образом. Выбираем вкладку “Schema Privileges”, далее жмём копку “Add Entry”, выбираем переключа́тель “Selected Schema”, и в ниспадающем меню находим имя нашей базы:
Нам остаётся нажать на кнопку “OK”, стать курсоров на добавленную базу данных и нажать внизу справа на кнопку “Select All” (при этом выделятся все права, кроме GRANT OPTION, что нам и надо):
Всё, нажимаем на “Apply” и переходим к редактированию файла wp-config.php, для чего закрываем MySQL WorkBench (если мы всё сделали верно, то он нам больше не понадобится), открываем наш Midnight Commander, подводим курсор к файлу и нажимаем F4:
Здесь заменяем все параметры ровно так, как указано на нашем снимке с экрана и сохраняем файл (в случае редактора GNU nano жмём комбинацию клавиш {Ctrl,O} и выходим из редакторв комбинацией {Ctrl, X}). На этом всё. и если вы не совершили ни одной ошибки, то установка WordPress произойдёт без единого предупреждения практически в режиме “silent setup”.
Запуск установки осуществляется с web-браузера открыванием сайта по ссылке http://site-1.sysadmin.bz (так как мы удалили файл index.html, то отрабатывать теперь будет index.php).
Поля следующего экрана заполняем в соответствии с нашими договорённостями, задаём сложный логин и пароль администратору системы и нажимаеми на кнопку “Установить WordPress”:
Всё, если ваша виртуальная машина не слишком медленная, то через несколько секунд (в любом случае не больше чем через минуту) вы получите такой завершающий процедуру установки CMS WordPress экран:
Остаётся нажать на кнопку и войти в административную консоль вашего сайта на WordPress для того, чтобы начать его настраивать и заполнять, но об этом уже в следующих статьях:
[:ru]Итак, мы в предыдущей статье мы проиллюстрировали, как установить WordPress и, казалось бы, на этом нужно завершать тему, однако установить WordPress – это только пол дела. Для того, чтобы им можно было нормально пользоваться, нужно решить ещё ряд задач, одной из которых и посвящается эта статья.
WordPress, как вы уже скорее всего поняли, если читали предыдущие статьи, состоит из нескольких обязательных (неотъемлемых) частей (внутренних модулей) и дополнительной в виде внешних plugin-модулей. Так вот, из этих модулей только ядро является продуктом собственно компании WordPress. И оно мультиязычно, то есть, как мы видели в предыдущей статье, при установке можно выбрать нужный язык (в нашем случае русский) и CMS будет вроде как работать на выбранном языке, однако, на самом деле это далеко не так. Дело в том, что вторая основная компонента системы – тема, разрабатывается уже другими компаниями и, как правило, тема, которая подходит к вашему проекту, не будет содержать нужного языка, а зачастую вообще является одноязычной. К этому добавляются аналогичные проблемы с plugin-модулями.
Займёмся решением поставленной задачи. Возможны два варианта:
- ваша тема не полностью русифицирована
- ваша тема совсем не русифицирована
Для начала имеет смысл установить очень хороший плагин под названием Loco Translate. Для этого заходим в меню “Плагины” Панели Управления сайтом по адресу http://site-1.sysadmin.bz/wp-admin/plugins.php:
Видим, что по умолчанию в процессе установки WordPress были также установлены два плагина “Akismet Anti-Spam” и “Hello Dolly”. И тот и другой нам не нужны, поэтому спокойно удаляем их, последовательно нажимая на красные надписи-кнопки “Удалить” и подтверждая намерения. Далее нажимаем на верхнюю кнопку “Добавить новый”, в появившемся новом окне в поле поиска справа вводим “Loco”, видим, что система нашла плагин “Loco Translate” и жмём кнопку “Установить”:
Перед установкой всегда стоит обращать внимание на совместитмость плагина с вашей версией WordPress. Лучше всего, если будет написано, что он совместим, но не тестировался, не означает, но не совместим, поэтому пробуем. Нужно понимать, что даже если плагин вызовет критические проблемы в системе и ваш сайт не запустится, то проблему всегда можно решить путём удаления подкаталога с плагином в каталоге /var/www/site-1.sysadmin.bz/wp-content/plugins/.
После установки активируем плагин и видим, что в консоли появилось новое меню:
Если зайти в подменю WordPress этого меню то можно увидеть информацию об уровне перевода частей ядра:
Как и говорилось выше, она 100% процентная. Что касается тем, то темы, устанавливаемые по умолчанию, тоже как правило переведены полностью. Плагин у нас в данный момент только один Loco Transate (остальные мы удалили) и было бы странно, если бы плагин, предназначенный для перевода, сам не был бы полностью переведён. Так что в данном состоянии наша система полностью русифицирована. Однако, стоит нам установить другую тему, как проблемы не заставят себя ждать.
Предположим, что наш первый сайт будет для бухгалтерской компании. Тогда нам нужно установить подходящую тему. Для этого в Панели Управления (Администрирования) сайтом выбираем пункт меню “Внешний вид -> Темы” и жмём на кнопку “Добавить”:
В появившемся окне справа в поле поиска вводим слово “accounting” для фильтрации списка тем, находим, например, тему “Business Accounting”, устанавливаем и активируем её. Если теперь войти в меню “Loco Translate → Темы → Business Accounting”, то можно увидеть надпись ” Не найдено переводов для “Business Accounting”.
Факт, что тема не русифицирована, можно было бы установить и по другому. Обратите внимание на то, что в папке /var/www/site-1.sysadmin.bz/wp-content/languages/themes/ нет файла с именем business-accounting-ru_RU.mo:
Каталог /var/www/site-1.sysadmin.bz/wp-content/languages/themes/ является общесистемным. Помимо этого, перевод темы может содержаться в подкаталоге languages самой темы: /var/www/site-1.sysadmin.bz/wp-content/themes/business-accounting/languages/. Но его и там нет, а присутствует там только файл business-accounting.pot, являющийся основным файлом темы, содержащим только английский язык. Таким образом, нам совершенно точно нужно будет с нуля создавать перевод темы. чем и займёмся.
Однако, перед этим зададимся вопросом, а зачем, собственно, говоря, нам это нужно? Если я буду публиковать все записи и все страницы только на русском, то ведь отсутствие русификации внешне никак не проявится. А вот и нет, ещё как проявится:
На вышеприведённом снимке с экрана видно, после установки не русифицированной темы элементы на английском языке появились, как на самом сайте, так и в Панели Управления сайтом. Таким образом, мы многими способами показали, что тема Business Accounting требует русификации.
Приступим к выполнению нашего плана. Снова заходим в меню “Loco Translate → Темы → Business Accounting” Панели Управления WordPress и нажимаем на кнопку “Новый язык”:
Далее нам нужно будет осуществить выбор языка и местоположения файла перевода темы WordPress после чего нажимаем на кнопку “Начать перевод”:
В результате в полном соответствие с нашим выбором в соответствующем каталоге появятся два новых файла:
Файл с расширением .po является текстовым, может трактоваться как исходный код перевода и редактироваться как с помощью средств самого плагин-модуля Loco Translate, так и с помощью специального редактора Poedit. Вообще говоря, при желании этот файл можно редактировать любым текстовым редактором, просто это будет менее удобно. Самой системой он не используется. Ей нужен файл с расширением .mo, представляющий собой как бы объектный (машинный) код соответствующего файла с расширением .po, а для того, чтобы преобразовать исходный код в объектный нужен плагин Loco Translate либо редактор Poedit или его аналог. Файл с расширением .po не появляется сам собой, а генерируется на основании шаблона, который, как уже указывалось выше, записывается в каталог /var/www/site-1.sysadmin.bz/wp-content/themes/business-accounting/languages/ сразу после установки темы. И тут всё было бы хорошо, если бы версия шаблона соответствовала версии темы, и он содержал бы все элементы, которые нужно переводить. Однако, к сожалению, на практике это далеко не так, и нам придётся не только делать перевод, но и добавлять фразы, которые нужно будет переводить!
Займёмся реальным переводом нашей темы и продемонстрируем все необходимые действия. Для этого в очередной раз войдём в меню “Loco Translate → Темы → Business Accounting” Панели Управления WordPress, где нажмём кнопку “Редактировать”:
Редактор интуитивно понятный и работа с ним не вызывает вопросов, кроме одного. Что-то явно мало фраз на английском языке, которые нужно перевести. Фактически там содержатся только пункты одного подменю “General Settings” меню Theme Settings, которое появилось без перевода после установки нашей темы (выше приводился соответствующий снимок с экрана):
Ну что же, давайте для начала проверим, дала ли наша работа какой-либо эффект, для чего сохраним наш перевод и посмотрим на результат. Уже явно лучше, но далеко до завершения:
Остаётся научиться добавлять в редактор дополнительные строки для перевода, которые в силу тех или иных причин отсутсвовали в шаблоне. Надо сказать, что данная ситуация является скорее правилом, чем исключением и если вы видите, что та или иная фраза на сайте и (или) в ПУ осталась на английском, то её скорее всего нужно добавить в исходный шаблон темы.
Приступим к этому. Для этого в который уже раз заходим в меню “Loco Translate → Темы → Business Accounting” Панели Управления WordPress, но теперь выбираем пункт “Правка шаблона” и жмём на кнопку “Добавить”:
Здесь стоит обратить внимание на предупреждения и знать, что не рекомендуется изменять существующие фразы, а только добавлять новые. Кроме того, всегда нужно иметь ввиду, что при обновлении темы файл с расширением .pot может быть перезаписан, и поэтому ваша работа по изменению шаблона может пропасть, если вы не сохраните его где-нибудь в другом месте.
Также обратите внимание на то, что вообще говоря, помимо точной фразы можно указать её контекст, то есть перевод для одной и той же фразы в зависимости от контекста может быть разным.
Конкретно в применении к нашей задаче набор необходимых фраз берём из всех подменю меню “Theme Settings” ПУ WordPress, включая саму фразу, именующую меню. Также находим на самом сайте англоязычные фразы “Posts” “Read More” и другие. Добавляем их все в шаблон и сохраняем его.
Нужно сказать, что ручное добавление фраз для перевода в шаблон может быть довольно утомительным, так как вы всякий раз будете постепенно обнаруживать, что забыли внести ту или иную фразу. Однако, добавляя фразы вручную, вы, с другой стороны, не будете делать лишней работы по переводу, так конкретно на вашем сайте те или иные фразы могут не использоваться.
Вместе с тем, обратите внимание на то, что на последнем снимке с экрана есть кнопка “Синхронизация”. Она воистину волшебная и позволяет автоматически обновить шаблон в полном соответствие с используемой версией темы. Нажав на неё, мы моментально получим не 13 строк для перевода, как было, а целых 132 строки:
Сохраняем наш новый файл шаблона при помощи кнопки “Сохранить”.
Далее важным моментом является синхронизация файла с расширением .po с новым файлом с расширением .pot, для чего снова заходим в меню “Loco Translate → Темы → Business Accounting” Панели Управления WordPress, выбираем перевод, нажимаем “Редактировать”, а там уже кнопку “Синхронизация”.
После этого видим, что нам осталось перевести ещё целых 119 строк, занимаемся этим. Для обычного программиста данная работа будет легким практическим занятием по английскому языку и вполне может подойти в качестве отдыха от основной работы.
Если же вы не владеете английским языком, то можете приобрести ключ API (например, Lecto Traslation API) для Loco translate или Poedit Pro. В этом случае у вас автоматически будут появляться подсказки к переводам и вы сможете выбирать наиболее подходящий по смыслу вариант.
Как только закончите перевод нажимайте на кнопку “Сохранить” и наслаждайтесь полностью русифицированной темой.
Аналогично поступают и с плагинами и самим ядром WordPress, если они требуют перевода. Нужно будет просто выбрать соответствующий подпункт меню “Loca Translate” Панели Управления WordPress.
Настала пора заняться вопросом мультиязычности. Поясним проблему – если уж у нас всегда есть нормально работающая система на английском языке, то почему бы не внедрить модуль, который бы не заменял английские страницы, а делал бы их дубли на русском языке, так чтобы при желании с вашим сайтом могли бы работать, как англоязычные пользователи, так и русскоязычные. Таким образом можно было бы даже сделать не просто двуязычный, а многоязычный сайт подобно тем, что мы постоянно видим на просторах Интернета. При этом желательно сделать так, чтобы переключение (выбор) языка мог произвести любой пользователь на сайте, а в идеале система сама с помощью геолокации понимала бы язык пришедшего на сайт пользователя и автоматически сменила бы его.
Эту задачу решает неплохой плагин-модуль под названием WP Multilang. Установим его:
Далее его нужно будет настроить:
Приступаем к этому. Проставляем необходимые птички (checkboxes), выбираем значения полей и нажимаем на нижнюю синюю кнопку “Сохранить изменения”:
Вроде бы всё, однако вас должно смутить то, что опять появился английский текст в меню. Дело в том, что очевидно перевод плагина не соответствует его версии. Для начала проверим сколько слов в переводе и сколько в шаблоне. Идём в меню “Loco Translate → Плагины → WP Multilang” и нажимаем кнопку “Правка шаблона”:
Теперь смотрим, сколько исходных строк в переводе. Для этого возвращаемся в меню “Loco Translate → Плагины → WP Multilang”. наводим на наш перевод “Русский” и нажимаем на всплываюшую кнопку “Редактировать”:
Итак, мы видим коллизию, в шаблоне 97 строк, а в переводе всего 45 и они все переведены, поэтому система и говорит, что перевод 100%-ный, хотя это далеко не так. Исправить ситуацию можно всё той же волшебной кнопкой “Синхронизация” в переводе:
Вот теперь понятно, почему у нас был в меню английский текст – ведь не переведено аж 52 строки. И среди них должны быть по идее те строки, которые у нас высвечивались в меню настройки плагина WP Multilang: “Browser Redirect”, “Use prefix” и “Delete translations”. Проверим это. Для этого, внесём, например, вторую фразу в поле поиска. Результат не заставит себя ждать и покажет, что мы на верном пути:
Для того, чтобы закончить с русификацией нам остаётся осуществить перевод этих 52 фраз и всё будет нормально.
Что касается мультиязычности, то теперь, после установки плагина у вас появляется возможность писать каждую страницу на стольких языках, на скольких пожелаете, так как и в меню “Страницы” и в меню “Записи” Панели Управления автоматически добавились флаги выбранных при настройке плагина языков. При этом для того, чтобы пользователь смог произвольно выбирать язык в главное меню сайта нужно будет поместить селектор. Благо, что теперь это можно легко сделать, так как в меню Панели Управления “Внешний вид” → “Меню” появился новый пункт “Языки”:
На этом мы пожалуй и закончим эту довольно непростую тему.
9. Основы CMS WordPress, устанавливаем саму систему
Наконец то мы добрались непосредственно до вопроса установки самой CMS WordPress. Всё, что мы излагали до этого, предназначалось для того, чтобы подготовить для этой установки необходимые условия.
Первое, что нужно будет сделать на этом пути, так это скачать дистрибутив WordPress с официального сайта и положить его в корень созданного нами в предыдущей статье сайта http://site1.sysadmin.bz. Самым грамотным способом это реализовать, будет, также как и для случая MySQL, использование команды sudo wget -c https://wordpress.org/latest.zip
в Linux Shell:
Важно заметить, что действуя таким образом мы сразу получаем последнюю версию zip-архива с дистрибутивом в корневом каталоге нашего сайта. Далее его нужно будет распаковать. Распаковку архива делаем командой: sudo unzip latest.zip
Здесь следует заметить, что тяжёлые архивы всегда желательно распаковывать сразу именно в то место, где они должны лежать, ибо иначе перемещение их в распакованном виде может занять очень много времени даже в рамках файловых систем Linux, и уж тем более это касается передачи файлов через сеть по протоколу sftp: то есть сначала копируем архив, а потом его распаковываем на месте, а не наоборот – распаковываем, а потом копируем.
После распаковки в корневом каталоге сайта появится подкаталог WordPress. Наша следующая задача вытащить всю внутреннюю структуру этого подкаталога в корень сайта, а сам подкаталог (папку, директорию, кто как называет) WordPress после этого удалить. Сделать это лучше всего при помощи Midnight Commander, выделив всё содержимое папки WordPress (клавишей “+” на цифровой панели) и перенеся его при помощи клавиши F6:
Теперь можно удалить пустой каталог WordPress, а также исходный архив latest.zip и файл index.html, который мы создавали в предыдущей статье под номером 8. Сделать это можно как с помощью Midnight Commander, так и с помощью последовательного выполнения двух команд:
rm -d wordpress
rm -f latest.zip index.html
Таким образом, первый шаг мы сделали и у нас в корне нашего сайта развёрнута структура дистрибутива WordPress.
Теперь, на втором шаге нужно немного повозиться с правами к файлам дистрибутива, ибо иначе либо система будет слишком уязвима, либо наоборот, прав будет не хватать. Сначала надо сделать владельцем всех файлов дистрибутива пользователя www-data и группу с тем же именем. Далее, в соответствии с трёхзвенной структурой прав UNIX-подобных систем нам нужно дать полные права владельцу и группе на все каталоги (папки, директории) дистрибутива, но лишить права записи в них всех остальных пользователей (код в нотации триады rwx: 755). Что касается файлов, то для пользователя и группы www-data нужно дать все права, кроме права выполнения, а для всех остальных только право чтения (код 644). Самый важный и уязвимый файл wp-config.php не должен содержать вообще никаких прав для посторонних (т.е. никто, кроме пользователей группы root и www-data, а также перечисленных в файле /etc/sudoers не должен иметь даже право читать его). Делается это следующей последовательностью команд:
sudo chown -R www-data:www-data ./
sudo find . -type d -exec chmod 755 {} +
sudo find . -type f -exec chmod 644 {} +
sudo mv wp-config-sample.php wp-config.php
sudo chmod 640 wp-config.php
Пришло время заняться третьим шагом, после чего можно будет запускать установку системы через www-браузер. Шаг большой и сложный. Конечная цель – отредактировать файл wp-config.php в соответствие с нужными нам параметрами.
Если открыть этот файл, то можно увидеть, что в первую очередь надо задать ряд параметров базы данных сайта, ибо без этого установка не начнётся:
- адрес сервера, где находится база данных (у нас она тут же, поэтому оставляем localhost, но нужно понимать, и это объяснялось в статье по MySQL, что это не обязательно и можно указать любой ip-адрес, где находится ваша СУБД и соответствующий порт, если он отличается от 3306);
- имя базы данных;
- имя пользователя;
- пароль пользователя;
- кодировка базы данных;
- правила сопоставления (collation)
Для того, чтобы понять дальнейший материал вам лучше перечитать статью 6 о MySQL. Нашей локальной задачей будет создание базы данных site-1.sysadmin.bz (название может быть любое, но для избежания путаницы лучше называть базу данных и пользователя точно так же, как и сам сайт, для которого они предназначены), заведение специального пользователя базы данных (что крайне желательно, но не обязательно, так как можно использовать и созданного нами в статье 6 универсального пользователя), предоставление этому пользователю всех прав на созданную базу данных (если мы будем использовать не специального пользователя, то у него будет доступ ко многим базам данных, что ухудшает безопасность).
Итак, приступим к реализации нашего плана. Запускаем MySQL Workbench и соединяемся с СУБД. Выбираем среднюю вкладку “Schemas” в левом столбце, жмём на правую кнопку мыши, после чего выбираем левой кнопкой из контекстного меню пункт “Create Schema”:
В появившемся новом окне вводим имя базы данных, кодироку символов (Charset) и правила сопоставления (collation) оставляем по умолчанию, далее жмём на кнопку “Apply (Применить)”:
Результатом этих действий будет генерация простейшего sql-скрипта, который можно было бы написать самому. но нам здесь важно было показать, как это делается при помощи MySQL Workbench, ибо далее будут действия, приводящие к скриптам посложней. В данном случае в появившемся новом окне нам остаётся согласиться с выполнением скрипта:
После этого создастся схема база данных с заданным нами именем site1-sysadmin.bz. Далее нам лучше тут же ответить себе на вопрос о кодировке и сопоставлении. Для этого нажимаем на кнопку со второй пиктограммой напротив имени нашей схемы базы данных:
и видим в соответствующем поле, что по умолчанию у нас база данных создалась с кодировкой utf8mb4, а правило сопоставления символов в ней имеет код utf8mb4_0900_ai_ci. Эту информацию можно было бы получить и при помощи sql-запроса:
Полученную информацию мы будем вводить в соответствующее место файла wp-config.php. Напомним, что для того, чтобы приступить к этому нам осталось ещё получить имя пользователя базы данных и его пароль, а для этого надо его создать, к чему и приступим. Переходим на вкладку “Administration” в левом столбце MySQL Workbench и выбираем меню “Users and Privileges”, где нажимаем кнопку “Add Account”:
Здесь в поле “Login name” заменяем “newuser” на “site-1.sysadmin.bz”, в поле “Authentication Type” оставляем “Standard” (ещё раз отметим, что это очень важно для WordPress), в поле “Limit to Hosts Matching” – localhost, а в полях Password и “Confirm Password” вводим одинаковый достаточно сложный пароль. Остаётся нажать кнопку “Apply” и пользователь создастся.
В этом месте возможны проблемы. Если вы используете не MySQL, а MariaDB, то при запуске
MySQL Workbench вы получите вот такое
И проявляется она, эта несовместимость, в частности в процедуре создания пользователя. Поэтому этот момент для MariaDB нужно будет осуществить с командной строки самой MariaDB (предварительно, естественно, её активировав, запустив в linux shell команду: mariadb
):
CREATE USER 'site-1.sysadmin.bz'@'localhost' IDENTIFIED BY 'ваш пароль';
В остальном всё одинаково с MySQL.
Вернёмся к основному повествованию. Далее нам останется дать права нашему новому пользователю на базу данных. Делается это следующим образом. Выбираем вкладку “Schema Privileges”, далее жмём копку “Add Entry”, выбираем переключа́тель “Selected Schema”, и в ниспадающем меню находим имя нашей базы:
Нам остаётся нажать на кнопку “OK”, стать курсором на добавленную базу данных и нажать внизу справа на кнопку “Select All” (при этом выделятся все права, кроме GRANT OPTION, что нам и надо):
Всё, нажимаем на “Apply” и переходим к редактированию файла wp-config.php, для чего закрываем MySQL WorkBench (если мы всё сделали верно, то он нам больше не понадобится), открываем наш Midnight Commander, подводим курсор к файлу и нажимаем F4:
Здесь заменяем все параметры ровно так, как указано на нашем снимке с экрана и сохраняем файл (в случае редактора GNU nano жмём комбинацию клавиш {Ctrl,O} и выходим из редакторв комбинацией {Ctrl, X}). На этом всё. и если вы не совершили ни одной ошибки, то установка WordPress произойдёт без единого предупреждения практически в режиме “silent setup”.
Запуск установки осуществляется с web-браузера открыванием сайта по ссылке http://site-1.sysadmin.bz (так как мы удалили файл index.html, то отрабатывать теперь будет index.php).
Поля следующего экрана заполняем в соответствии с нашими договорённостями, задаём сложный логин и пароль администратору системы и нажимаеми на кнопку “Установить WordPress”:
Всё, если ваша виртуальная машина не слишком медленная, то через несколько секунд (в любом случае не больше чем через минуту) вы получите такой завершающий процедуру установки CMS WordPress экран:
Остаётся нажать на кнопку и войти в административную консоль вашего сайта на WordPress для того, чтобы начать его настраивать и заполнять, но об этом уже в следующих статьях:
8. Основы CMS WordPress, операции с сайтами (виртуальными хостами) Apache
Ну что, к счастью для многих, мы закончили относительно нудную процедуру установки операционного окружения WordPress и сейчас уже перейдём к более интересной практической части – его настройке.
В статье под номером 6 данной темы мы установили www-сервер Apache версии 2.4.54 (увидеть, какая версия установлена можно всегда при помощи команды: apache2 -v), проверили, что он отзывается на запрос от www-клиента (браузера) по ip-адресу, но остался открытым вопрос, а как собственно говоря, создавать, запускать, останавливать, удалять, одним словом – оперировать, сайтами, которые мы планируем размещать на этом сервере. Именно этому вопросу и будет посвящена данная статья.
Прежде чем перейти к нему непосредтсвенно, отметим, что Linux (как и любая Unix-подобная ОС), не имеет некоего единого файла (или базы данных), в котором задаются все или почти все настройки системы, как это делается в реестре (registry) Windows. Единственное, что объединяет разные настройки Linux, так это то, что они все находятся в разных файлах внутри одной директории /etc системного раздела. Это и преимущество Linux (если полетит какой-то файл настроек, то максимум, что произойдёт, так это отказ сервиса, настройки которого полетели, а сама система и все остальные сервисы будут работоспособны), и его недостаток, так как нужно копаться в огромном количестве файлов и знать их структуру. Что тут, скажешь, c’est la vie – такова жизнь!
Кстати, здесь будет уместным отметить, что начало бурного развития Интернет-технологий, приходящееся на конец 80-х, начало 90-х годов прошлого века и происходящего благодаря усилиям компаний, продвигающих различные варианты OC UNIX и её стек интернет-протоколов TCP/IP, компания Microsoft как бы прозевала, продолжая развивать свой сетевой протокол IPX. Когда же она поняла, что недооценила TCP/IP (а произошло это только в версии Windows 95), то настолько быстро его внедрила, что использовала для локальной настройки доменных имён не какой-нибудь параметр реестра, а точно такой же файл, как и в Unix-подобных системах /etc/hosts, который в Windows располагается по следующему пути: “%SYSTEMDRIVE%:Windowssystem32driversetchosts”.
Этот файл в обычной работе применяется крайне редко или даже вообще не применяется и является пустым. Однако он имеет очень важное значение и позволяет заменять для вашей конкретной машины основную работу dns-сервера, заключающуюся в подмене исмволического имени соответствующим ip-адресом. Скажем больше, даже если dns-сервер доступен и работает, но у вас для данного доменного имени есть запись в файле hosts, то она будет иметь приоритет и разрешение доменного имени будет происходить не на основе ответа dns-сервера, а на основе этой записи.
Нужно понимать, что к ресурсам в интернете обращаются не только и не столько по ip-адресам, сколько по символическим названиям и не только потому, что человеку сложнее запомнить последовательность из 12 цифр (если мы ведём речь о протоколе IP версии 4), чем некое алфавитно-цифровое название, которое, кстати может состоять всего из трёх букв (например адрес поисковой системы Google в Китае таков: g.cn), но и потому, что цифровых адресов не хватает, и на одном цифровом адресе могут в реальности находится тысячи символических. Это на первый взгляд не очень понятно, так как исторически первая и самая главная задача символических имён заключалась в необходимости избавить человечество от требования запоминать цифровые ip-адреса (интересно, что сегодняшнее поколение молодых людей уже настолько обленилось, что благодаря многочисленных мощным поисковым сервисам уже даже и символические имена сайтов не запоминает). Дело в том, что с некоторых пор на первый план вышло второе практическое значение символических имён, позволяющее как бы использовать разные названия одного и того же физического или псевдо-физического ресурса (ip-адреса), что в свою очередь позволило на одном web-сервере с одним ip-адресом держать тысячи разных сайтов. Делается это благодаря тому, что web-сервер тесно взаимодействует с dns-сервером, используя так называемые привязки ( bindings) доменных имён, а не только ip-адрес.
Таким образом, исходя из вышеизложенного материала, мы можем уже попробовать создать на некотором тестовом домене простенький одностраничный статический сайт, выдающий сакральную фразу “Привет, Мир”, впервые использованную в книге-учебнике Брайана Кернигана “Введение в язык B” (“A Tutorial Introduction to the Language B, Brian Kernighan, 1972“). Займёмся этим. В принципе, создать такой сайт мы могли бы сразу после установки Apache, а установка MySQL и PHP нам была нужна для создания сложных динамических сайтов, использующих базу данных и (или) серверное программирование.
Выберем произвольное доменное имя, скажем site-1.sysadmin.bz и пропишем его в файле C:WindowsSystem32driversetchosts на машине, с которой будет осуществляться запуск браузера (в нашем случае – машине с ОС Windows) для чего запустим простейший редактор файлов, например Notepad (Блокнот) от имени администратора, выберем файл и добавим в его конец строку:
По умолчанию сайты в Debian Linux размещаются в каталоге (папке, директории) /var/www. Сразу после установки web-сервера Apache там появился подкаталог html, в котором, в свою очередь один файл index.hml. Именно он открывался когда мы обращались из web-браузера по адресу: http://192.168.1.11 и выдавал приветствие от web-сервера Apache (смотрите в статье под номером 5 этой же рубрики).
Теперь создадим в каталоге /var/www (например, при помощи клавиши F7 в Midnigt Commander) подкаталог site-1.sysadmin.bz, а в нём файл index.html со следующим содержимым:
Казалось бы всё, теперь при обращении из браузера на хост-машине по адресу http://site-1.sysadmin.bz мы увидим приветствие в стиле, общепринятом с легкой руки Кернигана для первой программы, написанной на любым языке программирования. Однако это не так, и мы снова видим ту же страницу “Apache2 Debian Default Page”, что и при обращении по ip-адресу. Дело в том, что для получения нашего приветствия ещё нужно создать виртуальный хост Apache, который будет привязан к нужному нам доменному имени. Вот создание виртуального хоста и будет равносильно созданию сайта. Приступим к этому.
Когда речь идёт о Debian Linux или любом другом варианте, основанном на Debian (например Ubuntu), то нужно будет проделать некоторые манипуляции в каталоге /etc/apache2:
Сначала нужно создать в подкаталоге sites-available новый файл с именем, которое позволит вам в дальнейшем не запутаться, а потому лучше один в один как имя домена, но обязательно с расширением .conf, содержимое которого базируется на шаблоне 000-default.conf:
а потом символическую ссылку на только что созданный файл из каталога sites-enabled:
Можно воспользоваться для этого Midnight Commander, а можно и командой ln. Главное, чтобы на вышеприведённом экране справа в окне рядом со ссылкой @000-default.conf появилась новая @site-1.sysadmin.bz.conf, при попытке просмотра которой открывался соответствующий файл с левого окна.
Вот теперь, как бы всё, осуществляем перезапуск сервера Apache одной из предназначенных для этого команд, например /etc/init.d/apache2 restart
, пробуем снова зайти на сайт по адресу http://site-1.sysadmin.bz и вуаля, видим необходимое сакральное приветствие.
Отметим ещё, что Apache содержит несколько полезных команд, которые иногда удобнее использовать, чем заниматься файлами. Например, создать или удалить символическую ссылку (фактически как бы создать условия для запуска или остановки сайта после перезагрузки Apache) можно при помощи команд:
a2ensite site-1.sysadmin.bz
a2dissite site-1.syadmin.bz
Соответственно команды a2enmod и a2dismod позволяют подключать или отключать внешние модули Apache2. Например, для WordPress будет нужен внешний модуль rewrite, который позволяет использовать семантические URL и подключается он командой a2enmod rewrite.
Вопросом, связанным с сопоставлением ip-адресу некоего символического имени, занимаются специальные серверы (сервисы) доменных имён DNS, которые осуществляют анализ имени справа налево и обращаются к ответственным за зону 1-ого уровня корневым DNS-серверам, которые, в свою очередь потом переправляют запрос к ответственным за зону 2-ого уровня и т.д. до тех пор, пока один из серверов в цепочке чётко и ясно не укажет, какой именно ip-адрес соответствует данному символическому имени благодаря тому, что именно на нём будет указана соответствующая запись.
Если вы хотя бы вкратце знаете теорию ip-сетей версии 4, то понимаете, что ip-адреса могут быть так называемыми белыми: то есть такими, которые могут проходить через маршрутизаторы по всему миру, и серыми, которым дорога в белую зону закрыта. Используемая обычно большинством домашних компьютеров сеть класса С 192.168.1/24 относится к диапазону серых ip-сетей и доступ из неё в Интернет и к ней из Интернета не возможен без специальных ухищрений, широко применяемых сегодня.
Что касается, того, как же тогда работает у вас на компьютере Интернет, ответим, что с большой вероятностью при помощью маскарада благодаря протоколу NAT, либо при помощи прокси-сервера, суть которых с точки зрения маршрутизации заключается в том, что вместо вашего серого ip-адреса (у нас 192.168.1.11 на виртуальной машине) в интернет подсовывается адрес вашего маршрутизатора, который уже имеет белый ip-адрес (динамический или статический) .
А что до доступа извне к вашему компьютеру, то тут нужен будет, во-первых только статический ip-адрес на вашем маршрутизаторе (отдельная услуга у провайдера), и во-вторых настройка проброса портов (организация обратного прокси-сервера) на нём.
Если вы не собираетесь предоставлять интернет-сервисы наружу (в интернет), а вам достаточно того, чтобы скажем ваш WordPress-сайт был доступен вашим домочадцам из домашней локальной сети или сослуживцам из корпоративной локальной сети, то вам вообще говоря нет необходимости покупать домен и вы можете использовать любой, какой вам заблагорассудится.
Однако, если вам всё же будет нужно дать доступ к сайту отовсюду, то вам придётся поднатужиться и прикупить домен, а также организовать как минимум две новые службы внутри вашей сети, сервер доменных имён (dns-сервер) и обратный прокси-сервер, однако об этом мы расскажем позже в отдельной статье.
7. Основы CMS WordPress, завершение установки LAMP
Итак, как было сказано ранее, для того, чтобы завершить подготовку необходимого для WordPress операционного окружения, нам осталось установить серверный язык PHP. Давайте приступим к этой задаче.
Вообще говоря, PHP можно установить одной командой: apt install php
, но тогда поиск пакетов будет осуществляться в основном репозитории Debian GNU/Linux 11, а там самой последней версией будет 7.4.
Пакеты же реально последней существующей на данный момент версии PHP размещаются в отдельном репозитории, который ведёт Ondřej Surý, по адресу: https://packages.sury.org/php/dists/bullseye/main/debian-installer/binary-amd64/ и они подписаны цифровой подписью GnuPG (GNU Privacy Guard) версии 2, поддержку которой мы в нашей системе ещё не ставили, поэтому, первым делом запускаем команду установки соответствующего модуля (пакета):
apt install gnupg2
Далее нам нужно скачать файл ключа https://packages.sury.org/php/apt.gpg:
после чего переходим с помощью {Ctrl, O} в наш менеджер файлов, переименовываем файл на deb.sury.org-php.gpg, так чтобы было понятно, к какому пакету он относится и перекидываем в каталог /etc/apt/trusted.gpg.d, предназначенный специально для доверенных gpg-ключей:
Далее нам потребуется в локальный репозиторий нашей системы Debian GNU/Linux 11 вписать ссылку на репозиторий Surý, то есть как бы интегрировать его, но для того, чтобы сделать это автоматически и безошибочно, нужно будет запустить скрипт, определяющий код реальной версии Debian GNU/Linux, работающей у вас на машине с помощью модуля “lsb-release”, поэтому сначала нужно будет установить его и некоторые другие разрешающие зависимости пакеты командой:
apt install -y lsb-release ca-certificates apt-transport-https software-properties-common
Теперь можно запустить и сам shell-скрипт:
sh -c 'echo "deb [signed-by=/etc/apt/trusted.gpg.d/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
выглядящий несколько замысловато, но проделывающий очень простую работу по добавлению нового файла php.list с одной строкой в каталог /etc/apt/sources.list.d:
В принципе, если вы уверены, что у вас именно bullseye, то проще создать такой файл вручную с помощью того же Midnigh Commander. Заметим, что узнать, какая именно версия Linux у вас стоит проще всего с помощью команлы hostnamectl
(без указания каких либо параметров).
Как бы всё, подготовка к установке закончена, запускаем теперь обязательно команду: apt update
, а затем apt upgrade
(если предыдущая команда указала на возможность что-то реально обновить), после чего apt install php8.1
, и если вы всё до этого делали правильно, то пакет установится без ошибок и предупреждений.
Установка поддержки самого PHP очень важна, но недостаточна. Для подавляющего большинства приложений нужны будут модули расширений. Мы продемонстрируем здесь установку некоторых наиболее важных из них, так чтобы было понятно, как, в случае необходимости, устанавливать другие.
Вопрос расширений php, которые могут потребоваться для WordPress, обсуждается на следующей странице официальной документации CMS https://make.wordpress.org/hosting/handbook/server-environment/, где рекомендуется установить как минимум 23 расширения. Мы считаем, что некоторые из них вам могут никогда не понадобиться, однако помните, что если WordPress ведёт себя неадекватно, то первое, что должно мелькнуть в ваших мыслях, а не нуждается ли он в каком-либо расширении php, которое ещё не установлено.
Давайте, для примера, сначала установим одно расширение, позволяющее работать с zip-архивами. Делается это простой командой: apt install php8.1-zip
. На следующем снимке с экрана мы проверяем на всякий случай, всё ли хорошо у нас было с установкой сервера PHP 8.1 командой: php -v
, убеждаемся что всё нормально, после чего запускаем установку расширения:
Далее установим ещё одно расширение mbstring, от которого зависит ряд других, с использованием ключа “-y”, позволяющего избавиться от назойливого вопроса: “Хотите продолжить? [д/н]”:
Как видите, всё прошло гладко. Теперь научимся устанавливать целый ряд крайне важных расширений одной командой:
apt install php8.1-xml php8.1-intl php8.1-imagick
Здесь мы, что естественно, привели на снимке с экрана не всю выдаваемую информацию, однако главное в том, что расширения установились без единой ошибки, о чём свидетельствует отсутствие красных строк.
И последнее, что нам нужно обязательно сделать, так это установить расширение pdo_mysql. Убедимся на всякий случай, что его ещё нет среди установленных модулей. Сделать это можно несколькими способами. Например, с помощью команды Unix Shell: php -v
или с помощью команды, выдающей более подробную информацию о конфигурации php -i
. Для того, чтобы не искать в выдаче mysql глазами, лучше воспользоваться конвейерным фильтром php -i | grep mysql
:
Если вам сложно или не удобно работать в Unix Shell, то можно создать в корне сайта специальный файл с именем phpinfo.php (он всегда пригодится) со следующим содержимым:
После этого вы в любой момент сможете получить полную информацию о параметрах PHP в вашей системе, просто запустив с браузера на выполнение этот простейший php-код по ссылке http://site-1.sysadmin.bz/phpinfo.php. При этом, что немаловажно, вы получите всю информацию, что и по команде php -i, но в значительно более привлекательном графическом виде, который легче визуально разбирать.
Здесь нужно отметить, что если какое-то расширение PHP действительно установлено, то оно появится в отдельной секции выдаваемой большой таблицы, например информация об интересующем нас расширении pdo_mysql будет содержаться в таком виде:
Кроме этого, информацию о том, задействовано ли то или иное расширение PHP в вашей конфигурации, можно получить с помощью анализа файла /etc/php/8.1/apache2/php.ini. Если в секции “Dynamic Extensions” перед записью “extension=pdo_mysql” стоит признак комментария “;”, то это значит, что оно не задействовано. Этот файл вам в дальнейшем придётся неоднократно править увеличивая значения тех или иных параметров, поэтому запомните. где он находится!
Итак, мы убедились, что нужно установить расширение pdo_mysql. Поскольку расширение затрагивает довольно много компонентов системы, то сначала запускаем обязательно apt update
и apt upgrade
, а потом уже непосредственно команду, осуществляющую все необходимые нам действия в комплексе apt install php8.1-mysql
:
После этого не забываем перезагрузить Apache командой service apache2 reload
, и убеждаемся, что в выдаче командв php -i | grep mysql
появилось всё, что нам было нужно:
На этом статью об установке и настройке PHP, как о компоненте LAMP, казалось, можно было бы и закончить. Однако, довольно часто на практике требуется иметь на одном сервере Apache как минимум две версии php! Поэтому мы далее рассмотрим, как это реализовать.
Отметим здесь сразу, что в Linux есть специальная команда update-alternatives
, предназначенная для того, чтобы настраивать запуск вообще говоря разных программ под неким общим названием. Их называют альтернативами. Простейший пример – это различные редакторы текстов. Например, для выбора редактора текста по умолчанию нужно запустить команду sudo update-alternatives --config editor
.
Давайте установим ещё и PHP 7.4. Для этого (если мы всё вышеописанное делали верно) достаточно запустить команду sudo apt -y install php7.4
. Если теперь запустить команду sudo update-alternatives --config php
, то в списке выбора появится и эта версия.
Но это ещё не всё. В стандартном вариантие использования LAMP мы, хотя и имеем установленными разные версии PHP, использовать можем только ту, которая задана по умолчанию. Для того, чтобы одновременно использовать для разных приложений разные версии PHP их нужно будет каким-то образом развести, чем мы ниже и займёмся.
Для начала установим для версии 7.4 минимально необходимый набор расширений для организации одновременной работы с другими версиями командой sudo apt -y install php7.4-fpm php7.4-mysql libapache2-mod-php7.4 libapache2-mod-fcgid
. Соответствующей командой нужно будет установить эти же расширения (за исключением уже установленных ранее) и для нашей основной версии 8.1 apt -y install php8.1-fpm libapache2-mod-php8.1
.
Установка того или иного модуля ещё не означает, что он работает. Приступим к процедуре активации. Для этого сначала запустим службы FastCGI Process Manager, реализующие функцию интерпретаторов PHP для соответствующих версий командами: service php7.4-fpm start
и service php8.1-fpm start
. Если команды выполнились безмолвно, то скорее всего сервис запустился, но для пущей убедительности можно проверить это соответствующими командами: service php7.4-fpm status
и service php8.1-fpm status
.
Следующий шаг – активация необходимых дополнительных модулей Apache командой: sudo a2enmod actions fcgid alias proxy_fcgi
, и последующий полный перезапуск сервера командой: sudo systemctl restart apache2
, ну или как мы больше привыкли, командой service apache2 restart
.
Ну и последний, можно сказать, самый главный момент, который определяет, что данный конкретный сайт будет использовать отличную от используемой по умолчанию версию PHP, заключается в добавлении в конфигурацию виртуального хоста сервера Apache специального блока:<FilesMatch \.php$>
после блока <Directory> .. </Directory>.
# For Apache version 2.4.10 and above, use SetHandler to run PHP as a fastCGI process server
SetHandler "proxy:unix:/run/php/php7.4-fpm.sock|fcgi://localhost"
</FilesMatch>
В этом разделе нам осталось упомянуть, как включать или отключать ту или иную установленную версию PHP для сервера Apache. Для этого у него имеются специальные команды: a2dismod
и a2enmod
. Например, чтобы отключить модуль php7.4 нужно выполнить команду a2dismod php7.4
, после чего перезагрузить Apache командой service apache2 reload
.
6. Основы CMS WordPress, установка и настройка СУБД MySQL
Настал черёд установки MySQL, предпоследнего элемента нашей LAMPы. Дело это непростое и кропотливое, так что налейте себе чашку ароматного кофе и приготовьтесь к длинной беседе.
В дальнейшем мы теперь всегда будем считать, что установленная нами в предыдущих статьях виртуальная машина с гостевой ОС Debian Linux 11 (bullseye) запущена и у вас открыт сеанс работы с ней по протоколу ssh, в котором запущен менеджер файлов Midnight Cоmmander (помним, что в любой момент можно с помощью комбинации клавиш {Ctrl, O} переключаться в режим командной строки и обратно).
Первое, что нам нужно будет сделать, это скачать последний стабильный дистрибутив (apt-репозиторий) СУБД MySQL с официального сайта проекта, зайдя на него по адресу: https://dev.mysql.com/downloads/repo/apt:
Обращаем внимание на то, что указано на этой странице касательно проверки целостности пакета и понимаем, что нам нужно установить пакет GnuPG, что и делаем в первую очередь с помощью команды: apt install gnupg
Скачать дистрибутив можно при помощи веб-браузера в Windows, но тогда он попадёт к вам на хост-машину, а потом его придётся перекидывать по протоколу SFTP на гостевую (например, при помощи очень полезной утилиты WinSCP), поэтому здесь мы применим более правильный в данной ситуации подход и скачаем файл прямо из командной строки Linux командой: wget -c https://dev.mysql.com/get/mysql-apt-config_0.8.23-1_all.deb
Теперь полученный файл нужно будет распаковать при помощи команды: dpkg -i mysql-apt-config_0.8.23-1_all.deb
, запуск которой приводит к появлению следующего экрана:
где можно выбрать другой (кластерный) вариант установки сервера, но мы оставляем всё как есть, выбираем “ОК” и нажимаем “Enter”:
Результатом работы команды dpkg является появление нового файла mysql.list в локальном репозитории apt, расположееном в каталоге /etc/apt/sources.list
:
Всё, теперь можно устанавливать СУБД MySQL при помощи команды: apt install mysql-server
, предварительно запустив на всякий случай сначала: apt update
и apt upgrade
, если это окажется необходимым:
Заметим здесь, что мощнейшая современная утилита APT (Advanced Packaging Tool). пришедшая на смену apt-get, на самом деле как бы сама может скачивать и распаковывать пакеты Debian при помощи специальных ключей, и многие даже не знают, что делает она это обращаясь к тем же wget и dpkg. Наша цель показать вам как можно глубже анатомию процессов и думается, что на примере устанвоки MySQL нам это удастся.
Итак, запускаем установку и на предупреждение о том, готовы ли вы к тому, что этот процесс отнимет у вас 290 мегабайт на жёстком диске, конечно же отвечаем согласием “д”:
На вопрос о пароле для пользователя root придумываете и вводите сложный пароль и подтвержаете его, а на вопрос о методе аутентификации по умолчанию соглашаетесь с использованием плагина, работающего на основе более безопасного алгоритма хеширования, версии 2 (SHA-256), хотя WordPress и не поддерживает его. Позже мы объясним, как решать это вопрос.
Всё, если в процессе установки на чёрном экране не появилось никаких строк другого цвета, кроме белого, то на этом установка MySQL завершается и всё выгдядит относительно просто, однако дьявол, как говорится, в деталях, а именно в настройке MySQL, к которой и приступим.
Для начала проверим, всё ли действительно хорошо с нашей установкой:
Если у вас также, как и у нас, значит всё отлично, если нет, то смотрим журнал ошибок, находящийся в файле /var/log/mysql/error.log. Если там указана проблема, то ищем её решение в интернет.
Заметим, что при нормальном завершении установки журнал должен выглядеть следующим образом:
Итак, мы установили MySQL и убедились, что установилось всё корректно. Теперь нам будет нужен удобный инструмент, заменяющий (а точнее дополняющий) возможности стандартного клиента mysql, работающего из командной строки. В последних версиях СУБД в состав дистрибутива входит MySQL Workbench – мощная программа с графическим интерфейсом, пользоваться которой можно с любой машины, откуда доступен установленный нами сервер по нужному порту (по умолчанию 3306).
Давайте скачаем MySQL Workbench, скопируем скачанный файл mysql-workbench-community-8.0.30-winx64.msi
в наш каталог дистрибутивов D:Distrib.dsk
после чего запустим и проведём установку по умолчанию в режиме complete (полная установка) на нашей host-машине. Результатом будет следующее окно, где будет сказано, что MySQL Workbench не смог найти ни одного запущенного MySQL-сервера и это правильно, так как по умолчанию к серверу есть доступ только с той машины, на которой он установлен и, кроме того, к нему нельзя соединяться удалённо при помощи логина root:
Первое, что нам нужно будет сделать для того, чтобы преодолеть данные препятствия (а они необходимы для улучшения безопасности), так это открыть доступ к серверу с хост-машины, а можно и вообще с вашей внутренней сети 192.168.1/24, если вы уверены в том, что в ней не будут работать злоумышленники (здесь, в случае домашней сети, речь о ваших домочадцах, а в случае рабочей – о ваших сотрудниках). Для этого с помощью Midnight Commander находим на сервере файл /etc/mysql/mysql.conf.d/mysqld.cnf, нажимаем F4 для вызова редактора, добавляем в конец файла строку: bind-address=0.0.0.0
и сохраняем изменения:
Второе, что нужно будет сделать – это завести с помощью утилиты командной строки другой логин, который не такой очевидный, как root, и дать ему все права на управление СУБД. Делается это следующей последовательностью действий:
1) запускаем команду linux shell: mysql --user=root --password
, вводя в диалоге пароль пользователя root, что позволяет зайти нам на сервер под логином root (здесь имеется ввиду пользователь MySQL, а не Linux) и получить полный доступ к выполнению всех команд MySQL;
2) запускаем уже sql-команду : create user 'ваш-логин'@'%' identified by 'ваш-пароль';
3) проверяем, появился ли пользователь sql-командой: SELECT User, Host FROM mysql.user;
4) даём все права на все базы sql-командой: grant all privileges on *.* to 'ваш-логин'@'%' with grant option;
5) инициируем права sql-командой: flush privileges;
6) возвращаемся в linux-shell командой exit
;
Отметим, что излагаемый здесь материал подразумевает, что вы находитесь в DMZ (то есть к вам с внешней сети невозможно зайти по любому порту, кроме 80) и вам нет смысла устанавливать и настраивать Firewall (Брэндмауэр), однако, если он у вас всё же стоит, то нужно будет обязательно открыть порт 3306.
Теперь перезапускаем MySQL-сервер командой: service mysql restart
и возвращаемся к окну MySQL Workbench, где нужно будет выбрать меню Database-Connect to Database или сразу нажать комбинацию клавиш {Ctrl,U}:
В открывшемся окне нужно ввести правильно логин, который вы создавали вышеприведённой sql-командой create user и адрес виртуальной машины (у нас 192.168.1.11), а далее в следующем окне пароль пользователя, и если всё, что описано выше, было сделано верно, то вы успешно соединитесь с СУБД и получите основное рабочее окно MySQL Workbench:
Здесь можно видеть, что у нас ещё нет созданных баз данных (схем), но если нажать на кнопку “Users and Privileges”, то появится список пользователей, среди которых будут созданные нами и автоматически созданные системой. Для нас тут будет представлять интерес разница между пользователем root и пользователем, под именем которого мы соединились с MySQL:
Как видите, у пользователя root разрешение только на вход с localhost, а у созданного вами пользователя %, что означает отовсюду.
Кроме того, когда мы будем создавать пользователей для конкретных баз данных, то будем выбирать Authentification Type: “Standard”, поскольку, как уже говорилось, WordPress не поддерживает SHA 2.
Обратим ещё ваше внимание но то, что если нажать на кнопку “Server Status”, то можно увидеть подробную информацию о состоянии сервера MySQL, что бывает очень полезным.
Также заметим, что MySQL Workbench – достаточно новая программа-клиент MySQL и пока ещё сыровата, что проявляется в разного рода “странностях” при работе с ней. Если у вас такое произошло, произведите обновление вида или повторно соединитесь. Коме того, рекомендуется постоянно обновлять это приложение. В любом случае, не забывайте, что у вас всегда есть в распоряжении инструменты командной строки.
На этом мы заканчиваем статью об установке и настройке СУБД MySQL, но к материалу, изложенному здесь будем ещё не раз возвращаться, когда речь пойдёт об установке конкретных сайтов, построенных на CMS WordPress.
5. Основы CMS WordPress, установка www-сервера
Итак, после того, как мы установили Linux, следующей нашей целью является web-сервер Apache.
Однако, прежде чем его устанавливать, нам нужно будет потрудиться установить и настроить себе простейшее окружение для работы с Linux. В предыдущей статье мы показали, что к командной строке Linux shell можно получить доступ с помощью Менеджера Hyper-V, однако делать это мы будем только тогда. когда по той или иной причине не будут доступны другие средства. Если вы были внимательны, то заметили, что наряду с ядром Linux и основными утилитами, мы установили ещё и ssh-сервер. Пришло время этим воспользоваться. Вы можете установить любой ssh-клиент, который вам по душе и к которому вы привыкли, например, мы предпочитаем обычно старый добрый PuTTY, однако здесь мы покажем, как использовать родные средства Windows:
Если наша виртуальная машина выключена, то запускаем её как показывалось в предыдущей статье (Кнопкой “Пуск” во вкладке “Действия”), при этом кнопку “Подключить” нажимать не нужно;
-
- Нажимаем на комбинацию клавиш {Windows,R}, набираем cmd, нажимаем на Enter (или мышью на кнопку “ОК”), после чего проверяем связь с виртуальной машиной, набрав и выполнив в появившемся окне на чёрном экране команду
ping ip-адрес-виртуальной-машины
- Если команда ping отработала (то есть от гостевой ОС Linux есть ответ), то набираем следующую команду:
ssh ваш-логин-в-Linux@ip-адрес-виртуальной-машины
: - На появившийся вопрос отвечаем утвердительно, то есть набираем yes и жмём Enter;
- Теперь достаточно ввести верно ваш пароль и вы в командной строке Debian/GNU Linux 11:
- Операционная система Debian GNU/Linux постоянно развивается, поэтому, даже если вы ещё вчера установили её, то уже сегодня имеет смысл получить информацию о доступных обновлениях пакетов программ, и делается это при помощи команды:
sudo apt update
,а результатом её работы может быть совет по запуску обновления того или иного пакета или нескольких пакетов, что можно сделать посредством команды:sudo apt upgrade
- В принципе, уже после этого можно приступить к установке сервера Apache, однако потом нам придётся много работать с файлами и чтобы не делать это каждый раз с командной строки, имеет смысл поставить файловый менеджер, а поскольку мы не будем ставить никаких систем поддержки графических интерфейсов (они попросту не нужны для наших целей), то выбор невелик и ставить нужно Midnight Commander, который распространяется по той же лицензии GNU GPL и позволяет нам сильно упростить многие операции с файлами, в том числе их просмотр и редактирование, при всём при этом, что самое замечательное, не отвергая возможности использования командной строки, так как всегда можно перейти к ней при помощи комбинации клавиш {Ctrl, O}, не запуская отдельного процесса и тем самым выполняя команды в привилегированном режиме не вводя их каждый раз в виде параметра команды “sudo”
- Итак, запускаем установленный Midnight Commander командой:
sudo mc
, вводим последний раз (по крайней мере до его закрытия) пароль и любуемся стандартным синим двухоконным менеджером файлов с интерфейсом, известным нам ещё с 1986 года благодаря Norton Commander. Далее, поскольку менеджер файлов сейчас нам не нужен, нажимаем {Ctrl, O} и попадаем снова в командную строку Unix shell (стоит заметить, что нажав в любой момент на эту же комбинацию клавиш, мы снова можем быстро вернуться к Midnight Commander, что крайне удобно) - Теперь мы готовы к установке web-сервера, но прежде чем его установить, для того, чтобы был очевидней результат попробуйте в любом интернет-браузере вашей локальной сети ввести адрес: “http://192.168.1.11” и убедитесь, что будет выдана диагностика “Попытка соединения не удалась”, что естественно, так как нет сервера, который должен отвечать на http-запросы.
- Всё, набираем в командной строке:
apt install apache2
- На вопрос отвечаем утвердительно, набрав букву “д” и нажав на Ввод (Enter), что приведёт к тому, что необходимые пакеты установятся в вашу систему и Linux shell будет готов принимать очередные команды.
- Если вы всё сделали правильно, то на этом процесс установки web-сервера Apache заканчивается, а для проверки нужно найти страницу браузера. где вам выдавалась ошибка соединения, нажать {Ctrl, F5} и увидеть такую картинку:
- Обратите внимание на то, что к серверу пока можно обращаться только по протоколу http: и только по ip-адресу, а о том, как настроить сервер для работы с https, а также так, чтобы он откликался на имена доменов поговорим в одной из следующих статей, где будет обсуждаться тема создания и настройки сайтов на web-сервере Apache установленной нами ветки 2.4.x
- У нас всё прошло гладко, сервер установился и запустился без единого сообщения, однако на практике, в зависимости от тех или иных обстоятельств, установленный вами сервер может выдать предупреждение или даже сообщение об ошибке запуска, и тут нужно будет изучать журнал ошибок, для чего нажимаем на комбинацию клавиш {Ctrl, O), заходим в каталог varlogapache2, находим в нём файл error.log, жмём F3, изучаем ошибку по её номеру, ищем варианты решения проблемы в Интернет (или на сленге “гуглим проблему”), решаем её, а затем проверяем решение при помощи следующей команды:
systemctl status apache2.service -l --no-pager
и только если она не выдаёт никаких красных строк, можно считать, что вы завершили установку web-сервера.
- Нажимаем на комбинацию клавиш {Windows,R}, набираем cmd, нажимаем на Enter (или мышью на кнопку “ОК”), после чего проверяем связь с виртуальной машиной, набрав и выполнив в появившемся окне на чёрном экране команду