# Установка программных стеков LAMP и LEMP на Ubuntu
Программный стек — набор программного обеспечения, поддерживающий полноценную работу какой-либо функции. Это может быть мониторинг логов и нагрузки на сервер, запуск сайтов или веб-проектов, управление работой самого сервера и т.д.
В этой инструкции мы рассмотрим установку программных стеков LAMP и LEMP, отвечающих за запуск и работу сайтов и веб-проектов.
В стандартный набор программного обеспечения в этом случае входит:
- операционная система, поддерживающая работу самого сервера (Linux);
- веб-сервер, который будет обрабатывать запросы, поступающие к нашему сайту (Apache/Nginx);
- СУБД для хранения всех данных сайта (MySQL);
- интерпретатор PHP, который будет наполнять наш сайт динамическим содержимым.
Программные стеки LAMP и LEMP отличаются всего одним компонентом — веб-сервером. В первом случае это Apache, во втором — Nginx. Часто Apache и Nginx работают в связке и запускаются на одном сервере. В этом случае Apache используется как основной веб-сервер для поддержания работы виртуальных хостов, а Nginx — как обратный прокси или балансировщик нагрузки.
Устанавливать программный стек мы будем на подготовленный к работе сервер под управлением Ubuntu 20.04.
# Установка Nginx
Устанавливать Nginx мы будем из стандартных репозиториев Ubuntu. Обновим список доступных пакетов и запустим установку веб-сервера:
sudo apt update
sudo apt install nginx
Эта команда установит готовый к работе Nginx. Никаких дополнительных настроек для начала работы он не требует. Нужно просто запустить его и добавить в автозагрузку:
sudo systemctl start nginx
sudo systemctl enable nginx
Перед тем как проверить работу веб-сервера, его нужно добавить в список исключений фаервола, если он у вас запущен. Введите команду:
sudo ufw app list
Она выведет на экран список всех приложений, требующих доступ к сети. Найдём в списке Nginx:
# Output
Available applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
Здесь выберем тот вариант, который нас устраивает — полностью открыть доступ веб-серверу к сети или только по одному из протоколов HTTP/HTTPS:
sudo ufw allow “Nginx HTTP
После этого можно проверить работу Nginx любым удобным способом. Вы можете зайти на страницу сервера в браузере — если ничего ещё не было настроено, то там будет отображаться стартовая страница Nginx. Или можно проверить занятые порты командой netstat
. В нашем случае Nginx будет слушать стандартный порт 80:
sudo netstat -tulpn
# Output
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 338/nginx: master p
После установки веб-сервера можно переходить к дальнейшим действиям — установке MySQL и PHP. Если же вы планируете установить на вашу машину ещё и Apache, то для его корректной установки и настройки лучше будет остановить Nginx:
sudo systemctl stop nginx
# Установка Apache
Устанавливать Apache будем также из стандартных репозиториев — доступных там версий достаточно для решения большинства современных задач. Если вы не сделали этого на предыдущем шаге, то обновите список пакетов apt и установите Apache:
sudo apt update
sudo apt install apache2
В списке apt будут пакеты, которые будут установлены. Здесь же будет указано, сколько дискового пространства они займут. Нажимаем «y» и ждём конца установки.
После установки Apache добавим его в список разрешённых приложений фаервола.
Введите команду:
sudo ufw app list
Она покажет список профилей приложений, установленных на веб-сервере, которые используют подключение к сети. Здесь найдём Apache:
# Output
Available applications:
Apache
Apache Full
Apache Secure
Подробнее профиль Apache Full можно посмотреть с помощью команды:
sudo ufw app info “Apache Full”
# Output
Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.
Ports:
80,443/tcp
Из результатов выдачи видно, что Apache работает на портах 80 и 443.
Добавим его в список разрешённых приложений нашего фаервола:
sudo ufw allow “Apache Full”
Чтобы проверить, что Apache запустился и правильно работает, можно зайти на его страницу в браузере — там должна быть стартовая страница Apache.
Примечание
Если вы используете VPS на Джино, то в адресной строке браузера можно указать технический домен или получить выделенный IP и подключаться к своему серверу по полученному адресу.
# Установка MySQL
Мы убедились, что веб-сервер запущен и работает правильно, теперь перейдём к установке MySQL:
sudo apt install mysql-server
В данном случае apt также сообщит об устанавливаемых пакетах и дисковом пространстве, которое они займут. Нажмите «y», чтобы согласиться на установку.
После установки MySQL можно запустить предустановленный плагин, который закроет некоторые проблемы с безопасностью ваших баз:
sudo mysql_secure_installation
Сначала плагин проверит надёжность задаваемого пароля root-пользователя: он предложит выбрать степень сложности, которой должен удовлетворять пароль, и попросит создать его.
Важно понимать, что в данном случае задаётся пароль root-пользователя MySQL, а не всего сервера.
После прохождения проверки пароля нажмите «y», чтобы подтвердить его. Двигайтесь дальше, также отвечая «y» на все вопросы: вы удалите анонимных пользователей и тестовые базы данных, запретите подключение к базе от имени root-пользователя и добавите эти правила непосредственно в MySQL.
Теперь можно проверить работоспособность MySQL:
sudo mysql
В результате вы должны увидеть на экране примерно такое сообщение:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 12
Server version: 8.0.27-0ubuntu0.20.04.1 (Ubuntu)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
Команда mysql
позволяет нам войти в консоль управления MySQL как root-пользователь с соответствующими правами. При этом мы не вводим пароль, хотя и создали его чуть раньше. Дело в том, что по умолчанию для root-пользователя установлен метод аутентификации unix_socket, а не password, т.е. войти как root-пользователь может только пользователь с правами sudo, что уже является способом защиты.
Для удобства работы и безопасности мы рекомендуем создавать для каждой новой базы данных отдельного пользователя со своими правами.
MySQL-сервер запущен. Переходим к установке PHP.
# Установка PHP
PHP будет отвечать за динамическое наполнение нашего сайта: взаимодействие с MySQL, работу скриптов и передачу контента веб-серверу для вывода пользователю.
Для установки PHP также будем использовать установщик APT. Вместе с самим PHP сразу установим дополнительные модули для работы с Apache и MySQL.
sudo apt install php libapache2-mod-php php-mysql
Названия модулей можно вводить в одной строке, разделяя их пробелом.
Установка должна пройти без каких-либо проблем. Чуть позже мы проверим работоспособность PHP, а пока обратимся к индексному файлу.
# Приоритет при обработке индексных файлов Apache
По умолчанию при обращении пользователя к серверу Apache первым делом проверяет index.html и отправляет ответ пользователю из этого файла. Мы можем сделать так, чтобы сначала обрабатывался index.php.
Для этого откроем файл dir.conf для редактирования:
sudo vim /etc/apache2/mods-enabled/dir.conf
Здесь мы используем редактор vim, но вы можете использовать любой другой, например, nano.
Содержимое файла dir.conf выглядит следующим образом:
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>
Нам нужно переместить файл с расширением .php на первое место. В итоге индексный файл должен выглядеть так:
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
Сохраним изменения в файле и перезапустим Apache, чтобы изменения вступили в силу:
sudo systemctl restart apache2
# Установка расширений PHP
Список доступных для установки модулей (расширений) PHP можно посмотреть командой:
apt search php*
Эта команда выведет на экран большой список доступных для установки расширений с их кратким описанием. Узнать подробнее о любом расширении можно командой:
apt show package
Для установки выбранных расширений используем команду:
sudo apt install package1 package2 package3
Названия выбранных приложений можно вводить через пробел в одной строке.
# Создание виртуального хоста
Apache — достаточно гибкий и удобный в использовании веб-сервер, чтобы его можно было использовать сразу для нескольких сайтов с разными доменными именами. Для этого используют виртуальные хосты.
По умолчанию Apache поддерживает только один сайт, все файлы которого находятся в /var/www/html
. Мы не будем вносить исправления в эту директорию, а создадим новую папку, в которой будут находиться все файлы нашего нового сайта.
sudo mkdir /var/www/domain_name
Здесь domain_name — доменное имя, к которому будет привязан наш сайт.
Передадим права на созданную папку пользователю, от имени которого мы сейчас зашли:
sudo chown -R $USER:$USER /var/www/your_domain
По умолчанию на эту папку установлены “правильные” права, но чтобы быть уверенными в этом, можем продублировать их:
sudo chmod -R 755 /var/www/domain_name
Чтобы проверить работу виртуального хоста, создадим индексный файл index.html, к которому будет обращаться Apache, когда мы будем заходить на наш сайт:
vim /var/www/domain_name/index.html
Содержимое файла будет таким:
<html>
<head>
<title>Welcome to your domain</title>
</head>
<body>
<h1>Yep it works</h1>
</body>
</html>
Теперь, чтобы Apache правильно обработал этот файл, создадим конфигурационный файл Apache для нашего виртуального хоста. Мы не будем изменять имеющийся по умолчанию 000-default.conf, а создадим новый domain_name.conf.
sudo vim /etc/apache2/sites-available/domain_name.conf
Содержимое нашего нового файла будет немного отличаться от 000-default.conf:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName domain_name
ServerAlias www.domain_name
DocumentRoot /var/www/domain_name
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Здесь DocumentRoot указывает на адрес с нашим доменным именем, а директивы ServerName и ServerAlias определяют доменное имя для этого виртуального хоста. Также важно обратить внимание, что в строке ServerAdmin нужно указывать e-mail, к которому у вас есть доступ.
После того как вы закончили создание файла и сохранили его, нужно подключить его к серверу и отключить файл 000-default.conf:
sudo a2ensite domain_name.conf
sudo a2dissite 000-default.conf
Проверим, что всё получилось. Запустим тест конфигурации Apache:
sudo apache2ctl configtest
Если всё правильно, на экране увидим сообщение:
Syntax OK
Теперь перезагрузим Apache, чтобы изменения вступили в силу, и можно будет проверить результат нашей работы:
sudo system2ctl restart apache2
Сейчас откроем браузер и зайдём по адресу http://domain_name
.
Мы должны увидеть сообщение:
Отлично! Наш виртуальный хост работает. Остался последний шаг перед началом работы: проверить правильность работы PHP.
# Проверка работы PHP
Чтобы проверить, что PHP правильно установлен и работает, напишем простой скрипт. Для этого в папке с нашим доменным именем создадим файл info.php:
sudo vim /var/www/domain_name/info.php
Содержимое файла:
<?php
phpinfo();
Этот скрипт выведет на страницу сайта таблицу с информацией об установленной версии PHP.
Сохраняем наш файл и в браузере заходим по адресу http://domain_name/info.php
.
Если на странице вы видите большую таблицу с характеристиками установленной у вас версии PHP, это значит, что PHP на вашем веб-сервере работает, как надо. После теста файл со скриптом можно удалить, чтобы случайные пользователи не получили доступ к информации о вашем веб-сервере:
sudo rm /var/www/domain_name/info.php
Теперь наш сервер готов к полноценной работе с динамическими сайтами и веб-приложениями.