Установка и настройка стека LAMP

Что такое стек LAMP?

Стек LAMP – это набор из четырех различных программных технологий, которые разработчики используют для создания веб-сайтов и веб-приложений. LAMP – это аббревиатура от операционной системы Linux, веб-сервера Apache, сервера баз данных MySQL и языка программирования PHP. Все четыре из этих технологий имеют открытый исходный код, что означает, что они поддерживаются сообществом и свободно доступны для использования всеми. Разработчики используют стеки LAMP для создания, размещения и поддержки веб-контента. Это популярное решение, которое поддерживает многие веб-сайты, которые вы обычно используете сегодня.

Почему стек LAMP важен?

Веб-разработчики выбирают стек LAMP для создания веб-приложений по указанным ниже причинам.

Стоимость

Все технологии LAMP имеют открытый исходный код, что означает, что любой разработчик или компания могут использовать их без уплаты лицензионных сборов. Вместо покупки проприетарных стековых компонентов вы можете бесплатно загрузить операционную систему, веб-сервер, базу данных и язык сценариев. Это снижает стоимость создания веб-приложений.

Эффективность

Настройка нового стека веб-разработки требует тщательного тестирования различных платформ, модулей, библиотек и инструментов. С другой стороны, стек LAMP – это проверенное и проверенное решение для веб-разработки. Веб-разработчики могут расставлять приоритеты и ускорять разработку приложений, чтобы сосредоточиться на том, что они создают, а не на том, как они это создают.

Обслуживание

Эксперты по программному обеспечению со всего мира вносят свой вклад в развитие стековых технологий LAMP, изменяя, комментируя и анализируя общедоступные исходные коды. Они регулярно поддерживают и обновляют технологии, чтобы они оставались актуальными и безопасными.

Поддержка

Популярные технологии с открытым исходным кодом, такие как стеки LAMP, пользуются поддержкой большого мирового ИТ-сообщества. Таким образом, пользователям стека LAMP легче находить информацию на публичных ИТ-форумах. Веб-разработчики могут обратиться к примерам кода или использовать протестированные плагины, созданные сообществом разработчиков открытого исходного кода.

Гибкость

Стек LAMP обеспечивает веб-разработчикам надежность и гибкость. Хотя архитектура LAMP определяет программные компоненты для каждого уровня, разработчики могут заменять их по своему усмотрению. Например, они могут использовать другую операционную систему помимо Linux в качестве основы стека.

Для чего используется стек LAMP?

Стек LAMP используется для разработки бэкенда или серверной части. Приложение с серверной частью – это программное обеспечение, которое работает в среде, скрытой от конечных пользователей. Серверные приложения состоят из указанных ниже компонентов.

  • Программное обеспечение для обработки данных

  • Компоненты базы данных

  • Бизнес-логика в коде

  • API для связи с другими приложениями

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

Разработчики используют стек LAMP для создания статического и динамического веб-контента.

Статические веб-страницы

Информация о статической веб-странице с веб-сервера одинакова для всех пользователей. Например, адрес на сайте компании – это статический контент. Веб-разработчики создают статические веб-страницы на языках программирования HTML и CSS и хранят их в виде файлов в приложении веб-сервера.

Динамические веб-страницы

Динамические веб-страницы содержат информацию, которая меняется в зависимости от просмотра пользователем веб-страницы или веб-приложения. Например, сообщение веб-сайта, которое меняется в зависимости от вашего местоположения, является динамическим контентом. Веб-сервер предоставляет динамические веб-сайты, обрабатывая бизнес-логику или получая данные из базы данных.

LAMP

Что такое архитектура LAMP?

Программный стек – это набор многоуровневых инструментов, библиотек, языков программирования и технологий, используемых для создания, управления и запуска приложения. Стек состоит из программных компонентов, которые поддерживают приложение различными способами, такими как визуальное представление, база данных, сеть и безопасность.

Точно так же архитектура LAMP состоит из четырех программных технологий, которые работают за кулисами для создания рабочего веб-приложения. Здесь описывается, как каждая из этих технологий веб-разработки взаимодействует друг с другом на компьютерном сервере. Архитектура LAMP состоит из указанных ниже уровней.

