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

Предыдущая версия этого руководства была написанаBrennan Bearnes.

Вступление

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

В этом руководстве мы установим стек LAMP на сервер Ubuntu 18.04.

Предпосылки

Чтобы выполнить это руководство, вам потребуется сервер Ubuntu 18.04 с учетной записью пользователя без полномочий rootsudo и базовым брандмауэром. Это можно настроить с помощью нашегоinitial server setup guide for Ubuntu 18.04.

[[step-1 -—- install-apache-and-update-the-firewall]] == Шаг 1. Установка Apache и обновление брандмауэра

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

Установите Apache с помощью диспетчера пакетов Ubuntu,apt:

sudo apt update
sudo apt install apache2

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

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

Настройте брандмауэр, чтобы разрешить веб-трафик

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

sudo ufw app list
OutputAvailable applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

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

sudo ufw app info "Apache Full"
OutputProfile: 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://your_server_ip

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

Ubuntu 18.04 Apache default

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

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

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

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

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

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

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

sudo apt install curl
curl http://icanhazip.com

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

[[step-2 -—- install-mysql]] == Шаг 2 - Установка MySQL

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

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

sudo apt install mysql-server

[.note] #Note: В этом случае вам не нужно запускатьsudo apt update перед командой. Это потому, что вы недавно запускали его в приведенных выше командах для установки Apache. Индекс пакета на вашем компьютере уже должен быть актуальным.
#

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

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

sudo mysql_secure_installation

Это спросит, хотите ли вы настроитьVALIDATE PASSWORD PLUGIN.

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

Независимо от того, выбрали ли вы установкуVALIDATE PASSWORD PLUGIN, ваш сервер затем попросит вас выбрать и подтвердить пароль для пользователя MySQLroot. Это административная учетная запись в MySQL, которая имеет повышенные привилегии. Думайте об этом как об учетной записиroot для самого сервера (хотя тот, который вы настраиваете сейчас, является учетной записью, специфичной для MySQL). Убедитесь, что это надежный уникальный пароль, и не оставляйте его пустым.

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

Обратите внимание, что в системах Ubuntu под управлением MySQL 5.7 (и более поздних версий) пользователь MySQLroot настроен на аутентификацию с использованием подключаемого модуляauth_socket по умолчанию, а не с помощью пароля. Это обеспечивает большую безопасность и удобство использования во многих случаях, но также может усложнить ситуацию, когда вам нужно разрешить внешней программе (например, phpMyAdmin) доступ к пользователю.

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

sudo mysql

Затем проверьте, какой метод аутентификации каждая из ваших учетных записей пользователей MySQL использует, с помощью следующей команды:

SELECT user,authentication_string,plugin,host FROM mysql.user;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| 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. Чтобы настроить учетную записьroot для аутентификации с паролем, выполните следующую команду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;
Output+------------------+-------------------------------------------+-----------------------+-----------+
| 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)

В этом примере вы можете увидеть, что пользователь MySQLroot теперь аутентифицируется с помощью пароля. Как только вы подтвердите это на своем собственном сервере, вы можете выйти из оболочки MySQL:

exit

На этом этапе ваша система баз данных настроена, и вы можете перейти к установке PHP, последнего компонента стека LAMP.

[[step-3 -—- install-php]] == Шаг 3 - Установка PHP

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

Еще раз, используйте системуapt для установки PHP. Кроме того, на этот раз включите несколько вспомогательных пакетов, чтобы код 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

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

/etc/apache2/mods-enabled/dir.conf


    DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm

Переместите индексный файл PHP (выделенный выше) в первую позицию после спецификацииDirectoryIndex, например:

/etc/apache2/mods-enabled/dir.conf


    DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm

Когда вы закончите, сохраните и закройте файл, нажавCTRL+X. Подтвердите сохранение, набравY, а затем нажмитеENTER, чтобы проверить место сохранения файла.

После этого перезапустите веб-сервер Apache, чтобы ваши изменения были распознаны. Сделайте это, набрав это:

sudo systemctl restart apache2

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

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

НажмитеQ, чтобы выйти из этого вывода состояния.

Для расширения функциональности 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

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

