Стек LAMP – это группа открытых программ, которая необходима серверу для поддержки динамических сайтов и веб-приложений. Акроним LAMP расшифровывается как Linux (операционная система), Apache (веб-сервер), MariaDB (система управления базами данных) и PHP (серверный язык сценариев для обработки динамического контента).
На сервере уже установлен первый компонент – операционная система Debian, которая является дистрибутивом Linux. Этот мануал поможет установить остальные компоненты стека.
Но если вдруг вы решили сэкономить время, то мы позаботились о том, чтобы каждый смог просто заказать готовый облачный сервер VPS с WordPress на борту на нашем хостинге!
Требования
- Сервер 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 – надёжная и гибкая платформа для развёртывания сайта или приложения.