Linux

Linux – это операционная система с открытым исходным кодом, которую можно установить и настроить в соответствии с различными требованиями приложений. Linux находится на первом уровне стека LAMP и поддерживает другие компоненты на верхних уровнях.

Apache

Apache – это веб-сервер с открытым исходным кодом, который образует второй уровень стека LAMP. Модуль Apache хранит файлы веб-сайта и обменивается информацией с браузером с помощью HTTP, интернет-протокола для передачи информации о веб-сайте в виде обычного текста. Например, когда браузер запрашивает веб-страницу, HTTP-сервер Apache выполняет указанное ниже.

  1. Получение запроса

  2. Обработка запроса и поиск необходимого файла подкачки

  3. Отправка соответствующей информации обратно в браузер

MySQL

MySQL – это система управления реляционными базами данных с открытым исходным кодом и третий уровень стека LAMP. Модель LAMP использует MySQL для хранения и запроса информации в реляционных базах данных, а также управления ею. Например, разработчики хранят данные приложений, такие как записи о клиентах, продажах и запасах. Когда пользователь ищет информацию, веб-сервер запрашивает сохраненные данные в MySQL. Запрос относится к специальным инструкциям по манипулированию данными в реляционной базе данных на языке SQL.

PHP

Файл PHP, который расшифровывается как препроцессор гипертекста, является четвертым и последним слоем стека LAMP. Это язык сценариев, который позволяет веб-сайтам запускать динамические процессы. Динамический процесс включает информацию в программном обеспечении, которое постоянно меняется. Веб-разработчики встраивают язык программирования PHP в HTML, чтобы отображать на веб-сайтах информацию в реальном времени или обновленную информацию. Они используют PHP, чтобы веб-сервер, база данных и операционная система могли согласованно обрабатывать запросы от браузеров.

HTML и PHP

Веб-разработчики используют HTML для фронтенд-разработки, например для разработки макета веб-страниц. Между тем, они используют PHP для определения поведения определенных компонентов при загрузке веб-страницы пользователями. Например, веб-разработчики создают графический макет онлайн-каталога продуктов с помощью HTML. Затем они используют PHP-код для получения последней цены продукта с внутреннего сервера.

Как работает стек LAMP?

Веб-приложения используют стек LAMP для ответа на запросы веб-браузеров. Веб-сервер Apache и база данных MySQL работают под управлением операционной системы Linux и взаимодействуют с помощью PHP. Когда вы открываете веб-страницу в браузере, стек LAMP проходит следующий процесс.

Получение запросов

Веб-сервер Apache получает входящий запрос от браузера. Если запрос заключается в загрузке статического файла, сервер Apache отвечает непосредственно соответствующим содержимым. Если запрос относится к динамическому контенту, сервер Apache передает запрос компоненту PHP. Компонент PHP находит и загружает соответствующий PHP-файл, который может обработать запрос.

Обработка запросов

Файл PHP содержит функции PHP, которые представляют собой коды для генерации динамического контента. Компонент PHP обрабатывает функции PHP, такие как преобразование единиц измерения или создание диаграммы продаж. Для некоторых функций PHP может потребоваться информация из базы данных. В таких случаях PHP-код извлекает сохраненную информацию из базы данных и использует ее для обработки функции.

Возвращение ответов

Файл PHP передает вычисленные результаты веб-серверу в формате HTML. В то же время он хранит новые данные в базе данных MySQL. HTTP-сервер Apache отправляет динамические результаты HTML в браузер пользователя.

Преимущества и недостатки

