Реализация базового веб-решения с использованием WordPress


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

В этом учебнике я покажу вам, как подготовить инфраструктуру хранения данных на двух серверах Linux и реализовать базовое веб-решение с помощью WordPress. WordPress — это бесплатная система управления контентом с открытым исходным кодом, написанная на PHP и работающая в паре с MySQL или MariaDB в качестве бэкенда системы управления реляционными базами данных (RDBMS).

Этот проект состоит из двух частей:

  • Настройка подсистемы хранения для Web-сервера и сервера баз данных на базе ОС Linux. Цель этой части — дать вам практический опыт работы с дисками, разделами и томами в Linux.

  • Установите WordPress и подключите его к удаленному серверу баз данных MySQL. Эта часть проекта закрепит ваши навыки развертывания Web и DB уровней Web-решения.

Как инженер DevOps, глубокое понимание основных компонентов веб-решений и умение устранять неполадки сыграют важную роль в вашем дальнейшем прогрессе и развитии.

Трехуровневая архитектура

Как правило, веб- или мобильные решения реализуются на основе так называемой трехуровневой архитектуры.

Трехуровневая архитектура — это модель архитектуры клиент-серверного программного обеспечения, состоящая из трех отдельных уровней. К ним относятся:

  • Презентационный уровень (PL): Это пользовательский интерфейс, такой как клиентский сервер или браузер на вашем ноутбуке.
  • Бизнес-уровень (BL): Это внутренняя программа, которая реализует бизнес-логику. Приложение или веб-сервер
  • Уровень доступа к данным или управления (DAL): это уровень для хранения компьютерных данных и доступа к ним. Сервер базы данных или сервер файловой системы, такой как FTP-сервер или NFS-сервер.

В этом проекте вы получите практический опыт, демонстрирующий трехъярусную архитектуру, а также убедитесь, что диски, используемые для хранения файлов на серверах Linux, адекватно разбиты на разделы и управляются с помощью таких программ, как gdisk и LVM соответственно.

Требования:

  1. Ваша трехуровневая установка
    • Ноутбук или ПК для работы в качестве клиента
    • Сервер 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>/
    

    Результаты:

Оцените статью
devanswers.ru
Добавить комментарий