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

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


Введение

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

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

Предпосылки

Для выполнения этого руководства вам потребуется сервер Ubuntu 18.04 с учетной записью пользователя без полномочий root с поддержкой sudo и настроенным базовым брандмауэром. Чтобы настроить это, вы можете следовать нашему руководству по начальной настройке сервера для Ubuntu 18.04.

Шаг 1 — Установка Apache и обновление брандмауэра

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

Во-первых, убедитесь, что ваш кеш apt обновлен:

  1. sudo apt update

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

После обновления кеша вы можете установить Apache с помощью:

  1. sudo apt install apache2

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

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

Затем, предполагая, что вы выполнили инструкции по первоначальной настройке сервера и включили брандмауэр 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

Чтобы разрешить входящий трафик HTTP и HTTPS для этого сервера, выполните:

  1. sudo ufw allow "Apache Full"

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

http://your_server_ip

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. sudo apt install mysql-server

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

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

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

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

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

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

Когда вы закончите, проверьте, можете ли вы войти в консоль MySQL, набрав:

  1. sudo mysql

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

Output
Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 5 Server version: 5.7.34-0ubuntu0.18.04.1 (Ubuntu) Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>

Чтобы выйти из консоли MySQL, введите:

  1. exit

Обратите внимание, что вам не нужно указывать пароль для подключения в качестве пользователя root, даже если вы определили его при запуске скрипта mysql_secure_installation. Это связано с тем, что метод аутентификации по умолчанию для административного пользователя MySQLunix_socket вместо пароль. Хотя на первый взгляд это может показаться проблемой безопасности, это делает сервер базы данных более безопасным, поскольку единственными пользователями, которым разрешено входить в систему в качестве пользователя root MySQL, являются системные пользователи с привилегиями sudo, подключающиеся из консоли или через приложение, работающее с одинаковые привилегии. На практике это означает, что вы не сможете использовать администратора базы данных root для подключения из вашего PHP-приложения. Установка пароля для корневой учетной записи MySQL служит защитой на случай, если метод аутентификации по умолчанию будет изменен с unix_socket на пароль.

Для повышения безопасности лучше иметь выделенные учетные записи пользователей с менее широкими привилегиями, настроенными для каждой базы данных, особенно если вы планируете разместить несколько баз данных на своем сервере. Пожалуйста, обратитесь к нашему руководству «Как создать нового пользователя и предоставить разрешения на MySQL» для получения подробных инструкций о том, как создать пользователей MySQL и настроить права доступа к базе данных.

Теперь ваш сервер MySQL установлен и защищен. Далее мы установим PHP, последний компонент в стеке LAMP.

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

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

Еще раз используйте систему apt для установки PHP. В дополнение к пакету php вам также потребуется libapache2-mod-php для интеграции PHP в Apache и пакет php-mysql чтобы разрешить PHP подключаться к базам данных MySQL. Выполните следующую команду, чтобы установить все три пакета и их зависимости:

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

Это должно установить PHP без проблем. Мы проверим это через мгновение.

Изменение индекса каталога Apache (необязательно)

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

Чтобы внести это изменение, откройте файл конфигурации dir.conf в любом текстовом редакторе. Здесь мы будем использовать nano:

  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 - The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Thu 2021-07-15 09:22:59 UTC; 1h 3min ago Main PID: 3719 (apache2) Tasks: 55 (limit: 2361) CGroup: /system.slice/apache2.service ├─3719 /usr/sbin/apache2 -k start ├─3721 /usr/sbin/apache2 -k start └─3722 /usr/sbin/apache2 -k start Jul 15 09:22:59 ubuntu1804 systemd[1]: Starting The Apache HTTP Server... Jul 15 09:22:59 ubuntu1804 apachectl[3694]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' di Jul 15 09:22:59 ubuntu1804 systemd[1]: Started The Apache HTTP Server.

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

Установка расширений PHP (необязательно)

Для расширения функциональности PHP у вас есть возможность установить дополнительные модули. Чтобы увидеть доступные параметры для модулей и библиотек PHP, передайте результаты apt search в less, пейджер, который позволяет прокручивать вывод других команд:

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

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

  1. apt show package_name

Будет много выходных данных с одним полем под названием Description, в котором будет более подробное объяснение функций, предоставляемых модулем.

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

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

  1. sudo apt install php-cli

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

  1. sudo apt install package1 package2 ...

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

Шаг 4 — Настройка виртуального хоста (рекомендуется)

При использовании веб-сервера Apache вы можете использовать виртуальные хосты (аналогично блокам сервера в Nginx) для инкапсуляции деталей конфигурации и размещения более одного домена с одного сервера. Мы настроим домен под названием your_domain, но вы должны заменить его своим собственным доменным именем. Чтобы узнать больше о настройке доменного имени с помощью DigitalOcean, см. Наше введение в DNS DigitalOcean.

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

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

  1. sudo mkdir /var/www/your_domain

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

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

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

  1. sudo chmod -R 755 /var/www/your_domain

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

  1. nano /var/www/your_domain/index.html

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

<html>
    <head>
        <title>Welcome to Your_domain!</title>
    </head>
    <body>
        <h1>Success!  The your_domain server block is working!</h1>
    </body>
</html>

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

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

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

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

<VirtualHost *:80>
    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
</VirtualHost>

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

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

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

  1. sudo a2ensite your_domain.conf

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

  1. sudo a2dissite 000-default.conf

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

  1. sudo apache2ctl configtest

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

Output
Syntax OK

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

  1. sudo systemctl restart apache2

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

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

Шаг 5 — Тестирование обработки PHP на вашем веб-сервере

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

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

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

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

<?php
phpinfo();

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

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

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

http://your_domain/info.php

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

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

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

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

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

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

Заключение

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

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

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

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