К преимуществам LAMP стоит отнести:

  • простоту конфигурации, значительно ускоряющую развертывание приложений;

  • совместимость всех слоев стека с серверами, работающими на Ubuntu;

  • возможность создания на базе стека большого числа приложений с открытым исходным кодом, в том числе систем управления содержимым и управляющих приложений;

  • гибкость в работе с БД, web-серверами и языками сценариев;

  • использование наборов открытого ПО, ускоряющее процессы разработки;

  • возможность использования альтернативных слоев - PostgreSQL и SQLite вместо MySQL, Python, Perl и Ruby вместо PHP, Nginx, Cherokee и Lighttpd как замена Apache;

  • применение Tasksel - инструмента Debian/Ubuntu - для ускорения установки LAMP и объединения нескольких зависимых пакетов в общую серверную задачу.

Однако, несмотря на удобство и практичность LAMP, у этой комбинации есть и ряд недостатков:

  • существует риск снижения производительности и сложностей в определении источника этой проблемы (приложения или БД) из-за использования одних и тех ресурсов сервера;

  • могут возникнуть проблемы с проведением горизонтального масштабирования, с интеграцией с облаком, с переключением между внутренними и внешними инструментами.

Также для LAMP прогнозируется спад востребованности из-за преобладания JavaScript и облачных сред.

Каковы альтернативы LAMP?

Альтернативы LAMP, или варианты LAMP, представляют собой серверные технологии разработки, в которых используются компоненты, отличные от тех, которые указаны в архитектуре LAMP. Например, веб-разработчики могут использовать другие веб-серверы вместо Apache для получения и обработки запросов от интерфейсных приложений. Некоторые альтернативы LAMP могут использовать проприетарные компоненты, такие как лицензионные операционные системы.

Альтернативные скриптовые языки

Хотя PHP является языком сценариев по умолчанию в стеке LAMP, разработчики могут заменить его на Perl или Python.

Perl

Perl – это язык программирования, который существует уже более 30 лет. Разработчики используют интерфейс Perl, потому что он хорошо работает с интеграцией баз данных и поддерживает платформы, помогающие в разработке. Платформы – это программные инструменты, содержащие хорошо протестированные компоненты, ускоряющие разработку приложений.

Python

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

Что такое стек MEAN?

Стек MEAN является аббревиатурой от MongoDB, Express.js, Angular.js и Node.js. Он является альтернативой LAMP и основан на технологиях JavaScript. JavaScript – это язык программирования для backend и frontend разработки. Ниже перечислены роли компонентов стека MEAN.

  • MongoDB – это база данных, которая хорошо работает с JSON, типом JavaScript для чтения данных.

  • Express.js – это платформа, которая предоставляет инструменты с открытым исходным кодом для создания серверных приложений.

  • Node.js – это платформа, на которой выполняются приложения JavaScript.

  • Angular.js – это платформа с открытым исходным кодом для разработки фронтенд-приложений.

Стек MEAN и стек LAM

Стеки MEAN и LAMP – это отличные стеки программного обеспечения с открытым исходным кодом для различных типов веб-приложений. Стек MEAN подходит для веб-приложений, которые требуют интенсивной логической обработки во внешнем интерфейсе. Между тем, стек LAMP отлично подходит для крупных сложных веб-сайтов, которые обрабатывают значительное количество трафика. Например, разработчики используют стек MEAN для создания веб-приложения для потокового видео, но выбирают стек LAMP для веб-приложения электронной коммерции.

Установка Apache

Команды для установки

Установим первый после операционной системы компонент LAMP — Apache.

Предварительно загрузим списки пакетов обновлений, для этого используется команда:

sudo apt update

Установим Apache:

sudo apt install apache2 -y

Настройка брандмауэра

Брандмауэр (файервол) должен пропускать HTTP и HTTPS-трафик — то есть должны быть открыты порты 80 и 443.

Для начала нужно установить утилиту для управления правилами файервола UFW (Uncomplicated Firewall) и включить UFW (В Ubuntu по умолчанию он уже присутствует):

sudo apt install ufw
sudo ufw enable

На сервере должны быть доступны профили приложений для Apache. Посмотрим список профилей:

sudo ufw app list

Вывод команды выглядит примерно таким образом:

Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

Можем увидеть, что в выводе присутствует профиль Apache Full — именно он открывает нужные порты 80 и 443. Разрешим для него входящий трафик:

