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