Output…
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 установлен и настроен. Прежде чем делать что-либо еще, мы рекомендуем вам настроить виртуальный хост Apache, где вы можете хранить сведения о конфигурации вашего сервера.

[[шаг-4 -—- настройка-виртуальных-хостов-рекомендуется]] == Шаг 4. Настройка виртуальных хостов (рекомендуется)

При использовании веб-сервера Apache вы можете использоватьvirtual hosts (аналогично серверным блокам в Nginx) для инкапсуляции деталей конфигурации и размещения более одного домена с одного сервера. Мы создадим домен под названиемyour_domain, но вы должныreplace this with your own domain name. Чтобы узнать больше о настройке доменного имени в DigitalOcean, см. НашIntroduction to DigitalOcean DNS.

В Apache в Ubuntu 18.04 по умолчанию включен один серверный блок, который настроен на обслуживание документов из каталога/var/www/html. Хотя это хорошо работает для одного сайта, он может стать громоздким, если вы размещаете несколько сайтов. Вместо изменения/var/www/html, давайте создадим структуру каталогов в/var/www для нашего сайтаyour_domain, оставив/var/www/html в качестве каталога по умолчанию, который будет обслуживаться, если запрос клиента не выполняет не соответствует любым другим сайтам.

Создайте каталог дляyour_domain следующим образом:

sudo mkdir /var/www/your_domain

Затем назначьте владение каталогом с помощью переменной среды$USER:

sudo chown -R $USER:$USER /var/www/your_domain

Разрешения ваших корневых веб-сайтов должны быть правильными, если вы не изменяли значениеunmask, но вы можете убедиться, набрав:

sudo chmod -R 755 /var/www/your_domain

Затем создайте образец страницыindex.html с помощьюnano или вашего любимого редактора:

nano /var/www/your_domain/index.html

Внутри добавьте следующий образец HTML:

/var/www/your_domain/index.html


    
        Welcome to Your_domain!
    
    
        

Success! The your_domain server block is working!

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

Чтобы Apache обслуживал этот контент, необходимо создать файл виртуального хоста с правильными директивами. Вместо непосредственного изменения файла конфигурации по умолчанию, расположенного в/etc/apache2/sites-available/000-default.conf, давайте создадим новый в/etc/apache2/sites-available/your_domain.conf:

sudo nano /etc/apache2/sites-available/your_domain.conf

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

/etc/apache2/sites-available/your_domain.conf


    ServerAdmin webmaster@localhost
    ServerName your_domain
    ServerAlias www.your_domain
    DocumentRoot /var/www/your_domain
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined

Обратите внимание, что мы обновилиDocumentRoot в нашем новом каталоге иServerAdmin на адрес электронной почты, доступный администратору сайтаyour_domain. Мы также добавили две директивы:ServerName, которая устанавливает базовый домен, который должен соответствовать этому определению виртуального хоста, иServerAlias, который определяет другие имена, которые должны совпадать, как если бы они были базовым именем.

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

Давайте включим файл с помощью инструментаa2ensite:

sudo a2ensite your_domain.conf

Отключить сайт по умолчанию, определенный в000-default.conf:

sudo a2dissite 000-default.conf

Далее давайте проверим ошибки конфигурации:

sudo apache2ctl configtest

Вы должны увидеть следующий вывод:

OutputSyntax OK

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

sudo systemctl restart apache2

Apache должен теперь обслуживать ваше доменное имя. Вы можете проверить это, перейдя кhttp://your_domain, где вы должны увидеть что-то вроде этого:

Apache virtual host example

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

[[step-5 -—- testing-php-processing-on-your-web-server]] == Шаг 5. Тестирование обработки PHP на вашем веб-сервере

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

Создайте файл в корне сети, который вы создали на предыдущем шаге, запустив:

sudo nano /var/www/your_domain/info.php

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

info.php

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

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

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

http://your_domain/info.php

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

Ubuntu 18.04 default PHP info

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

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

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

sudo rm /var/www/your_domain/info.php

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

Заключение

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

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

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

  • Install Wordpress самая популярная система управления контентом в Интернете.

  • Set Up PHPMyAdmin для управления базами данных MySQL из веб-браузера.

  • Learn how to use SFTP для передачи файлов на ваш сервер и с него.

Related