sudo ufw allow 'Apache Full'

Чтобы в дальнейшем продолжать подключение к серверу по SSH, добавим также профиль OpenSSH:

sudo ufw allow 'OpenSSH'

Проверим изменения:

sudo ufw status

В выводе команды проверим, что UFW активен, нужные профили включены, а, значит, разрешен HTTP и HTTPS-трафик:

Status: active

To                         Action      From
--                         ------      ----
Apache Full                ALLOW       Anywhere                  
OpenSSH                    ALLOW       Anywhere                  
Apache Full (v6)           ALLOW       Anywhere (v6)             
OpenSSH (v6)               ALLOW       Anywhere (v6)

Проверка работы Apache

Проверим статус Apache, он должен быть активен (Active в выводе команды):

sudo systemctl status apache2

Чтобы проверить работу Apache, введем публичный IP-адрес сервера в браузерной строке. В нашем случае это подключенный ранее плавающий IP. Если Apache установлен, и к нему разрешен доступ через файервол, то откроется страница с информацией:

Установка MySQL

Команда для установки

После установки и настройки Apache можно устанавливать следующий компонент — СУБД MySQL:

sudo apt install mysql-server -y

Настройка безопасности БД

Для защиты окружения рекомендуется запустить скрипт безопасности:

sudo mysql_secure_installation

Когда система предложит установить плагин валидации паролей (VALIDATE PASSWORD plugin), введем в терминал y или Y для подтверждения. Установка этого плагина поможет задать пароль с повышенными требованиями к безопасности.

Далее выберем уровень надежности паролей, всего их три:

  • низкий (LOW) — длина такого пароля должна быть больше 8 символов;

  • средний (MEDIUM) — длина пароля больше 8 символов, при этом пароль должен содержать цифры, буквы в верхнем и нижнем регистре, а также специальные символы;

  • сильный (STRONG) — для такого пароля должны быть соблюдены те же условия, что и для среднего уровня надежности, но при этом в пароле не должны использоваться слова, которые могут быть уязвимы при подборе пароля по словарю.

Введем в терминале значение для выбора уровня: 0 для LOW, 1 для MEDIUM или 2 для STRONG.

Затем введем два раза новый root-пароль, который соответствует условиям выбранного уровня надежности.

Система определит и выведет значение надежности пароля (Estimated strength of the password).

На дальнейшие вопросы от системы рекомендуем вводить в терминале подтверждение (y или Y) — это настройки удаления анонимных пользователей, удаление открытой тестовой базы и так далее.

Пароль будет создан, когда в терминале будет выведено сообщение «All done!».

Проверка работы MySQL

Проверим статус MySQL, он должен быть активен:

sudo systemctl status mysql

Установка PHP

Команды для установки

Теперь можно перейти к установке последней составляющей стека — PHP.

Установим PHP и специальные модули для работы PHP с Apache и MySQL:

sudo apt install php libapache2-mod-php php-mysql

При дальнейшей работе с сайтом, возможно, понадобятся и другие модули или расширения. Для настройки LAMP этих модулей достаточно.

В предыдущей команде при установке не была указана версия PHP. Вы всегда можете указать версию, которую хотите установить, например:

sudo apt install php7.2

Чтобы узнать версию PHP, которая установлена, используйте команду:

php -v

Проверка установки PHP

Для проверки создадим небольшой PHP-скрипт с любым названием, например test.php, в корневой директории /var/www/html:

sudo nano /var/www/html/test.php

Заполним этот файл таким содержимым:

<?php
phpinfo();
?>

Сохраним и закроем файл (сочетание клавиш Ctrl+X, а затем Y+Enter).

Такой скрипт вызовет функцию phpinfo(), которая выводит информацию о PHP и список параметров.

Теперь откроем этот файл по URL:

http://server_IP/test.php

Если все настроено корректно, будет доступна информация о PHP:

В целях безопасности вашего сервера рекомендуется не оставлять данную информацию в открытом доступе. В данном случае мы это проделали на тестовом сервере.

