Поиск по сайту:

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


Введение

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

В этом руководстве мы установим стек LAMP на сервер Ubuntu 16.04. Ubuntu удовлетворит наше первое требование: операционная система Linux.

Предпосылки

Прежде чем приступить к работе с этим руководством, на вашем сервере должна быть настроена отдельная учетная запись пользователя без полномочий root с привилегиями sudo. Вы можете узнать, как это сделать, выполнив шаги 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, чтобы продолжить, и установка продолжится.

Настройка Global ServerName для подавления предупреждений о синтаксисе

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

  1. sudo apache2ctl configtest
Output
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-адрес вашего сервера, чтобы найти его.

. . .
ServerName server_domain_or_IP

Сохраните и закройте файл, когда закончите.

Затем проверьте наличие синтаксических ошибок, набрав:

  1. sudo apache2ctl configtest

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

Output
Syntax OK

Перезапустите Apache, чтобы изменения вступили в силу:

  1. sudo systemctl restart apache2

Теперь можно приступить к настройке брандмауэра.

Настройка брандмауэра для разрешения веб-трафика

Затем, предполагая, что вы следовали инструкциям по начальной настройке сервера для включения брандмауэра UFW, убедитесь, что ваш брандмауэр разрешает трафик HTTP и HTTPS. Вы можете убедиться, что у UFW есть профиль приложения для Apache, например:

  1. sudo ufw app list
Output
Available applications: Apache Apache Full Apache Secure OpenSSH

Если вы посмотрите на профиль Apache Full, он должен показать, что он разрешает трафик на порты 80 и 443:

  1. sudo ufw app info "Apache Full"
Output
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://your_server_IP_address

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

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

Поиск общедоступного IP-адреса вашего сервера

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

Из командной строки вы можете найти это несколькими способами. Во-первых, вы можете использовать инструменты iproute2, чтобы получить свой адрес, набрав следующее:

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

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

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

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

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

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

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

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

  1. sudo apt-get install mysql-server

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

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

Во время установки ваш сервер попросит вас выбрать и подтвердить пароль для пользователя MySQL «root». Это административная учетная запись в MySQL с повышенными привилегиями. Думайте об этом как об учетной записи root для самого сервера. (Та, которую вы сейчас настраиваете, относится к учетной записи MySQL.) Убедитесь, что это надежный уникальный пароль, и не оставляйте его пустым.

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

  1. mysql_secure_installation

Вам будет предложено ввести пароль, который вы установили для корневой учетной записи MySQL. Далее вас спросят, хотите ли вы настроить ПЛАГИН ПРОВЕРКИ ПАРОЛЯ.

Предупреждение. Включение этой функции требует решения. Если этот параметр включен, пароли, не соответствующие указанным критериям, будут отклонены 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 вместо \нет в командной строке:

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

Это будет выглядеть так:

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

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

  1. sudo systemctl restart apache2

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

  1. sudo systemctl status apache2
Sample Output
● 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

Наряду с большим количеством другой информации вы найдете что-то вроде этого:

Output
… 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, мы можем создать очень простой PHP-скрипт.

Мы назовем этот скрипт info.php. Чтобы Apache мог найти файл и правильно его обслужить, он должен быть сохранен в особом каталоге, который называется корневой веб-сайт.

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

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

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

<?php
phpinfo();
?>

Когда вы закончите, сохраните и закройте файл.

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

Адрес, который вы хотите посетить, будет:

http://your_server_IP_address/info.php

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

Эта страница в основном дает вам информацию о вашем сервере с точки зрения PHP. Это полезно для отладки и проверки правильности применения настроек.

Если это было успешно, то ваш PHP работает, как и ожидалось.

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

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

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

Заключение

Теперь, когда у вас установлен стек LAMP, у вас есть много вариантов дальнейших действий. По сути, вы установили платформу, которая позволит вам устанавливать на свой сервер большинство видов веб-сайтов и веб-программ.

В качестве следующего шага вы должны убедиться, что соединения с вашим веб-сервером защищены, обслуживая их через HTTPS. Самый простой вариант — использовать Let’s Encrypt для защиты вашего сайта с помощью бесплатного сертификата TLS/SSL.

Некоторые другие популярные варианты:

  • Установите Wordpress, самую популярную систему управления контентом в Интернете.
  • Настройте PHPMyAdmin, чтобы упростить управление базами данных MySQL из веб-браузера.
  • Узнайте больше о MySQL для управления базами данных.
  • Узнайте, как использовать SFTP для передачи файлов на сервер и с него.