Рассмотрим как развернуть WordPress на Linux на сервере или на виртуальной машине для начинающих.
SSH подключение
Для того, чтобы начать настраивать WordPress на Linux в первую очередь мы должны подключиться к серверу или к виртуальной машине через SSH — протокол шифрования, через который мы получаем доступ к серверу.
Для подключения мы будем использовать программу PuTTy. Думаю, что большинство пользователей работает в Windows, поэтому инструкция будет для этой ОС.
После запуска программы мы вводим необходимый IP адрес сервера. После попадаем в окно терминала и вводим последовательно логин и пароль.
Давайте пройдемся по шагам немного подробнее:
Скачиваем .exe-файл:
Запускаем:
Разрешаем добавить ключ сервера в кеш:
Видим запрос логина и пароля для сервера. Вводим логин и пароль, который получили при установке:
После ввода логина и пароля мы видим окно консоли (терминала):
Большинство современных веб-серверов используют Nginx. Ранее был Apache, но сайты работали медленнее и тратилось много ресурсов.
По сути, сервер отдает по http/https нужные файлы, после чего браузеры их интерпретируют и отображают пользователю.
Изначально веб-сервер, а тем более браузер, не знают про PHP и дру. языки программирования. Сам браузер работает с HTML, CSS, Javascript.
Как сказано выше — Apache до Nginx использовался почти на всех веб-серверах, но Апач съедал много ресурсов. Nginx работает в связке с PHP-FPM.
Апач до сих пор используется и под него есть огромное количество разных модулей, но для большинства проектов, которым не нужна лишняя функциональность, больше подойдет Nginx или lighthttpd.
Nginx
Продолжаем настраивать WordPress на Linux. В нашем случае мы остановимся на Nginx, разработанный Игорем Сысоевым http-proxy-сервер. Создатель сервера называет его proxy-сервером, а не web-сервером, как принято многими.
У Nginx асинхронная событийная архитектура и он сам по себе не выполняет никаких «тяжелых» процессов. Таким образом, он быстрее обрабатывает запросы и потребляет меньше ресурсов.
В то время как Apache обрабатывает один запрос пользователя, Nginx обрабатывает множество, даже тысячи запросов. Т.е. для этого proxy-сервера всё примерно выглядит так:
- Получает запрос пользователя
- Отправляет его на backend (например php-fpm)
- В то время как backend занят Nginx обрабатывать остальные запросы пользователей
- После обработки запроса и отправки ответа php-fpm Nginx передаст ответ назад пользователю
Как уже выше было написано — мы будем использовать пакет PHP-FPM, который считается посредником между сервером и программным обеспечением, которое будет работать с интерпретатором (PHP-FPM) через FastCGI.
PHP-FPM решает много задач и является полноценным менеджером, он может работать с выполнением процессов, ограничениями, утечками памяти и т.д. Сам процесс выглядит так:
- Пользователь вводит адрес сайта
- Запрос перехватывает Nginx
- Nginx передает запрос php-fpm
- php-fpm запускает PHP
- PHP подключается к Базе Данных и забирает всё что нужно
- php-fpm возвращает данные Nginx
- Nginx отправляет всё в браузер пользователю
Пакетные менеджеры Linux
Обычно рассматривают две версии Linux для работы — Redhat / Centos и Debian / Ubuntu. Кроме того, нужно понимать, что в нашей ОС существует система репозиториев или пакетов.
Пакеты находятся на сервере и ОС знает как они зависят друг от друга. Указанные выше версии используют разные системы пакетов и разные репозитории.
В репозиториях хранятся разные пакеты под разные цели и бывают они официальные и не официальные. В Linux можно подключить несколько репозиториев одновременно, в которых разные нужные пакеты для работы.
За всё это отвечают пакетные менеджеры:
- В Redhat / Centos — это YUM
- В Debian / Ubuntu — это Apt
Пакетный менеджер помогает с подключением к репозиторию, скачиванием и установкой нужного пакета. У менеджера много возможных функций.
Для установки можем использовать следующую команду:
$ apt-get install <название>
для debian / ubuntu или для redhat / centos:
$ yum install
В нашем случае мы используем Centos 8 вместе с yum и dnf.
Установка первой программы
Основной пользователь Linux — это пользователь с именем root. Делать всё от имени root не безопасно. Чтобы работать не под root мы используем команду sudo.
Команда sudo позволяет передать права на запуск команд с правами root пользователям. Это может быть одна команда или любые команды, предоставить можно всё что угодно, но быть нужно здесь очень осторожным.
На данном этапе мы будем работать под root.
После подключения к серверу по SSH мы установим первую программу wget такой командой:
$ yum install wget
Справку по команде можно посмотреть другой командой:
$ man wget
Установка Midnight Commander
Далее мы установим Midnight Commander, который упростит работу в Линуксе.
Программа находится в официальных репозиториях CentOS, поэтому установка ее без проблем не вызовет:
$ dnf install mc
В более старых версиях вы можете установить midnight commander centos с помощью диспетчера пакетов yum:
$ yum install mc
Вы можете запустить программу, просто набрав в терминале mc. Чтобы сделать интерфейс черно-белым, используйте параметр -b
: mc-b. Чтобы отключить поддержку мыши, опция -d
: mc-d.
Для редактирования файла в mc необходимо использовать параметр -e: mc-e. Чтобы удалить программу так же, как вы ее установили:
$ dnf remove mc
Также мы установим дополнительно текстовый редактор nano. Командой ниже можно установить сразу два редактора:
$ yum install mc nano
Горячие клавиши Midnight Commander
Текущий объект — файл или каталог на котором установлен курсор.
Alt+Enter, Esc+Enter — Вставить текущий объект в командную строку.
Alt+p, Esc+p — Вернуть предыдущую выполненную командную строку.
Alt+n, Esc+n — Вернуть последующую выполненную командную строку.
Alt+a, Esc+a — Посылает в командную строку результат выполнения команды pwd
(полный путь до текущего каталога).
Alt+c, Esc+c — Вызывается меню быстрой смены текущего каталога на активной панели.
Alt+h, Esc+h — Вызов меню последних выполненных команд.
Insert — Выделение текущего объекта.
Ctrl+\ — Вызывается меню часто используемых каталогов.
F3 — Просмотр файла.
Shift+F3 — Просмотр файла raw без учета расширения.
Shift+F4 — Создает новый файл.
Ctrl+o — Скрытие панелей.
Ctrl+s — Быстрый поиск файла или каталога.
(Ctrl+x)+t (нажимаем Ctrl+x затем отпускаем и нажимаем t) — Вставка всех выделенных объектов в командную строку.
(Ctrl+x)+c (нажимаем Ctrl+x затем отпускаем и нажимаем c) — Просмотр/правка прав доступа текущего объекта.
(Ctrl+x)+o (нажимаем Ctrl+x затем отпускаем и нажимаем o) — Просмотр/правка владельца/группы для текущего объекта.
(Ctrl+x)+l (нажимаем Ctrl+x затем отпускаем и нажимаем l) — Создать жесткую ссылку с текущего объекта.
(Ctrl+x)+s (нажимаем Ctrl+x затем отпускаем и нажимаем s) — Создает символьную ссылку symlink для текущего объекта.
(Ctrl+x)+(Ctrl+s) (нажимаем Ctrl+x затем отпускаем и нажимаем Ctrl+s) — Редактировать symlink.
(Ctrl+x)+j (нажимаем Ctrl+x затем отпускаем и нажимаем j) — Показываем все фоновые задачи.
(Ctrl+x)+q (нажимаем Ctrl+x затем отпускаем и нажимаем q) — Быстрый просмотр содержимого файла на второй панели.
(Ctrl+x)+i (нажимаем Ctrl+x затем отпускаем и нажимаем i) — Быстрый просмотр информации о текущем объекте на второй панели.
Esc+(Shift+?) — Вызывается меню расширенного поиска файлов.
Alt+o — неактивная панель переходит в каталог на который указывает активная панель.
Установка Nginx, MySQL и PHP
Устанавливаем nginx:
$ yum install -y nginx
Эта команда находит программу и скачивает её из официального репозитория самостоятельно.
Теперь устанавливаем систему управления базами данных (СУБД):
$ yum install -y mariadb-server
Под базой данных многие называют СУБД MySQL, что не совсем корректно. В свое время компания Oracle выкупила компанию Sun, где разрабатывалась MySQL, но сделала для этого OpenSource продукта свою ветку под названием MariaDB.
Далее переходим к установке PHP (7.2) и всех дополнительных модулей:
$ dnf install php php-fpm php-zip php-mysqli php-curl php-gd php-mbstring php-xml php-xmlrpc
Проверить версию PHP можно командой:
$ php -v
Мы должны увидеть нечто подобное:
Запуск всех установленных сервисов проверяем командой:
$ systemctl status nginx
Что выведет:
Демоны Linux
Здесь мы сделаем маленькое отступление и поговорим про демонов Линукс. Но не про мистических, а про daemon («демон») Linux.
«Демон» простыми словами — это сервис в Линукс, аналогичный Windows. «Демон» — это постоянно запущенная программа.
В Линуксе есть менеджер инициализации systemd, который и отвечает за все процессы «демона» — запуск, мониторинг, остановку. Менеджер также перезапускает процессы, если они по какой-то причине остановились.
Ручное управление «демонами» не рекомендуется, трудоёмко и сложно.
Утилита systemctl (выше) используется как посредник между пользователем и менеджером инициализации systemd, через которую можно запускать, останавливать, смотреть статус «демона».
Следующими тремя командами мы проверим запущены ли нужные нам сервисы:
$ systemctl status mariadb
$ systemctl status nginx
$ systemctl status php-fpm
В терминале увидим это:
В окне терминала мы видим сообщение Inactive (Dead)
, что говорит нам о том, что сервисы не запущены на данный момент.
Чтобы всё заработало мы используем другие три команды:
$ systemctl start nginx
$ systemctl start mariadb
$ systemctl start php-fpm
Также хорошо бы ввести еще три команды, чтобы включить автозагрузку нужных нам сервисов:
$ systemctl enable nginx
$ systemctl enable mariadb
$ systemctl enable php-fpm
Мы увидим такой вывод — active (running)
:
Настройка Nginx под WordPress
Основные нужные нам сервисы и «демоны» установлены и запущены.
На данном этапе мы можем переходить к настройке Nginx под нашу CMS WordPress (CMS — это «система управления контентом»).
Основной конфигурационный файл Nginx находится под адресу: /etc/nginx/nginx.conf. Нам нужно посмотреть что есть в этом файле. Это мы можем сделать командой cat:
$ cat /etc/nginx/nginx.conf
В терминале увидим:
Для редактирования файлов мы уже устанавливали удобный файловый менеджер Midnight Commander (см.выше). Это менеджер мы запускаем, чтобы начать редактирование файлов: mc.
После запуска менеджера мы оказываемся в корневой директории нашего сервера (/). Далее мы переходим в /etc/nginx.
Мы также можем использовать командную строку для перехода между директориями, для этого есть команда cd
после которой надо ввести нужный нам адрес из любого места:
$ cd /etc/nginx
Теперь открываем файл nginx.conf в Midnight Commander клавишей F4, после чего увидим вопрос про выбор редактора.
Начинающие разработчики часто используют nano, тогда как более продвинутые используют vim (или vi). Освоение vim дело не простое, но он позволяет делать много сложных вещей и нравится профессиональным разработчикам.
Редактор nano проще и процесс работы в нем сравним с классическим блокнотом. Далее мы жмем 1 и Enter.
Для каждого сайта лучше создавать свой конфигурационный файл, а потом использовать удобную строку include
.
Nginx создаст единый большой конфигурационный файл и подгрузит в него всё содержимое папки /etc/nginx/conf.d/*conf.
Закрываем nginx.conf сочетанием клавиш Ctrl-X и заходим в conf.d.
Скачивание файлы возможно через горячие клавиши Midnight Commander, которые мы приводили раньше. Скачиваем конфиг сайта и редактируем его:
$ sudo wget https://uzabila.ru/static/files/mywordpresswww.conf
Для редактирования жмем F4.
server_name
нужен серверу для распределения входящих запросов, т.е. для какого сайта они сделаны.
Далее нам нужно создать папку для нашего сайта, а путь указываем в конфигурационном файле.
Сохраняем файл и выходим из файлового менеджера — Ctrl-X и далее жмем ‘Y‘ и Enter.
…
Выходим из менеджера, жмем F10 и проверяем правильность настройки:
$ nginx -t
Далее обновленный конфиг. файл загружаем в память nginx командой:
$ systemctl reload nginx
После этого создаем новую директорию на сервере командой:
$ mkdir -p /var/www/mywordpress.ru/
Предоставляем nginx права на чтение командой chown, которая передаст права пользователю и группе под название nginx, которых он сам создал при установке:
$ chown -R nginx:nginx /var/www/
Настройка PHP-FPM
Мы закончили с настройкой Nginx и переходим к настройке PHP-FPM, о котором мы говорили ранее — «посреднике» между PHP и пользователем.
Конфиг PHP-FPM находится в директории: /etc/php-fpm.d/. Переходим в него:
$ cd /etc/php-fpm.d/
Далее удаляем стандартный файл и создаем свой. Скачиваем файл конфига:
$ sudo wget https://uzabila.ru/static/files/mywordpressphp.conf
Проверяем:
$ systemctl reload php-fpm
Перезапускаем php-fpm:
$ systemctl restart php-fpm
Теперь нужно всё проверить. Создаем в каталоге сайта файл по адресу: /var/www/mywordpress.ru. Для этого нам поможет команда touch:
$ touch /var/www/ubuntu-wordpress.ru/index.php
$ nano /var/www/ubuntu-wordpress.ru/index.php
В файле пишем:
<?php
phpinfo();
phpinfo(INFO_MODULES);
?>
Теперь нужно зайти на сайт либо через интернет (если всё производится на рабочем сервере) либо на виртуальной машине.
По картинке видно, что всё хорошо.
Настройка MySQL
Нам нужна база данных для работы нашего WordPress сайт. Существует огромное количество разных систем управления Базами Данных (СУБД).
Самые популярные для небольших проектов — это MySQL и PostgreSQL. Но почти все сайта на Вордпрессе работают с MySQL.
Подключаемся к mysql с паролем, который был задан в процессе установки ранее ( у нас был — Pge0ISgvxUoh):
$ mysql -uroot -p
Теперь создадим базу данных для нашего WordPress:
create database wp_mysitedb;
После создадим пользователя wpuser1 с паролем samplepassword:
CREATE USER 'wpuser1'@'localhost' IDENTIFIED BY 'samplepassword';
После @ указываем адрес с которого вы будете подключаться к БД. Обычно это localhost — виртуальный IP адрес 127.0.0.1.
Если у вас есть софт, и весь софт находятся на одном компьютере, то взаимодействие происходит через localhost. Но если БД на одном сервере, а веб-сервер на другом, то нужно создавать пользователя wpuser1@<адрес с которого обращается веб сервер>.
Теперь пользователю wpuser1 нужно предоставить права на чтение и запись в созданную базу данных:
GRANT ALL PRIVILEGES ON wp_mysitedb. * TO 'wpuser1'@'localhost';
Затем нам нужно применить все настройки:
FLUSH PRIVILEGES;
Здесь желательно скопировать куда-нибудь имя созданной базы, пароль и имя пользователя. Пригодится позже.
Выходи из MySQL командой quit.
Установка WordPress
Для начала скачиваем WordPressс с официального сайта в виде архива по ссылке https://ru.wordpress.org/download/ или https://ru.wordpress.org/latest-ru_RU.tar.gz.
Установка WordPress очень простая и просто почти везде жмем «Далее». Переходим в каталог /var/www/mywordpress.ru/ командой:
$ cd /var/www/mywordpress.ru/
Скачаем в него архив с WordPress командой:
$ sudo wget https://ru.wordpress.org/latest-ru_RU.tar.gz
Распакуем архив командой:
$ tar -xzvf latest-ru_RU.tar.gz
Расширение tar.gz говорит о том, что этот файл является архивом, который запакован Tar и который просто собирает несколько файлов в один без сжатия, а далее сжимается архиватором Gzip.
Tar сам запускает gzip и для этого мы указали ключ -z. Ключ -x говорит команде tar
, что мы распаковываем, а не запаковываем, а ключ -f говорит Tar вывести результат распаковки на экран. Если его убрать, то он молча распакует архив и всё.
Все должно распаковаться в папку wordpress, что можно проверить командой:
$ ls -l
Далее копируем содержимое папки wordpress командой копирования cp
в каталог /var/www/mywordpress.ru
:
$ sudo cp -rp wordpress/* /var/www/mywordpress.ru/
Ключ -r говорит о том, что надо скопировать рекурсивнно (т.е. все что лежит внутри), ключ -p говорит сохранить все права на файл не перезаписывая их, а звездочка в конце wordpress/*
говорит, что надо сначала скопировать именно файлы внутри папки wordpress.
Команда без звездочки:
sudo cp -rp wordpress/* /var/www/mywordpress.ru/
попробует скопировать папку wordpress
в /var/www/mywordpress.ru/
и выдаст ошибку, т.к. такая папка уже существует.
Следующей командой проверяем скопированные файлы:
$ ls -l
Далее нужно дать nginx права на эту папку на чтение и исполнение того, что в ней содержится (мы уже делали нечто подобное ранее).
Теперь в браузере (можно Chrome или другой) вводим DNS адрес сайта или виртуальной машины:
Жмем “Вперёд!” и заполняем на следующей странице данные mysql — название базы данных, имя пользователя и пароль (всё это мы скопировали ранее, чтобы как раз сейчас использовать):
Жмем «Отправить».
На следующей странице завершаем настройку, заполнив оставшиеся поля среди которых имя сайта и пароль от админки:
Сама админка сайта изначально находится по адресу:
<имя_сайта>/wp-admin
На этом всё, установка WordPress на Linux прошла, движок настроен и работает. Далее разработчики могут приступить к использованию этой установки WordPress.