Настройка виртуальных хостов (опционально)

Apache позволяет запустить на одной машине несколько веб-сайтов — при этом данные каждого сайта будут лежать в разных директориях. Для этого используются конфигурационные файлы — виртуальные хосты.

Допустим, мы хотим разместить на одном сервере два сайта. Сконфигурируем Apache.

Создание директорий

Размещать файлы виртуальных хостов будем внутри директории /var/www/. Для каждого хоста создадим новую отдельную директорию:

sudo mkdir -p /var/www/first_IP
sudo mkdir -p /var/www/second_IP

Обратите внимание, что вместо IP-адреса можно использовать и доменное имя.

Предоставление прав

Сейчас права доступа к директориям есть только у root-пользователя. Настроим права всем пользователям системы, используя переменную среды $USER:

sudo chown -R $USER:$USER /var/www/first_IP
sudo chown -R $USER:$USER /var/www/second_IP

Откроем пользователю доступ на чтение, редактирование и запуск файлов в директории /var/www:

sudo chmod -R 755 /var/www

Создание страниц для тестирования

В дальнейшем нам нужно будет проверить, правильно ли настроены виртуальные хосты. Для этого можно создать для каждого IP-адреса (домена) HTML-страницы, которые будут открываться в браузере при вводе соответствующего IP или домена, например, главные страницы index.html.

Создадим страницу для первого IP:

sudo nano /var/www/first_IP/index.html

Добавим на страницу текст:

<html>
    <head>
        <title>First IP</title>
    </head>
    <body>
        <h1>Wow! First Site works!</h1>
    </body>
</html>

Сохраним и закроем файл.

Выполним то же самое и для второго сайта:

sudo nano /var/www/second_IP/index.html

Добавим содержимое:

<html>
    <head>
        <title>Second IP</title>
    </head>
    <body>
        <h1>Wow! Second Site works!</h1>
    </body>
</html>

Создание виртуальных хостов

По умолчанию в Apache используется виртуальный хост 000-default.conf. Этот файл мы будем использовать как шаблон для создания собственных виртуальных хостов.

Для каждого сайта конфигурационные файлы (виртуальные хосты) хранятся в директории /etc/apache2/sites-available/. Скопируем содержимое виртуального хоста, который используется по умолчанию, в новый файл — мы будем использовать его для настройки первого сайта:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/first_IP.conf

Откроем новый конфигурационный файл первого сайта:

sudo nano /etc/apache2/sites-available/first_IP.conf

Изменим значения в файле:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName first_IP
    DocumentRoot /var/www/first_IP
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Где:

  • ServerAdmin — электронная почта администратора сайта;

  • ServerName — IP-адрес сайта или его доменное имя;

  • DocumentRoot — директория, в которой хранится конфигурационный файл (виртуальный хост).

Сохраним и закроем файл.

Подобным образом создадим конфигурационный файл для второго сайта:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/second_IP.conf
sudo nano /etc/apache2/sites-available/second_IP.conf

Содержимое конфигурационного файла /etc/apache2/sites-available/second_IP.conf:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName second_IP
    DocumentRoot /var/www/second_IP
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Активация виртуальных хостов

Активируем виртуальные хосты с помощью a2ensite:

sudo a2ensite first_IP.conf
sudo a2ensite second_IP.conf

Отключим виртуальный хост, который создается по умолчанию:

sudo a2dissite 000-default.conf

Проверим, нет ли ошибок в конфигурационных файлах:

sudo apache2ctl configtest

Если ошибки отсутствуют, то получим результат:

Syntax OK

Перезапустим Apache, чтобы активировать все изменения:

sudo systemctl restart apache2

Теперь Apache должен обслуживать сайты, IP-адреса или домены которых мы прописали в виртуальных хостах. Проверим работу: перейдем в браузере на сайты — должны появиться созданные индексные страницы:

Мы рассмотрели установку и настройку стека LAMP для Debian-подобных дистрибутивов. Чтобы изучить данный процесс для CentOS, рекомендую прочитать статью по ссылке ниже:

Last updated