- Установка LAMP-стека (Linux, Apache, MySQL, PHP) на Ubuntu
- Что такое LAMP
- Подготовка к установке LAMP
- Создание облачного сервера
- Подключение к серверу по SSH
- Установка Apache
- Команды для установки
- Настройка брандмауэра
- Проверка работы Apache
- Установка MySQL
- Команда для установки
- Настройка безопасности БД
- Проверка работы MySQL
- Установка PHP
- Команды для установки
- Проверка установки PHP
- Настройка виртуальных хостов (опционально)
- Создание директорий
- Предоставление прав
- Создание страниц для тестирования
- Создание виртуальных хостов
- Активация виртуальных хостов
- Какой дистрибутив Linux выбрать для хостинга Apache + PHP сайтов?
Установка 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, в терминале введите команду:
server_IP — это плавающий IP-адрес сервера, который был добавлен при его создании.
Терминал при подключении запросит root-пароль, который можно найти на вкладке Консоль в карточке сервера.
Если подключение к серверу прошло успешно, можно начать установку LAMP.
Установка Apache
Команды для установки
Установим первый после операционной системы компонент LAMP — Apache.
Предварительно загрузим списки пакетов обновлений, для этого используется команда:
Настройка брандмауэра
Брандмауэр (файервол) должен пропускать HTTP и HTTPS-трафик — то есть должны быть открыты порты 80 и 443.
Для начала нужно установить утилиту для управления правилами файервола UFW (Uncomplicated Firewall) и включить UFW:
На сервере должны быть доступны профили приложений для Apache. Посмотрим список профилей:
Вывод команды выглядит примерно таким образом:
Available applications: Apache Apache Full Apache Secure OpenSSH
Можем увидеть, что в выводе присутствует профиль Apache Full — именно он открывает нужные порты 80 и 443. Разрешим для него входящий трафик:
sudo ufw allow 'Apache Full'
Чтобы в дальнейшем продолжать подключение к серверу по SSH, добавим также профиль OpenSSH:
В выводе команды проверим, что 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. Вы всегда можете указать версию, которую хотите установить, например:
Чтобы узнать версию PHP, которая установлена, используйте команду:
Проверка установки PHP
Для проверки создадим небольшой PHP-скрипт с любым названием, например test.php, в корневой директории /var/www/html:
sudo nano /var/www/html/test.php
Заполним этот файл таким содержимым:
Сохраним и закроем файл (сочетание клавиш Ctrl+X, а затем Y+Enter).
Такой скрипт вызовет функцию phpinfo(), которая выводит информацию о PHP и список параметров.
Теперь откроем этот файл по URL:
Если все настроено корректно, будет доступна информация о 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:
Создание страниц для тестирования
В дальнейшем нам нужно будет проверить, правильно ли настроены виртуальные хосты. Для этого можно создать для каждого IP-адреса (домена) HTML-страницы, которые будут открываться в браузере при вводе соответствующего IP или домена, например, главные страницы index.html.
Создадим страницу для первого IP:
sudo nano /var/www/first_IP/index.html
Добавим на страницу текст:
Wow! First Site works!
Выполним то же самое и для второго сайта:
sudo nano /var/www/second_IP/index.html
Wow! Second Site works!
Создание виртуальных хостов
По умолчанию в 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
ServerAdmin webmaster@localhost ServerName first_IP DocumentRoot /var/www/first_IP ErrorLog $/error.log CustomLog $/access.log combined
- 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:
ServerAdmin webmaster@localhost ServerName second_IP DocumentRoot /var/www/second_IP ErrorLog $/error.log CustomLog $/access.log combined
Активация виртуальных хостов
Активируем виртуальные хосты с помощью a2ensite:
sudo a2ensite first_IP.conf
sudo a2ensite second_IP.conf
Отключим виртуальный хост, который создается по умолчанию:
sudo a2dissite 000-default.conf
Проверим, нет ли ошибок в конфигурационных файлах:
sudo apache2ctl configtest
Если ошибки отсутствуют, то получим результат:
Перезапустим Apache, чтобы активировать все изменения:
sudo systemctl restart apache2
Теперь Apache должен обслуживать сайты, IP-адреса или домены которых мы прописали в виртуальных хостах. Проверим работу: перейдем в браузере на сайты — должны появиться созданные индексные страницы:
Какой дистрибутив Linux выбрать для хостинга Apache + PHP сайтов?
В основном надо хостить аудио-записи конференций.
Трафик не очень большой (4000 посетителей в месяц по GA), но материалов около терабайта.
Для этого дела есть самописная CMS, которая умеет эти записи проигрывать нужным способом искать и т.д.
Требования: PHP 7, Apache, MySQL.
Я взял дедик на OVH (32GB RAM, 8cores), накатил на него Hyper-V, а в нём — Ubuntu 18.04 VM (8GB RAM, 3cores).
И оно тормозит. Причём похоже из-за сети. Один из симптомов — это иногда сайт открывается быстро, а иногда — первую страницу ждёшь секунд 10-20!
Пока разбирался, увидел, что у меня висит куча соединений в состоянии CLOSE_WAIT:
root@ub18s:/home/slavik# netstat -tupn | grep CLOSE_WAIT
tcp 1 103452 142.44.185.104:443 213.180.203.53:58602 CLOSE_WAIT 30305/apache2
tcp 1 99258 142.44.185.104:443 213.180.203.53:39694 CLOSE_WAIT 30937/apache2
tcp 1 29358 142.44.185.104:443 37.9.113.126:41087 CLOSE_WAIT 32766/apache2
tcp 1 114636 142.44.185.104:443 213.180.203.53:54569 CLOSE_WAIT 30338/apache2
.
И это нехорошо. И про это есть вопросы на StackOverflow, но решения я не нашёл — похоже на проблему сетевого стэка Убунты.
Ну я попробовал и задеплоил ещё одну VM, теперь CentOS 7 (8GB, 3 cores).
Работает всё класс, быстро, висяков CLOSE_WAIT нету.
Но в CentOS постоянно висит один процесс — kswapd0, которые нагружает одно ядро на 100%. Это вроде бы связано со swapping memory. Тоже пробовал всякое, разные настройки — не одолел, тоже похоже на проблему ядра ОС.
Хотя на работе это вроде не отображается — ничего вроде бы не тормозит, но как-то неприятно.
Вот теперь думаю — попробовать Debian? 9.6?
Или есть какая-то конфигурация, которую народ посоветует?
P.S. Поставил Debian 9.6 + Nginx + PHP-FPM. Вот уже около месяца работает. Очень стабильно.
Средний 7 комментариев