WordPress — это система управления контентом (CMS), которая позволяет размещать и создавать веб-сайты. WordPress содержит архитектуру плагинов и систему шаблонов, поэтому вы можете настроить любой сайт под свой бизнес, блог, портфолио или интернет-магазин. Основное внимание в этом учебнике уделяется не тому, как создавать сайты на wordpress.
В этом учебнике я покажу вам, как подготовить инфраструктуру хранения данных на двух серверах Linux и реализовать базовое веб-решение с помощью WordPress. WordPress — это бесплатная система управления контентом с открытым исходным кодом, написанная на PHP и работающая в паре с MySQL или MariaDB в качестве бэкенда системы управления реляционными базами данных (RDBMS).
Этот проект состоит из двух частей:
-
Настройка подсистемы хранения для Web-сервера и сервера баз данных на базе ОС Linux. Цель этой части — дать вам практический опыт работы с дисками, разделами и томами в Linux.
-
Установите WordPress и подключите его к удаленному серверу баз данных MySQL. Эта часть проекта закрепит ваши навыки развертывания Web и DB уровней Web-решения.
Как инженер DevOps, глубокое понимание основных компонентов веб-решений и умение устранять неполадки сыграют важную роль в вашем дальнейшем прогрессе и развитии.
- Трехуровневая архитектура
- Создание и прикрепление томов
- Создание структуры каталогов.
- Обновление файла /ETC/FSTAB
- Подготовка сервера базы данных
- Установите WordPress на ваш веб-сервер EC2 Instance
- Установите MySQL на ваш DB-сервер EC2
- Настройка базы данных для работы с WordPress
- Настройте WordPress для подключения к удаленной базе данных.
Трехуровневая архитектура
Как правило, веб- или мобильные решения реализуются на основе так называемой трехуровневой архитектуры.
Трехуровневая архитектура — это модель архитектуры клиент-серверного программного обеспечения, состоящая из трех отдельных уровней. К ним относятся:
- Презентационный уровень (PL): Это пользовательский интерфейс, такой как клиентский сервер или браузер на вашем ноутбуке.
- Бизнес-уровень (BL): Это внутренняя программа, которая реализует бизнес-логику. Приложение или веб-сервер
- Уровень доступа к данным или управления (DAL): это уровень для хранения компьютерных данных и доступа к ним. Сервер базы данных или сервер файловой системы, такой как FTP-сервер или NFS-сервер.
В этом проекте вы получите практический опыт, демонстрирующий трехъярусную архитектуру, а также убедитесь, что диски, используемые для хранения файлов на серверах Linux, адекватно разбиты на разделы и управляются с помощью таких программ, как gdisk и LVM соответственно.
Требования:
- Ваша трехуровневая установка
- Ноутбук или ПК для работы в качестве клиента
- Сервер EC2 Linux в качестве веб-сервера (здесь вы установите WordPress)
- Сервер EC2 Linux в качестве сервера базы данных (DB).
Примечание: Мы используем ОС RedHat для этого проекта, вы должны быть в состоянии самостоятельно запустить экземпляр EC2. Также при подключении к RedHat вам нужно будет использовать пользователя ec2-user. Строка подключения будет выглядеть как ec2-user@public-ip-address.
Создание и прикрепление томов
-
Создайте и прикрепите новый том к вашему серверу Linux.
Результаты:
Примечание: Убедитесь, что зона доступности тома должна быть такой же, как и у вашего Linux-сервера. -
Подключитесь к серверу linux и проверьте, подключен ли том, используя эту команду:
lsblk
Результаты:
-
Используйте команду df -h для просмотра всех подключений и свободного пространства на вашем сервере.
sudo df -h
Результаты:
-
Используйте утилиту gdisk для создания одного раздела на каждом из 3 дисков
sudo gdisk /dev/xvdf
а затем используйте команду w и введите «y» для создания одного раздела.
Повторите то же самое для двух других дисков.
sudo gdisk /dev/xvdg sudo gdisk /dev/xvdh
Результаты:
-
Используйте утилиту lsblk для просмотра нового раздела на каждом из 3 дисков.
sudo lsblk
Результаты:
-
Установите пакет lvm2 с помощью sudo yum install lvm2. Выполните команду sudo lvmdiskscan для проверки наличия доступных разделов.
sudo yum install lvm2 sudo lvmdiskscan
Результаты:
Примечание: В отличие от ubuntu, где используется apt, для redhat менеджером пакетов является yum. -
Используйте утилиту pvcreate, чтобы отметить каждый из 3 дисков как физический том (PV), который будет использоваться LVM.
sudo pvcreate /dev/xvdf sudo pvcreate /dev/xvdg sudo pvcreate /dev/xvdh
Результаты:
-
Проверьте, что физический том был успешно создан, выполнив sudo pvs.
sudo pvs
Результаты:
-
Используйте утилиту vgcreate, чтобы добавить все 3 PV в группу томов (VG). Назовите VG webdata-vg
sudo vgcreate webdata-vg /dev/xvdf2 /dev/xvdg2 /dev/xvdh2
Результаты:
-
Используйте утилиту lvcreate для создания 2 логических томов. apps-lv (используется половина размера PV) и logs-lv Используется оставшееся пространство размера PV. ПРИМЕЧАНИЕ: apps-lv будет использоваться для хранения данных веб-сайта, а logs-lv будет использоваться для хранения данных журналов.
sudo lvcreate -n apps-lv -L 14G webdata-vg sudo lvcreate -n logs-lv -L 14G webdata-vg
Результаты:
-
Убедитесь, что логический том успешно создан, выполнив команду sudo lvs.
sudo lvs
Результаты:
-
Проверка всей установки
sudo vgdisplay -v #view complete setup - VG, PV, and LV sudo lsblk
Результаты:
-
Используйте mkfs.ext4 для форматирования логических томов с файловой системой ext4
sudo mkfs.ext4 /dev/webdata-vg/apps-lv sudo mkfs.ext4 /dev/webdata-vg/logs-lv
Результаты:
Создание структуры каталогов.
-
Создайте каталог /var/www/html для хранения файлов сайта
sudo mkdir -p /var/www/html
Результаты:
-
Создайте каталог /home/recovery/logs для хранения резервных копий журнальных данных
sudo mkdir -p /home/recovery/logs
Результаты:
-
Монтируем /var/www/html на логический том apps-lv
sudo mount /dev/webdata-vg/apps-lv /var/www/html/
Результаты:
-
Используйте утилиту rsync для резервного копирования всех файлов в каталоге журналов /var/log в /home/recovery/logs (Это необходимо перед монтированием файловой системы)
sudo rsync -av /var/log/. /home/recovery/logs/
Результаты:
-
Смонтируйте /var/log на логический том logs-lv. (Обратите внимание, что все существующие данные на /var/log будут удалены. Именно поэтому был создан каталог /var/www/html для хранения файлов сайта)
sudo mount /dev/webdata-vg/logs-lv /var/log
Результаты:
-
Восстановление файлов журнала обратно в каталог /var/log
sudo rsync -av /home/recovery/logs/. /var/log
Результаты:
Обновление файла /ETC/FSTAB
-
Обновите файл /etc/fstab, чтобы конфигурация монтирования сохранилась после перезапуска сервера.
UUID устройства будет использоваться для обновления файла /etc/fstab;sudo blkid
Результаты:
-
Обновите /etc/fstab в этом формате, используя свой собственный UUID и не забудьте удалить ведущие и завершающие кавычки.
sudo nano /etc/fstab
и добавьте следующее
UUID=<uuid of your webdata-vg-apps> /var/www/html ext4 defaults 0 0 UUID=<uuid of your webdata-vg-logs> /var/log ext4 defaults 0 0
Результаты:
-
Проверьте конфигурацию и перезагрузите демон
sudo mount -a sudo systemctl daemon-reload
Результаты:
-
Проверьте свою настройку, запустив df -h, результат должен выглядеть следующим образом:
sudo df -h
Результаты:
Подготовка сервера базы данных
Запустите второй экземпляр RedHat EC2, который будет иметь роль ‘DB Server’.
Повторите те же шаги, что и для веб-сервера, но вместо apps-lv создайте db-lv и смонтируйте его в каталог /db вместо /var/www/html/.
-
подключитесь к только что созданному экземпляру.
ssh -i <your_key_file> ec2-user@<public_ip_address>
Результаты:
-
Создайте и подключите 3 логических тома к экземпляру сервера баз данных.
-
Подключитесь к серверу linux и проверьте, подключен ли том, используя эту команду:
sudo lsblk
Результаты:
-
Используйте команду df -h для просмотра всех подключенных томов и свободного места на вашем сервере.
sudo df -h
Результаты:
-
С помощью утилиты gdisk создайте по одному разделу на каждом из 3 дисков
sudo gdisk /dev/xvdf
а затем создайте новый раздел с помощью команды «n», введя 1 (для создания одного раздела), а затем команды «w» и введите «y» для создания одного раздела.
Повторите то же самое для двух других дисков.
sudo gdisk /dev/xvdg sudo gdisk /dev/xvdh
Результаты:
-
Используйте утилиту lsblk для просмотра нового раздела на каждом из 3 дисков.
sudo lsblk
Результаты:
-
Установите пакет lvm2 с помощью sudo yum install lvm2. Выполните команду sudo lvmdiskscan для проверки наличия доступных разделов.
sudo yum install lvm2 sudo lvmdiskscan
Результаты:
Примечание: В отличие от ubuntu, где используется apt, для redhat менеджером пакетов является yum. -
Используйте утилиту pvcreate, чтобы отметить каждый из 3 дисков как физический том (PV), который будет использоваться LVM.
sudo pvcreate /dev/xvdf2 /dev/xvdg2 /dev/xvdh2
Результаты:
-
Проверьте, что физический том был успешно создан, выполнив sudo pvs.
sudo pvs
Результаты:
-
Используйте утилиту vgcreate, чтобы добавить все 3 PV в группу томов (VG). Назовите VG webdata-vg
sudo vgcreate dbdata-vg /dev/xvdf2 /dev/xvdg2 /dev/xvdh2
Результаты:
-
Используйте утилиту lvcreate для создания 2 логических томов. apps-lv (используется половина размера PV) и logs-lv Используется оставшееся пространство размера PV. ПРИМЕЧАНИЕ: apps-lv будет использоваться для хранения данных веб-сайта, а logs-lv будет использоваться для хранения данных журналов.
sudo lvcreate -n db-lv -L 14G dbdata-vg sudo lvcreate -n logs-lv -L 14G dbdata-vg
Результаты:
-
Убедитесь, что логический том успешно создан, выполнив команду sudo lvs.
sudo lvs
Результаты:
-
Нам нужно проверить все, что мы сделали до сих пор на экземпляре сервера базы данных с помощью этих команд.
sudo vgdisplay -v #view complete setup - VG, PV, and LV sudo lsblk
Результаты:
-
Используйте mkfs.ext4 для форматирования логических томов с файловой системой ext4
sudo mkfs.ext4 /dev/dbdata-vg/db-lv && sudo mkfs.ext4 /dev/dbdata-vg/logs-lv
Результаты:
Теперь, когда мы закончили конфигурирование логических томов базы данных, мы переходим к созданию точек монтирования для логических томов и необходимых каталогов.
-
Создайте каталог /db для хранения файлов сайта
sudo mkdir -p /db
Результаты:
-
Создайте каталог /home/recovery/logs для хранения резервных копий журнальных данных
sudo mkdir -p /home/recovery/logs
Результаты:
-
Монтируем /db на логический том apps-lv
sudo mount /dev/dbdata-vg/db-lv /db
Результаты:
-
Как и для экземпляра веб-сервера, используйте утилиту rsync для резервного копирования всех файлов в каталоге журналов /var/log в /home/recovery/logs (Это необходимо сделать перед монтированием файловой системы).
sudo rsync -av /var/log/. /home/recovery/logs/
Результаты:
-
Смонтируйте /var/log на логический том logs-lv. (Обратите внимание, что все существующие данные на /var/log будут удалены. Для этого и создан каталог /db для хранения файлов базы данных)
sudo mount /dev/dbdata-vg/logs-lv /var/log
Результаты:
-
Восстановите файлы журнала обратно в каталог /var/log
sudo rsync -av /home/recovery/logs/. /var/log
Результаты:
Теперь нам нужно обновить файл /etc/fstab, чтобы убедиться, что созданные нами конфигурации сохраняются при перезагрузке.
-
Обновите файл /etc/fstab так, чтобы конфигурация монтирования сохранялась после перезагрузки сервера.
UUID устройства будет использоваться для обновления файла /etc/fstab;sudo blkid
Результаты:
-
Обновите /etc/fstab в этом формате, используя свой собственный UUID и не забудьте убрать ведущие и завершающие кавычки.
sudo nano /etc/fstab
и добавьте следующее
UUID=<uuid of your webdata-vg-apps> /var/www/html ext4 defaults 0 0 UUID=<uuid of your webdata-vg-logs> /var/log ext4 defaults 0 0
Результаты:
-
Проверьте конфигурацию и перезагрузите демон
sudo mount -a sudo systemctl daemon-reload
Результаты:
-
Проверьте свою настройку, запустив df -h, результат должен выглядеть следующим образом:
sudo df -h
Результаты:
Теперь ваш db-сервер готов к работе и выполните другие конфигурации по мере необходимости.
Установите WordPress на ваш веб-сервер EC2 Instance
-
Обновите репозиторий
sudo yum update
Результаты:
-
Установите wget, Apache и их зависимости
sudo yum -y install wget httpd php php-mysqlnd php-fpm php-json
Результаты:
-
Запустите службу apache
sudo systemctl enable httpd sudo systemctl start httpd
Результаты:
-
Установить PHP и его зависимости
sudo yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm sudo yum install yum-utils http://rpms.remirepo.net/enterprise/remi-release-8.rpm sudo yum module list php sudo yum module reset php sudo yum module enable php:remi-7.4 sudo yum install php php-opcache php-gd php-curl php-mysqlnd sudo systemctl start php-fpm sudo systemctl enable php-fpm setsebool -P httpd_execmem 1
Результаты:
-
Перезапустить Apache
sudo systemctl restart httpd
Результаты:
-
Скачать wordpress и скопировать wordpress в var/www/html
mkdir wordpress cd wordpress sudo wget http://wordpress.org/latest.tar.gz sudo tar xzvf latest.tar.gz sudo rm -rf latest.tar.gz cp wordpress/wp-config-sample.php wordpress/wp-config.php cp -R wordpress /var/www/html/
Результаты:
-
Настройка политик SELinux
sudo chown -R apache:apache /var/www/html/wordpress sudo chcon -t httpd_sys_rw_content_t /var/www/html/wordpress -R sudo setsebool -P httpd_can_network_connect=1
Результаты:
Установите MySQL на ваш DB-сервер EC2
-
Установите mysql на db-сервер
sudo yum update sudo yum install mysql-server
Результаты:
-
Теперь нам нужно убедиться, что служба запущена и работает, используя sudo systemctl status mysqld, если она не запущена, перезапустите службу и включите ее, чтобы она работала даже после перезагрузки:
sudo systemctl restart mysqld sudo systemctl enable mysqld
Результаты:
Настройка базы данных для работы с WordPress
Здесь нам нужно настроить базу данных для работы с WordPress. Для того чтобы сервер wordpress мог подключаться к базе данных, нам нужно настроить базу данных так, чтобы она позволяла серверу wordpress подключаться к базе данных.
-
Получите ip-адрес сервера wordpress.
curl http://checkip.amazonaws.com
Результаты:
-
Затем нам нужно создать пользователя для сервера wordpress для подключения к базе данных.
sudo mysql CREATE DATABASE wordpress; CREATE USER `myuser`@`<Web-Server-Private-IP-Address>` IDENTIFIED BY 'mypass'; GRANT ALL ON wordpress.* TO 'myuser'@'<Web-Server-Private-IP-Address>'; FLUSH PRIVILEGES; SHOW DATABASES; exit
Результаты:
Настройте WordPress для подключения к удаленной базе данных.
Здесь мы должны открыть порт MySQL 3306 на DB Server EC2. Для дополнительной безопасности вы должны разрешить доступ к серверу DB ТОЛЬКО с IP-адреса вашего веб-сервера, поэтому в конфигурации входящего правила укажите source как /32.
-
Установите клиент MySQL и проверьте, что вы можете подключиться с вашего веб-сервера к серверу БД с помощью mysql-client
sudo yum install mysql
Результаты:
- Создан логин к базе данных на сервере БД
sudo mysql -u <user> -p -h <DB-Server-Private-IP-address>
Обратите внимание, что это имя пользователя, которого вы создали в mysql-сервере на сервере БД.
Результаты: -
Проверьте, можете ли вы успешно выполнить команду SHOW DATABASES; и просмотреть список существующих баз данных.
SHOW DATABASES;
Результаты:
-
Измените разрешения и конфигурацию, чтобы Apache мог использовать WordPress:
Здесь нам нужно создать конфигурационный файл для wordpress, чтобы направлять запросы клиентов в каталог wordpress.sudo nano /etc/httpd/conf.d/wordpress.conf
скопируйте и вставьте строки ниже:
<VirtualHost *:80> ServerAdmin myuser@3.88.215.221 DocumentRoot /var/www/html/wordpress <Directory "/var/www/html/wordpress"> Options Indexes FollowSymLinks AllowOverride all Require all granted </Directory> ErrorLog /var/log/httpd/wordpress_error.log CustomLog /var/log/httpd/wordpress_access.log common </VirtualHost>
Результаты:
-
Чтобы применить изменения, перезапустите Apache
sudo systemctl restart httpd
Результаты:
-
Отредактируйте файл wp-config
sudo nano /var/www/html/wordpress/wp-config.php
и добавьте следующие строки:
define('DB_NAME', 'wordpress'); define('DB_USER', 'myuser'); define('DB_PASSWORD', 'mypass'); define('DB_HOST', '<db-Server-Private-IP-Address>'); define('DB_CHARSET', 'utf8mb4'); define('DB_COLLATE', '');
Результаты:
-
настройте SELinux для wordpress
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/html/wordpress/.*?"
Примечание: Команда semanage недоступна в CentOS 7.x.x. и вам может понадобиться установить ее с помощью следующей команды:
sudo yum provides /usr/sbin/semanage sudo yum install policycoreutils-python-utils
Результаты:
-
Попробуйте зайти через браузер по ссылке на ваш WordPress.
http://<Web-Server-Public-IP-Address>/
Результаты: