# Установка программных стеков 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.

Мы должны увидеть сообщение:

«Yep»

Отлично! Наш виртуальный хост работает. Остался последний шаг перед началом работы: проверить правильность работы 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

Теперь наш сервер готов к полноценной работе с динамическими сайтами и веб-приложениями.