Установка и настройка стека 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 состоит из указанных ниже уровней.
Linux
Linux – это операционная система с открытым исходным кодом, которую можно установить и настроить в соответствии с различными требованиями приложений. Linux находится на первом уровне стека LAMP и поддерживает другие компоненты на верхних уровнях.
Apache
Apache – это веб-сервер с открытым исходным кодом, который образует второй уровень стека LAMP. Модуль Apache хранит файлы веб-сайта и обменивается информацией с браузером с помощью HTTP, интернет-протокола для передачи информации о веб-сайте в виде обычного текста. Например, когда браузер запрашивает веб-страницу, HTTP-сервер Apache выполняет указанное ниже.
Получение запроса
Обработка запроса и поиск необходимого файла подкачки
Отправка соответствующей информации обратно в браузер
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.
Предварительно загрузим списки пакетов обновлений, для этого используется команда:
Установим Apache:
Настройка брандмауэра
Брандмауэр (файервол) должен пропускать HTTP и HTTPS-трафик — то есть должны быть открыты порты 80 и 443.
Для начала нужно установить утилиту для управления правилами файервола UFW (Uncomplicated Firewall) и включить UFW (В Ubuntu по умолчанию он уже присутствует):
На сервере должны быть доступны профили приложений для Apache. Посмотрим список профилей:
Вывод команды выглядит примерно таким образом:
Можем увидеть, что в выводе присутствует профиль Apache Full — именно он открывает нужные порты 80 и 443. Разрешим для него входящий трафик:
Чтобы в дальнейшем продолжать подключение к серверу по SSH, добавим также профиль OpenSSH:
Проверим изменения:
В выводе команды проверим, что UFW активен, нужные профили включены, а, значит, разрешен HTTP и HTTPS-трафик:
Проверка работы Apache
Проверим статус Apache, он должен быть активен (Active в выводе команды):
Чтобы проверить работу Apache, введем публичный IP-адрес сервера в браузерной строке. В нашем случае это подключенный ранее плавающий IP. Если Apache установлен, и к нему разрешен доступ через файервол, то откроется страница с информацией:
Установка MySQL
Команда для установки
После установки и настройки Apache можно устанавливать следующий компонент — СУБД MySQL:
Настройка безопасности БД
Для защиты окружения рекомендуется запустить скрипт безопасности:
Когда система предложит установить плагин валидации паролей (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, он должен быть активен:
Установка PHP
Команды для установки
Теперь можно перейти к установке последней составляющей стека — PHP.
Установим PHP и специальные модули для работы PHP с Apache и MySQL:
При дальнейшей работе с сайтом, возможно, понадобятся и другие модули или расширения. Для настройки LAMP этих модулей достаточно.
В предыдущей команде при установке не была указана версия PHP. Вы всегда можете указать версию, которую хотите установить, например:
Чтобы узнать версию PHP, которая установлена, используйте команду:
Проверка установки PHP
Для проверки создадим небольшой PHP-скрипт с любым названием, например test.php, в корневой директории /var/www/html:
Заполним этот файл таким содержимым:
Сохраним и закроем файл (сочетание клавиш Ctrl+X, а затем Y+Enter).
Такой скрипт вызовет функцию phpinfo(), которая выводит информацию о PHP и список параметров.
Теперь откроем этот файл по URL:
Если все настроено корректно, будет доступна информация о PHP:
В целях безопасности вашего сервера рекомендуется не оставлять данную информацию в открытом доступе. В данном случае мы это проделали на тестовом сервере.
Настройка виртуальных хостов (опционально)
Apache позволяет запустить на одной машине несколько веб-сайтов — при этом данные каждого сайта будут лежать в разных директориях. Для этого используются конфигурационные файлы — виртуальные хосты.
Допустим, мы хотим разместить на одном сервере два сайта. Сконфигурируем Apache.
Создание директорий
Размещать файлы виртуальных хостов будем внутри директории /var/www/. Для каждого хоста создадим новую отдельную директорию:
Обратите внимание, что вместо IP-адреса можно использовать и доменное имя.
Предоставление прав
Сейчас права доступа к директориям есть только у root-пользователя. Настроим права всем пользователям системы, используя переменную среды $USER:
Откроем пользователю доступ на чтение, редактирование и запуск файлов в директории /var/www:
Создание страниц для тестирования
В дальнейшем нам нужно будет проверить, правильно ли настроены виртуальные хосты. Для этого можно создать для каждого IP-адреса (домена) HTML-страницы, которые будут открываться в браузере при вводе соответствующего IP или домена, например, главные страницы index.html.
Создадим страницу для первого IP:
Добавим на страницу текст:
Сохраним и закроем файл.
Выполним то же самое и для второго сайта:
Добавим содержимое:
Создание виртуальных хостов
По умолчанию в Apache используется виртуальный хост 000-default.conf. Этот файл мы будем использовать как шаблон для создания собственных виртуальных хостов.
Для каждого сайта конфигурационные файлы (виртуальные хосты) хранятся в директории /etc/apache2/sites-available/. Скопируем содержимое виртуального хоста, который используется по умолчанию, в новый файл — мы будем использовать его для настройки первого сайта:
Откроем новый конфигурационный файл первого сайта:
Изменим значения в файле:
Где:
ServerAdmin — электронная почта администратора сайта;
ServerName — IP-адрес сайта или его доменное имя;
DocumentRoot — директория, в которой хранится конфигурационный файл (виртуальный хост).
Сохраним и закроем файл.
Подобным образом создадим конфигурационный файл для второго сайта:
Содержимое конфигурационного файла /etc/apache2/sites-available/second_IP.conf:
Активация виртуальных хостов
Активируем виртуальные хосты с помощью a2ensite:
Отключим виртуальный хост, который создается по умолчанию:
Проверим, нет ли ошибок в конфигурационных файлах:
Если ошибки отсутствуют, то получим результат:
Перезапустим Apache, чтобы активировать все изменения:
Теперь Apache должен обслуживать сайты, IP-адреса или домены которых мы прописали в виртуальных хостах. Проверим работу: перейдем в браузере на сайты — должны появиться созданные индексные страницы:
Мы рассмотрели установку и настройку стека LAMP для Debian-подобных дистрибутивов. Чтобы изучить данный процесс для CentOS, рекомендую прочитать статью по ссылке ниже:
Last updated