Tutorial

Как установить Linux, Apache, MySQL, PHP (LAMP) в Ubuntu 16.04

Published on November 30, 2016
Русский
Как установить Linux, Apache, MySQL, PHP (LAMP) в Ubuntu 16.04

Введение

Стек LAMP - это набор программного обеспечения с открытым исходным кодом, которой обычно устанавливается на сервер для отображения динамических веб-сайтов и веб-приложений. Эта аббревиатура обозначает операционную систему Linux с установленным веб-сервером Apache. Данные сайта хранятся в базе данных MySQL, динамический контент обрабатывается с помощью PHP.

Эта статья описывает процесс установки LAMP на виртуальный сервер (Droplet) в Ubuntu 16.04. Ubuntu удовлетворяет первому требованию к LAMP: это операционная система на базе Linux.

Необходимые условия

Перед тем, как начать следовать шагам, описанным в этой статье, вам необходимо настроить отдельный, не-рутовый (non-root) профиль пользователя на вашем сервере. Вы можете сделать это следуя шагам 1-4 статьи о первичной настройке сервера на Ubuntu 16.04.

Шаг 1 - Установка Apache и настройка файрвола

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

Мы с легкостью можем установить Apache используя менеджер пакетов Ubuntu apt. Менеджер пакетов позволяет нам легко установить большую часть программного обеспечения из репозиториев Ubuntu. О том, как использовать apt, вы можете узнать из этой статьи.

Для начала установки выполним команды:

  1. sudo apt-get update
  2. sudo apt-get install apache2

Поскольку мы используем команду sudo, эти команды будут выполняться с привилегиями root. В процессе операционная система запросит ваш пароль пользователя.

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

Настройка глобальной переменной ServerName

Далее мы добавим одну строку в /etc/apache2/apache2.conf для устранения предупреждений (warnings) о синтаксических ошибках. Несмотря на то, что это просто предупреждение и никакой проблемы не существует, если не задать глобальную переменную ServerName, вы будете получать следующее предупреждение об ошибке при проверке настройки конфигурации Apache:

  1. 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

Откройте главный конфигурационный файл в своём текстом редакторе командой:

  1. sudo nano /etc/apache2/apache2.conf

Добавьте в конец файла переменную ServerName, указывающую на ваше основное доменное имя. Если для вашего сервера не настроено доменное имя, вы можете использовать публичный IP-адрес сервера:

Внимание

Если вы не знаете IP-адрес Вашего сервера, вы можете прочитать об этом в разделе Как найти публичный IP адрес вашего сервера.

/etc/apache2/apache2.conf
. . .
ServerName домен_или_IP_адрес_сервера

После этого сохраните и закройте файл.

Теперь можно проверить результат напечатав следующую команду:

  1. sudo apache2ctl configtest

Поскольку мы установили глобальную переменную ServerName, вы должны увидеть вывод следующего характера:

Вывод
Syntax OK

Перезапустите Apache для применения внесённых изменений:

  1. sudo systemctl restart apache2

Теперь можно приступать к настройке файрвола.

Настройка файрвола

Теперь убедимся, что ваш файрвол пропускает HTTP и HTTPS трафик. Мы будем исходить из предположения, что вы уже выполнили инструкции по первичной настройке сервера и включили файрвол UFW. Для начала убедимся, что UFW имеет профиль для Apache следующей командой:

  1. sudo ufw app list
Вывод
Available applications: Apache Apache Full Apache Secure OpenSSH

Проверим настройку профиля Apache Full, она должна разрешать трафик для портов 80 и 443:

  1. 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

Разрешим входящий трафик для этого профиля:

  1. sudo ufw allow in "Apache Full"

Проверить результат установки можно набрав в вашем веб-браузере публичный IP адрес вашего сервера (если вы еще не знаете, как найти публичный IP адрес вашего сервера, смотрите следующий раздел этой статьи):

http://домен_или_IP_адрес_сервера

Вы увидите страницу Apache, отображаемую по умолчанию для информации и целей тестирования. Она должна выглядеть похожим образом:

Тестовая страница Apache

Если вы видите эту страницу, ваш веб-сервер корректно установлен и доступен через файрвол.

Как найти публичный IP адрес вашего сервера

Если вы не знаете публичный IP адрес вашего сервера, его можно определить несколькими способами. Обычно, это адрес, который вы используете для соединения с вашим сервером по SSH.

Определить этот адрес можно с помощью командной строки. Сначала используйте инструмент iproute2 для получения вашего адреса набрав следующую команду:

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

Результатом выполнения этой команды будет одна или две строки, содержащие корректный адрес. Ваш компьютер, возможно, сможет использовать только один из них, поэтому попробуйте каждый вариант.

В качестве альтернативы можно узнать, как curl видит ваш сервер. Это можно сделать следующим образом:

  1. sudo apt-get install curl
  2. curl http://icanhazip.com

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

Шаг 2 - Установка MySQL

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

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

  1. sudo apt-get install mysql-server

Внимание

