Стек LAMP - это набор программного обеспечения с открытым исходным кодом, которой обычно устанавливается на сервер для отображения динамических веб-сайтов и веб-приложений. Эта аббревиатура обозначает операционную систему Linux с установленным веб-сервером Apache. Данные сайта хранятся в базе данных MySQL, динамический контент обрабатывается с помощью PHP.
Эта статья описывает процесс установки LAMP на виртуальный сервер (Droplet) в Ubuntu 16.04. Ubuntu удовлетворяет первому требованию к LAMP: это операционная система на базе Linux.
Перед тем, как начать следовать шагам, описанным в этой статье, вам необходимо настроить отдельный, не-рутовый (non-root) профиль пользователя на вашем сервере. Вы можете сделать это следуя шагам 1-4 статьи о первичной настройке сервера на Ubuntu 16.04.
Веб-сервер Apache в настоящее время является одним из самых популярных веб-серверов в мире. Он хорошо документирован и используется значительную часть времени с момента создания сети Интернет, что делает его прекрасным выбором для хостинга веб-сайта.
Мы с легкостью можем установить Apache используя менеджер пакетов Ubuntu apt
. Менеджер пакетов позволяет нам легко установить большую часть программного обеспечения из репозиториев Ubuntu. О том, как использовать apt
, вы можете узнать из этой статьи.
Для начала установки выполним команды:
- sudo apt-get update
- sudo apt-get install apache2
Поскольку мы используем команду sudo
, эти команды будут выполняться с привилегиями root. В процессе операционная система запросит ваш пароль пользователя.
После ввода пароля apt
сообщит, какие пакеты будут установлены и сколько места они займут на диске. Нажмите Y и Enter для продолжения установки.
Далее мы добавим одну строку в /etc/apache2/apache2.conf
для устранения предупреждений (warnings) о синтаксических ошибках. Несмотря на то, что это просто предупреждение и никакой проблемы не существует, если не задать глобальную переменную ServerName
, вы будете получать следующее предупреждение об ошибке при проверке настройки конфигурации Apache:
- sudo apache2ctl configtest
ВыводAH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Syntax OK
Откройте главный конфигурационный файл в своём текстом редакторе командой:
- sudo nano /etc/apache2/apache2.conf
Добавьте в конец файла переменную ServerName
, указывающую на ваше основное доменное имя. Если для вашего сервера не настроено доменное имя, вы можете использовать публичный IP-адрес сервера:
Внимание
Если вы не знаете IP-адрес Вашего сервера, вы можете прочитать об этом в разделе Как найти публичный IP адрес вашего сервера.
. . .
ServerName домен_или_IP_адрес_сервера
После этого сохраните и закройте файл.
Теперь можно проверить результат напечатав следующую команду:
- sudo apache2ctl configtest
Поскольку мы установили глобальную переменную ServerName
, вы должны увидеть вывод следующего характера:
ВыводSyntax OK
Перезапустите Apache для применения внесённых изменений:
- sudo systemctl restart apache2
Теперь можно приступать к настройке файрвола.
Теперь убедимся, что ваш файрвол пропускает 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
Разрешим входящий трафик для этого профиля:
- 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-get install curl
- curl http://icanhazip.com
В независимости от метода, который вы использовали для получения своего IP адреса, вы можете использовать этот IP адрес для доступа к серверу через адресную сроку веб-браузера.
Теперь, когда наш веб-сервер установлен и запущен, пора установить MySQL. MySQL это система управления базой данных. Она организует и обеспечит доступ к базам данных, в которых ваш сайт может хранить информацию.
Мы можем вновь использовать apt
для загрузки и установки программного обеспечения. В этот раз мы также установим некоторые вспомогательные пакеты, которые помогут нам в налаживании взаимодействия между компонентами:
- sudo apt-get install mysql-server
Внимание
В данном случае вам нет необходимости предварительно выполнять команду sudo apt-get update
, т.к. мы выполняли ее недавно при установке Apache, и индекс пакетов на вашем комьпютере уже должен быть обновлен.
Вам будет показан список пакетов, которые будут установлены, а также сколько места на диске они займут. Нажмите Y для продолжения установки.
В процессе установки ваш сервер попросит вас задать и подтвердить пароль для пользователя “root” в MySQL. Это администраторский аккаунт в MySQL, который имеет расширенные права. Рассматривайте его как аналог root-аккаунта для самого сервера (однако тот, который вы конфигурируете в данный момент, подходит только для MySQL). Задайте надёжный уникальный пароль, не оставляйте пароль не заданным.
После завершения установки нам потребуется выполнить некоторые дополнительные команды, чтобы наше окружение MySQL было настроено безопасным образом. Введите следующую команду:
- sudo mysql_secure_installation
Скрипт запросит пароль, который вы только что задали для root пользователя в MySQL. Далее вам будет предложено сконфигурировать плагин валидации паролей (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 пользователя, а также вам будет предложено изменить этот пароль. Если вы не хотите менять пароль, введите 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.
Теперь ваша система управления базами данных установлена и мы можем двигаться дальше.
PHP это компонент, который будет обрабатывать код для отображения динамического контента. Он может запускать скрипты, подключаться к нашим базам данных MySQL для получения информации и передавать обработанный контент в наш веб-сервер для отображения.
Мы можем вновь воспользоваться менеджером пакетов apt
для установки компонентов. Мы также добавим некоторые вспомогательные пакеты, чтобы код на PHP мог работать с нашим сервером Apache, а также обращаться к базе данных MySQL:
- sudo apt-get install php libapache2-mod-php php-mcrypt 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 Wed 2016-04-13 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
Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Stopped LSB: Apache2 web server.
Apr 13 14:28:42 ubuntu-16-lamp systemd[1]: Starting LSB: Apache2 web server...
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]: * Starting Apache httpd web server apache2
Apr 13 14:28:42 ubuntu-16-lamp apache2[13605]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerNam
Apr 13 14:28:43 ubuntu-16-lamp apache2[13605]: *
Apr 13 14:28:43 ubuntu-16-lamp systemd[1]: Started LSB: Apache2 web server.
Чтобы расширить функциональность PHP, мы можем установить некоторые дополнительные модули.
Для просмотра доступных опций для модулей и библиотек PHP вы можете передать результат apt-cache search
в less
, которая позволит вам проматывать вывод:
- apt-cache search php- | less
Используйте клавиши стрелок вверх и вниз для промативания списка, для выхода нажмите q.
В результате вам будут показаны все опциональные компоненты, которые можно установить, сопровождаемые коротким описанием для каждого:
libnet-libidn-perl - Perl bindings for GNU Libidn
php-all-dev - package depending on all supported PHP development packages
php-cgi - server-side, HTML-embedded scripting language (CGI binary) (default)
php-cli - command-line interpreter for the PHP scripting language (default)
php-common - Common files for PHP packages
php-curl - CURL module for PHP [default]
php-dev - Files for PHP module development (default)
php-gd - GD module for PHP [default]
php-gmp - GMP module for PHP [default]
...
:
Чтобы получить больше информации по каждому модулю, вы можете поискать в Интернете или посмотреть полное описание пакета при помощи команды:
- apt-cache show package_name
Ответ будет содержать много текста, среди которого есть поле Description-en
. Именно оно и будет содержать расширенное описание функциональности, предоставляемой модулем.
Например, чтобы узнать назначение модуля php-cli
, мы можем выполнить команду:
- apt-cache show php-cli
Помимо большого количества прочей информации, вы увидите следующее:
Вывод. . .
Description-en: 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-get install
как мы делали ранее при установке другого программного обеспечения.
Если мы решили, что хотим установить php-cli
, мы можем ввести команду:
- sudo apt-get install php-cli
Для установки сразу нескольких модулей, вы можете перечислить их через пробелы следом за командой apt-get install
следующим образом:
- sudo apt-get install package1 package2 ...
Теперь ваш стек LAMP установлен и сконфигурирован. Однако нам еще предстоит протестировать PHP.
Чтобы проверить, что наша система сконфигурирована должным образом, мы можем создать простой PHP скрипт.
Назовем скрипт info.php
. Чтобы Apache нашел и обработал файл корректно, он должен быть сохранен в специальную директорию, которая называется “web root”.
В Ubuntu 16.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.
Некоторые другие популярные мероприятия:
Обратите внимание: Мы будем обновлять указанные выше ссылки на документацию для 16.04 по мере ее написания.
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!
Содержимое info.php выводится как html, а не php, где я ошибся
лучшее!!!Спасибо огромное. идеально!!!
Кто не понимает linux (как и я), будьте осторожны в пункте настройки файрвола. Можно закрыть порт для вход через shh.
Спасибо огромное. Ваша статья мне очень помогла. Все очень подробно и главное все работает. Понимание наверное прийдет ко мне позже ) Единственное в конце третьего шага команду “sudo systemctl status apache2” запустил а вот дождаться ее окончания не смог, может просто не понял той информации что она мне выдала, пришлось принудительно закрыть терминал. Может если будет время и желание поясните в чем я мог допустить ошибку. Еще раз спасибо.