Предыдущая версия руководства была написана Бреннаном Бернсом.
Стек LAMP - это набор программного обеспечения с открытым исходным кодом, которой обычно устанавливается на сервер для отображения динамических веб-сайтов и веб-приложений. Эта аббревиатура обозначает операционную систему Linux с установленным веб-сервером Apache. Данные сайта хранятся в базе данных MySQL, динамический контент обрабатывается с помощью PHP.
Эта статья описывает процесс установки LAMP на виртуальный сервер (Droplet) в Ubuntu 18.04.
Перед тем, как начать следовать шагам, описанным в этом руководстве, вам необходимо настроить отдельный, не-рутовый (non-root) профиль пользователя на вашем сервере с Ubuntu 18.04. Вы можете сделать это используя нашу статью о первичной настройке сервера на Ubuntu 18.04.
Веб-сервер Apache в настоящее время является одним из самых популярных веб-серверов в мире. Он хорошо документирован и используется значительную часть времени с момента создания сети Интернет, что делает его прекрасным выбором для хостинга веб-сайта.
Установим Apache используя менеджер пакетов Ubuntu apt
:
- sudo apt update
- sudo apt install apache2
Поскольку мы используем команду sudo
, эти команды будут выполняться с привилегиями root. В процессе установки операционная система запросит ваш пароль пользователя.
После ввода пароля apt
сообщит, какие пакеты будут установлены и сколько места они займут на диске. Нажмите Y
и Enter
для продолжения установки.
Теперь убедимся, что ваш файрвол пропускает HTTP и HTTPS трафик. Мы будем исходить из предположения, что вы уже выполнили инструкции по первичной настройке сервера и включили файрвол UFW. Для начала убедимся, что UFW имеет профиль для Apache следующей командой:
- sudo ufw app list
ВыводAvailable applications:
Apache
Apache Full
Apache Secure
OpenSSH
Проверим настройку профиля Apache Full
, она должна разрешать трафик для портов 80
и 443
:
- sudo ufw app info "Apache Full"
Вывод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
Разрешим входящий HTTP и HTTPS трафик для этого профиля:
- sudo ufw allow in "Apache Full"
Проверить результат установки можно набрав в вашем веб-браузере публичный IP адрес вашего сервера (если вы еще не знаете, как найти публичный IP адрес вашего сервера, смотрите следующий раздел этой статьи):
http://IP_адрес_вашего_сервера
Вы увидите страницу Apache, отображаемую по умолчанию для информации и целей тестирования. Она должна выглядеть похожим образом:
Если вы видите эту страницу, ваш веб-сервер корректно установлен и доступен через файрвол.
Если вы не знаете публичный IP адрес вашего сервера, его можно определить несколькими способами. Обычно, это адрес, который вы используете для соединения с вашим сервером по SSH.
Определить этот адрес можно с помощью командной строки. Сначала используйте инструмент iproute2
для получения вашего адреса набрав следующую команду:
- ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Результатом выполнения этой команды будут две или три строки, содержащие корректный адрес. Ваш компьютер, возможно, сможет использовать только один из них, поэтому попробуйте каждый вариант.
В качестве альтернативы можно узнать, как curl
видит ваш сервер. Это можно сделать следующим образом:
- sudo apt install curl
- curl http://icanhazip.com
В независимости от метода, который вы использовали для получения своего IP адреса, вы можете использовать этот IP адрес для доступа к серверу через адресную строку веб-браузера.
Теперь, когда наш веб-сервер установлен и запущен, пора установить MySQL. MySQL это система управления базами данных. Она организует и обеспечит доступ к базам данных, в которых ваш сайт может хранить информацию.
Мы можем вновь использовать apt
для загрузки и установки программного обеспечения:
- sudo apt install mysql-server
Обратите внимание: В данном случае вам нет необходимости предварительно выполнять команду sudo apt update
, т.к. мы выполняли ее недавно при установке Apache, и индекс пакетов на вашем компьютере уже должен быть обновлен.
Вам будет показан список пакетов, которые будут установлены, а также сколько места на диске они займут. Нажмите Y
для продолжения установки.
После завершения установки нам потребуется выполнить некоторые дополнительные команды, чтобы наше окружение MySQL было настроено безопасным образом. Введите следующую команду:
- sudo mysql_secure_installation
В результате выполнения этой команды вам будет предложено настроить плагин валидации паролей (VALIDATE PASSWORD PLUGIN
).
Внимание: Решение включать плагин валидации паролей или нет носит субъективный характер. При включении все пароли, которые не удовлетворяют определённым критериям безопасности, будут отвергаться MySQL с сообщением об ошибке. Это может вызывать проблемы, если вы используете “слабые” пароли совместно с программным обеспечением, которое конфигурирует профили пользователей MySQL, например, пакеты Ubuntu для phpMyAdmin. Вы можете оставить валидацию паролей отключенной, но в этом случае вам следует всегда использовать “сильные” уникальные пароли для пользователей базы данных.
Введите Y
для включения плагина или что-нибудь другое для продолжения без его включения:
VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?
Press y|Y for Yes, any other key for No:
Если вы включили валидацию паролей, вам будет предложено установить уровень надёжности паролей при валидации. Имейте в виду, что при выборе значения 2
(самый строгий уровень валидации), вы будете получать ошибки при попытке задать пароль без цифр, букв в верхнем и нижнем регистре, а также без специальных символов, а также при попытке использовать пароль, основанный на распространённых словах, которые уязвимы для подбора паролей по словарю.
There are three levels of password validation policy:
LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
Вне зависимости от того, включили вы плагин валидации паролей или нет, далее вам будет предложено задать пароль для пользователя root для MySQL. Это административный аккаунт пользователя в MySQL, который имеет повышенные привилегии. Вы можете рассматривать его, как аналог пользователя root для самого сервера (с той лишь разницей, что это аккаунт для MySQL). Задайте сильный уникальный пароль, не оставляйте пароль пустым.
Если вы включили валидацию паролей, вам будет показан уровень надёжности заданного вами ранее пароля root пользователя, а также вам будет предложено изменить этот пароль. Если вы не хотите менять пароль, введите N
или “no”:
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
На все последующие вопросы просто вводите Y
и нажимайте клавишу ENTER
для выбора настроек по умолчанию. При этом удалятся некоторые тестовые пользователи и базы данных, будет отключена возможность удаленного доступа с учетной записью root-пользователя, и все изменения будут немедленно применены в MySQL.
Обратите внимание на то, что на серверах Ubuntu, использующих MySQL 5.7 (и более поздние версии), root пользователь в MySQL настроен таким образом, что его аутентификация по умолчанию происходит с помощью плагина auth_socket
, а не с помощью пароля. Это во многих случаях повышает безопасность, но, в то же время, может усложнить настройку доступа к root пользователю для некоторых программ (например, phpMyAdmin).
Если вы хотите настроить root пользователя на использование пароля, вам необходимо изменить метод аутентификации с auth_socket
на mysql_native_password
. Для того, чтобы это сделать, войдите в оболочку MySQL в терминале:
- sudo mysql
Далее просмотрите метод аутентификации для каждого из ваших пользователей MySQL с помощью следующей команды:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
Вывод+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | | auth_socket | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
В этом примере ваш пользователь root использует аутентификацию с помощью плагина auth_socket
. Для изменения этой настройки на использование пароля используйте следующую команду ALTER USER
. Не забудьте изменить password
на ваш сильный пароль:
- ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Далее выполните команду FLUSH PRIVILEGES
, которая применит внесённые изменения:
- FLUSH PRIVILEGES;
Проверьте методы авторизации для пользователей ещё раз для того, чтобы убедиться, что пользователь root более не использует плагин auth_socket
для авторизации:
- SELECT user,authentication_string,plugin,host FROM mysql.user;
Вывод+------------------+-------------------------------------------+-----------------------+-----------+
| user | authentication_string | plugin | host |
+------------------+-------------------------------------------+-----------------------+-----------+
| root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost |
| mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
Как можно видеть на представленном выводе теперь root пользователь MySQL аутентифицируется с использованием пароля. После того, как мы в этом убедились, можно выйти из оболочки MySQL:
- exit
Теперь ваша система управления базами данных установлена и мы можем двигаться дальше и установить PHP, последний компонент LAMP.
PHP это компонент, который будет обрабатывать код для отображения динамического контента. Он может запускать скрипты, подключаться к нашим базам данных MySQL для получения информации и передавать обработанный контент в наш веб-сервер для отображения.
Мы можем вновь воспользоваться менеджером пакетов apt
для установки компонентов. Мы также добавим некоторые вспомогательные пакеты, чтобы код на PHP мог работать с нашим сервером Apache, а также обращаться к базе данных MySQL:
- sudo apt install php libapache2-mod-php php-mysql
Данная команда должна установить PHP без каких либо проблем. Вскоре мы это проверим.
В большинстве случаев, мы захотим изменить способ, который Apache использует для поиска файлов при запросе директории. На данный момент, если пользователь запрашивает директорию с сервера, Apache в первую очередь будет искать файл с названием index.html
. Мы хотим, чтобы наш веб-сервер отдавал предпочтение PHP файлам, так что мы настроим Apache таким образом, чтобы сначала он искал файлы index.php
.
Для этого введите следующую команду, чтобы открыть файл dir.conf
в текстовом редакторе с привилегиями пользователя root:
- 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>
Мы хотим переместить индексный файл 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 - LSB: Apache2 web server
Loaded: loaded (/etc/init.d/apache2; bad; vendor preset: enabled)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Tue 2018-04-23 14:28:43 EDT; 45s ago
Docs: man:systemd-sysv-generator(8)
Process: 13581 ExecStop=/etc/init.d/apache2 stop (code=exited, status=0/SUCCESS)
Process: 13605 ExecStart=/etc/init.d/apache2 start (code=exited, status=0/SUCCESS)
Tasks: 6 (limit: 512)
CGroup: /system.slice/apache2.service
├─13623 /usr/sbin/apache2 -k start
├─13626 /usr/sbin/apache2 -k start
├─13627 /usr/sbin/apache2 -k start
├─13628 /usr/sbin/apache2 -k start
├─13629 /usr/sbin/apache2 -k start
└─13630 /usr/sbin/apache2 -k start
Чтобы расширить функциональность PHP, мы можем установить некоторые дополнительные модули. Для просмотра доступных опций для модулей и библиотек PHP вы можете передать результат apt search
в less
, которая позволит вам проматывать вывод:
- apt search php- | less
Используйте клавиши стрелок вверх и вниз для проматывания списка, для выхода нажмите Q
.
В результате вам будут показаны все опциональные компоненты, которые можно установить, сопровождаемые кратким описанием для каждого:
bandwidthd-pgsql/bionic 2.0.1+cvs20090917-10ubuntu1 amd64
Tracks usage of TCP/IP and builds html files with graphs
bluefish/bionic 2.2.10-1 amd64
advanced Gtk+ text editor for web and software development
cacti/bionic 1.1.38+ds1-1 all
web interface for graphing of monitoring systems
ganglia-webfrontend/bionic 3.6.1-3 all
cluster monitoring toolkit - web front-end
golang-github-unknwon-cae-dev/bionic 0.0~git20160715.0.c6aac99-4 all
PHP-like Compression and Archive Extensions in Go
haserl/bionic 0.9.35-2 amd64
CGI scripting program for embedded environments
kdevelop-php-docs/bionic 5.2.1-1ubuntu2 all
transitional package for kdevelop-php
kdevelop-php-docs-l10n/bionic 5.2.1-1ubuntu2 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 Ubuntu's default
PHP version (currently 7.2).
...
Если после изучение вы решили, что хотите установить пакет, вы можете сделать это используя команду apt install
как мы делали ранее при установке другого программного обеспечения.
Если мы решили, что хотим установить php-cli
, мы можем ввести команду:
- sudo apt install php-cli
Для установки сразу нескольких модулей, вы можете перечислить их через пробелы следом за командой apt install
следующим образом:
- sudo apt install package1 package2 ...
Теперь ваш стек LAMP установлен и сконфигурирован. Однако перед внесением любых других изменений и перед установкой приложений нам ещё стоит протестировать настройку PHP на случай возможных проблем.
Чтобы проверить, что наша система сконфигурирована должным образом, мы можем создать простой PHP скрипт. Назовём этот скрипт info.php
. Чтобы Apache нашел и обработал файл корректно, он должен быть сохранен в специальной директории, которая называется “web root”.
В Ubuntu 18.04 данная директория находится по адресу /var/www/html/
. Мы можем создать там файл введя следующую команду:
- sudo nano /var/www/html/info.php
Откроется пустой файл. Введём в файл следующий текст, который является корректным PHP кодом:
<?php
phpinfo();
?>
После внесения изменений сохраните и закройте файл.
Теперь мы можем проверить, может ли веб-сервер корректно отображать контент, сгенерированный PHP скриптом. Для проверки нам просто нужно открыть данную страницу в веб-браузере. Вам снова потребуется публичный IP-адрес сервера.
Откроем этот адрес:
http://IP_адрес_вашего_сервера/info.php
Страница, на которую вы попадете, должна выглядеть похожим образом:
Данная страница содержит информацию о вашем сервере с точки зрения PHP. Она полезна для отладки и чтобы удостовериться в корректности применения настроек.
Если все прошло успешно, значит ваш PHP работает корректно.
Вы, возможно, захотите удалить этот файл после теста, т.к. он может дать информацию о вашем сервере неавторизованным пользователям. Для удаления файла введите команду:
- sudo rm /var/www/html/info.php
Вы всегда сможете заново создать этот файл, если вам снова потребуется доступ к этой информации.
Теперь, когда ваш стек LAMP установлен, у вас есть множество вариантов того, что делать дальше. Фактически, вы установили платформу, которая позволит установить (развернуть) большинство типов веб-сайтов и сетевого программного обеспечения на вашем сервере.
В качестве первого шага мы рекомендуем настроить веб-сервер на работу через HTTPS. Самый простой вариант обезопасить свой сайт с помощью бесплатного TLS/SSL сертификата - это использовать сервис Let’s Encrypt.
Некоторые другие популярные мероприятия:
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!