Установка стека LAMP в Debian 9

Стек LAMP – это группа открытых программ, которая необходима серверу для поддержки динамических сайтов и веб-приложений. Акроним LAMP расшифровывается как Linux (операционная система), Apache (веб-сервер), MariaDB (система управления базами данных) и PHP (серверный язык сценариев для обработки динамического контента).

На сервере уже установлен первый компонент – операционная система  Debian, которая является дистрибутивом Linux. Этот мануал поможет установить остальные компоненты стека.

Требования

  • Сервер Debian 9.
  • Пользователь с доступом к команде sudo и базовый брандмауэр (все инструкции можно найти здесь).

1: Установка Apache и настройка брандмауэра

Apache является одним из самых популярных веб-серверов в мире. Он хорошо документирован и широко используется в Интернете почти с самого начала его существования.

Установить Apache очень просто, пакеты этого веб-сервера доступны в стандартном репозитории. Для установки используйте пакетный менеджер apt:

sudo apt update
sudo apt install apache2

Чтобы запустить команды с правами sudo, нужно предоставить пароль текущего пользователя.

Получив валидный пароль, менеджер apt сообщит, какие пакеты он собирается установить и сколько дискового пространства для этого потребуется. Нажмите Y и ENTER, чтобы продолжить.

Примечание: Далее подразумевается, что вы настроили брандмауэр UFW согласно соответствующему разделу руководства по начальной настройке сервера.

Теперь нужно убедиться, что брандмауэр UFW пропускает трафик HTTP и HTTPS. Просмотрите доступные профили Apache:

sudo ufw app list

Профили WWW управляют трафиком веб-сервера:

Available applications:
. . .
WWW
WWW Cache
WWW Full
WWW Secure
. . .

Профиль WWW Full пропускает трафик на порт 80 и 443.

sudo ufw app info "WWW Full"
Profile: WWW Full
Title: Web Server (HTTP,HTTPS)
Description: Web Server (HTTP,HTTPS)
Ports:
80,443/tcp

Разрешите входящий трафик HTTP и HTTPS:

sudo ufw allow in “WWW Full”

Чтобы убедиться, что теперь брандмауэр поддерживает входящий трафик на порт 80 или 443, посетите внешний IP своего сервера в браузере.

http://your_server_ip

На экране должна появиться стандартная страница Apache для Debian 9:

It works!
This is the default welcome page used to test the correct operation of the Apache2 server after installation on Debian systems. …

Как узнать свой внешний IP-адрес

Существует несколько способов определить внешний IP-адрес сервера при помощи командной строки.

Во-первых, можно использовать инструменты iproute2:

ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'

Команда вернёт несколько адресов, однако сервер может использовать не все эти адреса, а только один из них; проверьте каждый полученный адрес.

Также можно запросить свой адрес у третьей стороны при помощи утилиты curl.

sudo apt install curl
curl http://icanhazip.com

2: Установка MariaDB

Теперь, когда веб-сервер запущен, пришло время установить MariaDB. MariaDB – это система управления базами данных. Она организует и обеспечивает доступ к базам данных, в которых сайт может хранить свою информацию.

MariaDB – это форк MySQL, разработанный сообществом. В Debian 9 сервер MySQL по умолчанию – MariaDB 10.1, а пакет mysql-server (обычно используется для установки MySQL) – это переходный пакет, который фактически установит MariaDB. Однако рекомендуется сразу установить MariaDB, используя пакет mariadb-server.

Установите его с помощью apt:

sudo apt install mariadb-server

Примечание: В данном случае обновлять индекс пакетов не нужно, потому что он был обновлён перед установкой Apache.

Менеджер снова сообщит список пакетов, которые будут установлены, и необходимое для этого дисковое пространство.

После завершения установки нужно запустить сценарий безопасности, который удалит ненадёжные параметры  и защитит БД от несанкционированного доступа.

sudo mysql_secure_installation

Сценарий задаст ряд вопросов. Сначала нужно указать root-пароль MariaDB. Это административная учетная запись MariaDB, которая имеет повышенные привилегии. Она очень похожа на учетную запись root самого сервера (но используется только в MariaDB). Поскольку вы только что установили MariaDB и еще не внесли никаких изменений в конфигурацию, этого пароля пока у вас нет, поэтому просто нажмите Enter.

В следующем запросе скрипт предложит настроить пароль для базы данных. Введите N и нажмите клавишу Enter. В Debian учетная запись root MariaDB тесно связана с автоматизированным обслуживанием системы, поэтому изменять стандартные методы аутентификации этой учетной записи нельзя. Иначе при обновлении пакета БД может повредиться, а доступ к учетной записи root может быть утрачен. Позже мы рассмотрим, как настроить дополнительную учетную запись администратора, если аутентификация сокетов вам не подходит.

На остальные вопросы можно нажать Y и Enter. Это удалит анонимных пользователей и тестовые базы данных, отключит удалённый root логин и обновит текущие настройки MariaDB.

В новых установках в Debian пользователь root MariaDB по умолчанию поддерживает аутентификацию с помощью плагина unix_socket, а не с помощью пароля. Это во многих случаях позволяет повысить безопасность и удобство использования, но также может усложнить работу, если вам необходимо разрешить доступ внешней программе (например, phpMyAdmin).

Поскольку сервер использует root-пользователя для таких задач, как ротация логов, запуск и остановка сервера, аутентификацию учетной записи root лучше не изменять. Изменение учетных данных в файле /etc/mysql/debian.cnf может сработать на начальном этапе, но дальнейшие обновления пакетов могут перезаписать эти изменения. Вместо этого разработчики рекомендуют создать отдельную учетную запись администратора с парольной аутентификацией.

Итак, создайте аккаунт под названием admin с теми же правами, что и у root, но с поддержкой парольной аутентификации. Для этого откройте строку MariaDB в терминале:

sudo mariadb

Теперь создайте нового пользователя с привилегиями root и поддержкой парольной аутентификации. Укажите в команде имя и пароль своего пользователя.

GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;

Сбросьте привилегии:

FLUSH PRIVILEGES;

Закройте оболочку MariaDB:

exit

Теперь, чтобы получить доступ к своей базе данных в качестве нового администратора, вам необходимо пройти аутентификацию с помощью пароля, который вы только что установили, используя команду:

mariadb -u admin -p

На данный момент СУБД настроена, и вы можете перейти к установке PHP, последнего компонента стека LAMP.

3: Установка PHP

PHP – это серверный язык сценариев для создания динамических страниц. Он позволяет запускать сценарии, подключаться к БД MariaDB и передавать обработанный контент в браузер для отображения.

PHP также можно установить с помощью менеджера apt. Чтобы установить PHP и несколько вспомогательных пакетов (для настройки взаимодействия с Apache и MariaDB), введите команду:

sudo apt install php libapache2-mod-php php-mysql

В большинстве случаев рекомендуется настроить обработку файлов веб-сервером Apache при запросе каталога. На данный момент Apache сначала обслуживает index.html. Чтобы веб-сервер обслуживал PHP-файлы первыми, нужно отредактировать файл dir.conf:

sudo nano /etc/apache2/mods-enabled/dir.conf

Файл выглядит так:

<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>

Как видите, файлы index.php находятся в конце строки, а значит, веб-сервер будет обслуживать их в последнюю очередь. Переместите index.php в начало строки DirectoryIndex:

<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

Сохраните и закройте файл (Ctrl-X, Y, Enter).

Теперь перезапустите Apache, чтобы обновить настройки:

sudo systemctl restart apache2

Проверьте состояние сервиса apache2 при помощи systemctl:

sudo systemctl status apache2
apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2018-09-04 18:23:03 UTC; 9s ago
Process: 22209 ExecStop=/usr/sbin/apachectl stop (code=exited, status=0/SUCCESS)
Process: 22216 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 22221 (apache2)
Tasks: 6 (limit: 4915)
CGroup: /system.slice/apache2.service
├─22221 /usr/sbin/apache2 -k start
├─22222 /usr/sbin/apache2 -k start
├─22223 /usr/sbin/apache2 -k start
├─22224 /usr/sbin/apache2 -k start
├─22225 /usr/sbin/apache2 -k start
└─22226 /usr/sbin/apache2 -k start

Функционал PHP можно расширить при помощи модулей. Чтобы просмотреть список доступных модулей и библиотек PHP, используйте следующую команду:

apt search php- | less

Для навигации используйте кнопки со стрелками; чтобы закрыть список, нажмите q.

На экране появится список опциональных компонентов с кратким описанием каждого из них:

Sorting...
Full Text Search...
bandwidthd-pgsql/stable 2.0.1+cvs20090917-10 amd64
Tracks usage of TCP/IP and builds html files with graphs
bluefish/stable 2.2.9-1+b1 amd64
advanced Gtk+ text editor for web and software development
cacti/stable 0.8.8h+ds1-10 all
web interface for graphing of monitoring systems
cakephp-scripts/stable 2.8.5-1 all
rapid application development framework for PHP (scripts)
ganglia-webfrontend/stable 3.6.1-3 all
cluster monitoring toolkit - web front-end
haserl/stable 0.9.35-2+b1 amd64
CGI scripting program for embedded environments
kdevelop-php-docs/stable 5.0.3-1 all
transitional package for kdevelop-php
kdevelop-php-docs-l10n/stable 5.0.3-1 all
transitional package for kdevelop-php-l10n

:

Чтобы получить подробную информацию о модуле, используйте:

apt show package_name

Данная команда вернёт объёмный вывод, включая поле Description, в котором содержится подробное объяснение работы запрашиваемого модуля.

К примеру, можно узнать больше о модуле php-cli:

apt show php-cli

Description: command-line interpreter for the PHP scripting language (default)
This package provides the /usr/bin/php command interpreter, useful for
testing PHP scripts from a shell or performing general shell scripting tasks.
. PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used
open source general-purpose scripting language that is especially suited
for web development and can be embedded into HTML.
. This package is a dependency package, which depends on Debian's default
PHP version (currently 7.0).

Чтобы установить выбранный модуль, используйте команду apt install, указав имя модуля. Например, чтобы установить php-cli, нужно ввести:

sudo apt install php-cli

Чтобы установить несколько модулей с помощью одной команды, просто перечислите имена необходимых модулей через пробел.

sudo apt install package1 package2 ...

Теперь стек полностью установлен. Но прежде чем ставить на него приложение, его нужно протестировать и исправить возможные ошибки.

4: Тестирование стека LAMP

Сейчас нужно убедиться в том, что веб-сервер взаимодействует с PHP. Для этого нужно создать простой сценарий PHP, info.php. Чтобы веб-сервер Apache мог найти этот файл, его нужно поместить в root-каталог веб-сервера (в Debian это /var/www/html/).

sudo nano /var/www/html/info.php

На экране появится пустой файл. Поместите в него такой код:

<?php
phpinfo();
?>

Сохраните и закройте файл.

Теперь попробуйте открыть его в браузере:

http://server_domain_or_IP/info.php

На экране появится веб-страница, содержащая информацию о сервере. Если такая страница появилась, веб-сервер обслуживает файлы PHP.

Важно! После проверки обязательно удалите этот файл, иначе любой пользователь сможет получить доступ к конфиденциальным данным о сервере.

sudo rm /var/www/html/info.php

Заключение

Теперь на сервере Ubuntu 18.04 установлен программный стек LAMP – надёжная и гибкая платформа для развёртывания сайта или приложения.

Tags: , ,