В данном случае вам нет необходимости предварительно выполнять команду sudo apt-get update, т.к. мы выполняли ее недавно при установке Apache, и индекс пакетов на вашем комьпютере уже должен быть обновлен.

Вам будет показан список пакетов, которые будут установлены, а также сколько места на диске они займут. Нажмите Y для продолжения установки.

В процессе установки ваш сервер попросит вас задать и подтвердить пароль для пользователя “root” в MySQL. Это администраторский аккаунт в MySQL, который имеет расширенные права. Рассматривайте его как аналог root-аккаунта для самого сервера (однако тот, который вы конфигурируете в данный момент, подходит только для MySQL). Задайте надёжный уникальный пароль, не оставляйте пароль не заданным.

После завершения установки нам потребуется выполнить некоторые дополнительные команды, чтобы наше окружение MySQL было настроено безопасным образом. Введите следующую команду:

  1. 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.

Теперь ваша система управления базами данных установлена и мы можем двигаться дальше.

Шаг 3 - Установка PHP

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

Мы можем вновь воспользоваться менеджером пакетов apt для установки компонентов. Мы также добавим некоторые вспомогательные пакеты, чтобы код на PHP мог работать с нашим сервером Apache, а также обращаться к базе данных MySQL:

  1. sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql

Данная команда должна установить PHP без каких либо проблем. Вскоре мы это проверим.

В большинстве случаев, мы захотим изменить способ, который использует Apache для поиска файлов при запросе директории. На данный момент, если пользователь запрашивает директорию с сервера, Apache в первую очередь будет искать файл с названием index.html. Мы хотим, чтобы наш веб-сервер отдавал предпочтение PHP файлам, так что мы настроим Apache таким образом, чтобы сначала он искал файлы index.php.

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

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

Содержимое файла будет выглядеть следующим образом:

/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 следующим образом:

/etc/apache2/mods-enabled/dir.conf
<IfModule mod_dir.c>
    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>

После внесения правок сохраните и закройте файл сочетанием клавиш CTRL-X. Вам придется подтвердить операцию вводом Y и затем нажатием клавиши ENTER для подтверждения места сохранения файла.

После этого нам необходимо перезапустить Apache для применения внесенных изменений. Вы можете сделать это при помощи команды:

  1. sudo systemctl restart apache2

Мы также можем проверить статус сервиса apache2 используя systemctl:

  1. 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, мы можем установить некоторые дополнительные модули.

Для просмотра доступных опций для модулей и библиотек PHP вы можете передать результат apt-cache search в less, которая позволит вам проматывать вывод:

  1. 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]
...
:

Чтобы получить больше информации по каждому модулю, вы можете поискать в Интернете или посмотреть полное описание пакета при помощи команды:

  1. apt-cache show package_name

Ответ будет содержать много текста, среди которого есть поле Description-en. Именно оно и будет содержать расширенное описание функциональности, предоставляемой модулем.

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

  1. 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, мы можем ввести команду:

  1. sudo apt-get install php-cli

Для установки сразу нескольких модулей, вы можете перечислить их через пробелы следом за командой apt-get install следующим образом:

  1. sudo apt-get install package1 package2 ...

Теперь ваш стек LAMP установлен и сконфигурирован. Однако нам еще предстоит протестировать PHP.

Шаг 4 - Тестирование работы PHP на вашем веб-сервере

Чтобы проверить, что наша система сконфигурирована должным образом, мы можем создать простой PHP скрипт.

Назовем скрипт info.php. Чтобы Apache нашел и обработал файл корректно, он должен быть сохранен в специальную директорию, которая называется “web root”.

В Ubuntu 16.04 данная директория находится по адресу /var/www/html/. Мы можем создать там файл введя следующую команду:

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

Откроется пустой файл. Мы хотим ввести в файл следующий текст, который является корректным PHP кодом:

info.php
<?php
phpinfo();
?>

После внесения изменений сохраните и закройте файл.

Теперь мы можем проверить, может ли веб-сервер корректно отображать контент, сгенерированный PHP скриптом. Для проверки нам просто нужно открыть данную страницу в веб-браузере. Вам снова потребуется публичный IP-адрес сервера.

Откроем этот адрес:

http://домен_или_IP_адрес_сервера/info.php

Страница, на которую вы попадете, должна выглядеть похожим образом:

Тестовая страница PHP

Данная страница содержит информацию о вашем сервере с точки зрения PHP. Она полезна для отладки и чтобы удостовериться в корректности применения настроек.

Если все прошло успешно, значит ваш PHP работает корректно.

Вы, возможно, захотите удалить этот файл после теста, т.к. он может дать информацию о вашем сервере неавторизованным пользователям. Для удаления файла введите команду:

  1. 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.

Learn more about us


About the authors

Default avatar
maxmikheev

translator


Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
4 Comments


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” запустил а вот дождаться ее окончания не смог, может просто не понял той информации что она мне выдала, пришлось принудительно закрыть терминал. Может если будет время и желание поясните в чем я мог допустить ошибку. Еще раз спасибо.

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel