Установка LAMP-стека (Linux, Apache, MySQL, PHP) на Ubuntu
В статье мы узнаем, что такое LAMP-стек, как установить LAMP на Ubuntu, а также настроим виртуальные хосты. Что такое LAMP LAMP — это стек программного обеспечения, устанавливаемого на сервер и предназначенного для сайтов и веб-приложений. LAMP – это аббревиатура, она расшифровывается как: Linux, Apache, MySQL и PHP. Рассмотрим каждый элемент LAMP подробнее: Linux используется в […]
В статье мы узнаем, что такое LAMP-стек, как установить LAMP на Ubuntu, а также настроим виртуальные хосты.
Что такое LAMP
LAMP — это стек программного обеспечения, устанавливаемого на сервер и предназначенного для сайтов и веб-приложений. LAMP – это аббревиатура, она расшифровывается как: Linux, Apache, MySQL и PHP.
Рассмотрим каждый элемент LAMP подробнее:
- Linux используется в качестве ОС на сервере, часто это различные дистрибутивы Ubuntu и Debian.
- Apache — веб-сервер. Он обрабатывает все запросы к страницам сайта и выдает соответствующие ответы.
- MySQL — СУБД (система управления базами данных). Иногда в LAMP используется MariaDB. Здесь хранятся все данные сайта.
- 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-адреса или домены которых мы прописали в виртуальных хостах. Проверим работу: перейдем в браузере на сайты — должны появиться созданные индексные страницы: