Установка LAMP-стека (Linux, Apache, MySQL, PHP) на Ubuntu

В статье мы узнаем, что такое LAMP-стек, как установить LAMP на Ubuntu, а также настроим виртуальные хосты.

Что такое LAMP

LAMP — это стек программного обеспечения, устанавливаемого на сервер и предназначенного для сайтов и веб-приложений. LAMP – это аббревиатура, она расшифровывается как: Linux, Apache, MySQL и PHP.

Рассмотрим каждый элемент LAMP подробнее:

  1. Linux используется в качестве ОС на сервере, часто это различные дистрибутивы Ubuntu и Debian.
  2. Apache — веб-сервер. Он обрабатывает все запросы к страницам сайта и выдает соответствующие ответы.
  3. MySQL — СУБД (система управления базами данных). Иногда в LAMP используется MariaDB. Здесь хранятся все данные сайта.
  4. PHP — скриптовый язык для генерации страниц.

Такой набор самостоятельных по отдельности компонентов стал очень популярен.

Существует множество вариаций LAMP, где какие-либо из компонентов заменяются на другие, например LEMP — вместо Apache в нем используется веб-сервер Nginx.

Подготовка к установке LAMP

Развернуть LAMP можно, например, на облачном сервере, который предварительно нужно создать. Создадим сервер в панели управления Облачной платформой Selectel. Подробно о начислении баланса на счет для доступа к работе в панели и создании облачного сервера можно прочитать в Базе знаний.

Создание облачного сервера

Перейдите в панель управления Облачной платформой, откройте вкладку Серверы и нажмите кнопку Создать сервер.

При создании сервера автоматически выбирается операционная система Ubuntu. Чтобы выбрать другую ОС для сервера, нажмите Выбрать другой источник. В целом, для установки LAMP подойдет любой дистрибутив Linux.

В этой инструкции в качестве операционной системы сервера выберите Ubuntu 18.04 LTS.

Для развертывания LAMP нужно присвоить серверу плавающий адрес. Для этого в разделе Сеть в качестве подсети выберите Новый плавающий IP-адрес. Проверьте стоимость сервера и нажмите Создать.

Созданный Облачный сервер со статусом ACTIVE появится в списке всех серверов. В карточке сервера на вкладке Порты можно посмотреть плавающий IP-адрес — в дальнейшем это пригодится для настройки LAMP.

Подключение к серверу по SSH

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

Для того чтобы подключиться к серверу по SSH, в терминале введите команду:

ssh root@server_IP

server_IP — это плавающий IP-адрес сервера, который был добавлен при его создании.

Терминал при подключении запросит root-пароль, который можно найти на вкладке Консоль в карточке сервера.

Если подключение к серверу прошло успешно, можно начать установку LAMP.

Установка Apache

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

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

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

sudo apt update

Установим Apache:

sudo apt install apache2

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

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

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

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

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

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

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-адреса или домены которых мы прописали в виртуальных хостах. Проверим работу: перейдем в браузере на сайты — должны появиться созданные индексные страницы: