Как установить Linux, Apache, MariaDB, PHP (LAMP) в Debian 10

Вступление

Стек «LAMP» - это группа программного обеспечения с открытым исходным кодом, которое обычно устанавливается вместе, чтобы сервер мог размещать динамические веб-сайты и веб-приложения. Этот термин на самом деле является аббревиатурой, обозначающей операционную систему L inux с веб-сервером A pache. Данные сайта хранятся в базе данных M ariaDB, а динамический контент обрабатывается P HP.

Хотя этот программный стек обычно включает * MySQL * в качестве системы управления базами данных, некоторые дистрибутивы Linux, в том числе Debian, используют https://mariadb.org [MariaDB] в качестве замены для MySQL.

В этом руководстве мы установим стек LAMP на сервере Debian 10, используя MariaDB в качестве системы управления базами данных.

Предпосылки

Чтобы завершить это руководство, вам понадобится сервер Debian 10 с учетной записью пользователя без полномочий root + + sudo + и базовый брандмауэр. Это можно настроить, используя наше https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-10 руководство по установке на сервере libeinitial для Debian 10].

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

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

Установите Apache, используя менеджер пакетов Debian, APT:

sudo apt update
sudo apt install apache2

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

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

Далее, при условии, что вы выполнили начальные инструкции по настройке сервера по адресу https://www.digitalocean.com/community/tutorials/initial-server-setup-with-debian-10#step-4-%E2%80%94- setup-a-basic-firewall [установка и включение брандмауэра UFW], убедитесь, что ваш брандмауэр допускает трафик HTTP и HTTPS.

При установке в Debian 10 в UFW загружаются профили приложений, которые можно использовать для настройки параметров брандмауэра. Просмотрите полный список профилей приложений, запустив:

sudo ufw app list

Профили + WWW + используются для управления портами, используемыми веб-серверами:

OutputAvailable applications:
. . .
 WWW
 WWW Cache
 WWW Full
 WWW Secure
. . .

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

sudo ufw app info "WWW Full"
OutputProfile: WWW Full
Title: Web Server (HTTP,HTTPS)
Description: Web Server (HTTP,HTTPS)

Ports:
 ,

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

sudo ufw allow in "WWW Full"

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

http://

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

изображение: http: //assets.digitalocean.com/how-to-install-lamp-debian-9/small_apache_default_debian9.png [Debian 10 Apache по умолчанию]

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

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

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

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

В Debian 10 метапакет + mysql-server +, который традиционно использовался для установки сервера MySQL, был заменен на + default-mysql-server +. Этот метапакет ссылается на MariaDB, ветвь сообщества исходного сервера MySQL от Oracle, и в настоящее время он является стандартным MySQL-совместимым сервером базы данных, доступным в репозиториях диспетчера пакетов на основе debian.

Однако для более долгосрочной совместимости рекомендуется вместо использования метапакета установить MariaDB с использованием фактического пакета программы + mariadb-server +.

Чтобы установить это программное обеспечение, запустите:

sudo apt install mariadb-server

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

sudo mysql_secure_installation

Этот скрипт проведет вас через серию подсказок, в которых вы сможете внести некоторые изменения в настройку MariaDB. Первая подсказка попросит вас ввести текущий * пароль root * базы данных. Это не следует путать с * системным корнем *. Пользователь * базы данных root * является администратором с полными привилегиями над системой баз данных. Поскольку вы только что установили MariaDB и еще не внесли никаких изменений в конфигурацию, этот пароль будет пустым, поэтому просто нажмите + ENTER + в приглашении.

В следующем запросе вас спросят, хотите ли вы установить пароль * базы данных root *. Поскольку MariaDB использует специальный метод аутентификации для пользователя * root *, который, как правило, безопаснее, чем использование пароля, вам не нужно устанавливать его сейчас. Введите + A + и затем нажмите + ENTER.

Оттуда вы можете нажать + Y +, а затем + ENTER +, чтобы принять значения по умолчанию для всех последующих вопросов. Это приведет к удалению анонимных пользователей и тестовой базы данных, отключению удаленного входа в систему * root * и загрузке этих новых правил, чтобы MariaDB немедленно учитывала внесенные вами изменения. + Когда вы закончите, войдите в консоль MariaDB, набрав:

sudo mariadb

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

OutputWelcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 74
Server version: 10.3.15-MariaDB-1 Debian 10

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

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

Для повышения безопасности лучше иметь выделенные учетные записи пользователей с менее широкими привилегиями для каждой базы данных, особенно если вы планируете разместить на своем сервере несколько баз данных. Чтобы продемонстрировать такую ​​настройку, мы создадим базу данных с именем * example_database * и пользователя с именем * example_user *, но вы можете заменить эти имена другими значениями. + Чтобы создать новую базу данных, запустите следующую команду из консоли MariaDB:

CREATE DATABASE ;

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

GRANT ALL ON .* TO ''@'localhost' IDENTIFIED BY '' WITH GRANT OPTION;

Это даст пользователю * example_user * полные права на базу данных * example_database *, не позволяя этому пользователю создавать или изменять другие базы данных на вашем сервере.

Сбросьте привилегии, чтобы убедиться, что они сохранены и доступны в текущем сеансе:

FLUSH PRIVILEGES;

После этого выйдите из оболочки MariaDB:

exit

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

mariadb -u  -p

Обратите внимание на флаг + -p + в этой команде, который запросит у вас пароль, использованный при создании пользователя * example_user *. После входа в консоль MariaDB убедитесь, что у вас есть доступ к базе данных * example_database *:

SHOW DATABASES;

Это даст вам следующий вывод:

Output+--------------------+
| Database           |
+--------------------+
|    |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)

Чтобы выйти из оболочки MariaDB, введите:

exit

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

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

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

Еще раз, используйте систему + apt + для установки PHP. Кроме того, включите некоторые вспомогательные пакеты, которые обеспечат выполнение кода PHP на сервере Apache, и подключитесь к базе данных MariaDB:

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

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

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

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

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

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

Теперь перезагрузите конфигурацию Apache с помощью:

sudo systemctl reload apache2

Вы можете проверить статус службы + apache 2 с помощью` + systemctl status`:

sudo systemctl status apache2
Sample Output● apache2.service - The Apache HTTP Server
  Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
  Active: active (running) since Mon 2019-07-08 12:58:31 UTC; 8s ago
    Docs: https://httpd.apache.org/docs/2.4/
 Process: 11948 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCCESS)
Main PID: 11954 (apache2)
   Tasks: 6 (limit: 4719)
  Memory: 11.5M
  CGroup: /system.slice/apache2.service
          ├─11954 /usr/sbin/apache2 -k start
          ├─11955 /usr/sbin/apache2 -k start
          ├─11956 /usr/sbin/apache2 -k start
          ├─11957 /usr/sbin/apache2 -k start
          ├─11958 /usr/sbin/apache2 -k start
          └─11959 /usr/sbin/apache2 -k start

На этом этапе ваш стек LAMP полностью функционирует, но прежде чем вы сможете протестировать свою установку с помощью PHP-скрипта, лучше настроить надлежащий Apache Virtual Host держать файлы и папки вашего сайта. Мы сделаем это на следующем этапе.

Шаг 4 - Создание виртуального хоста для вашего сайта

По умолчанию Apache обслуживает свое содержимое из каталога, расположенного в + / var / www / html +, используя конфигурацию, содержащуюся в + / etc / apache2 / sites-available / 000-default.conf +. Вместо того, чтобы изменять файл конфигурации веб-сайта по умолчанию, мы собираемся создать новый virtual host для тестирования вашей среды PHP. Виртуальные хосты позволяют нам размещать несколько веб-сайтов на одном сервере Apache.

После этого вы создадите структуру каталогов внутри + / var / www + для примера веб-сайта с именем * your_domain *.

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

sudo mkdir /var/www/

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

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

Затем откройте новый файл конфигурации в каталоге Apache + sites-available с помощью предпочитаемого вами редактора командной строки. Здесь мы будем использовать + nano +:

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

Это создаст новый пустой файл. Вставьте в следующую конфигурацию:

/ и т.д. / apache2 / сайты-доступные / your_domain

<VirtualHost *:80>
   ServerName
   ServerAlias www.
   ServerAdmin webmaster@localhost
   DocumentRoot /var/www/
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

С этой конфигурацией + VirtualHost + мы говорим Apache, чтобы он обслуживал ++, используя + / var / www / + в качестве корневого веб-каталога. Если вы хотите протестировать Apache без имени домена, вы можете удалить или закомментировать параметры + ServerName + и + ServerAlias ​​+, добавив символ + # + в начале каждой строки параметра.

Теперь вы можете использовать + a2ensite +, чтобы включить этот виртуальный хост:

sudo a2ensite

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

sudo a2dissite 000-default

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

sudo apache2ctl configtest

Наконец, перезагрузите Apache, чтобы эти изменения вступили в силу:

sudo systemctl reload apache2

Ваш новый веб-сайт теперь активен, но корневой каталог + / var / www / + по-прежнему пуст. На следующем шаге мы создадим скрипт PHP, чтобы протестировать новую настройку и убедиться, что PHP правильно установлен и настроен на вашем сервере.

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

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

Создайте новый файл с именем + info.php + внутри вашей пользовательской корневой веб-папки:

nano /var/www//info.php

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

/var/www/your_domain/info.php

<?php
phpinfo();

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

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

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

http:///info.php

Вы должны увидеть страницу, похожую на эту:

изображение: https: //assets.digitalocean.com/articles/lamp_debian10/phpinfo_debian10_lamp.png [информация PHP по умолчанию для Debian 10]

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

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

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

sudo rm /var/www//info.php

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

Шаг 6 - Тестирование соединения с базой данных из PHP (необязательно)

Если вы хотите проверить, может ли PHP подключиться к MariaDB и выполнить запросы к базе данных, вы можете создать тестовую таблицу с фиктивными данными и запросить ее содержимое из сценария PHP.

Сначала подключитесь к консоли MariaDB с пользователем базы данных, который вы создали по ссылке: # step-2-% E2% 80% 94-installation-mariadb [Шаг 2] этого руководства:

mariadb -u  -p

Создайте таблицу с именем * todo_list *. В консоли MariaDB выполните следующую инструкцию:

CREATE TABLE . (
   item_id INT AUTO_INCREMENT,
   content VARCHAR(255),
   PRIMARY KEY(item_id)
);

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

INSERT INTO . (content) VALUES ("");

Чтобы подтвердить, что данные были успешно сохранены в вашей таблице, выполните:

SELECT * FROM .;

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

Output+---------+--------------------------+
| item_id | content                  |
+---------+--------------------------+
|       1 | My first important item  |
|       2 | My second important item |
|       3 | My third important item  |
|       4 | and this one more thing  |
+---------+--------------------------+
4 rows in set (0.000 sec)

Убедившись, что в тестовой таблице у вас есть действительные данные, вы можете выйти из консоли MariaDB:

exit

Теперь вы можете создать PHP-скрипт, который будет подключаться к MariaDB и запрашивать ваш контент. Создайте новый PHP-файл в своем пользовательском корневом веб-каталоге, используя предпочитаемый вами редактор. Для этого мы будем использовать + nano:

nano /var/www//

Следующий скрипт PHP подключается к базе данных MariaDB и запрашивает содержимое таблицы * todo_list *, отображая результаты в виде списка. Если есть проблема с подключением к базе данных, он выдаст исключение. + Скопируйте этот контент в ваш скрипт + todo_list.php +:

/var/www/your_domain/todo_list.php

<?php
$user = "";
$password = "";
$database = "";
$table = "";

try {
 $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
 echo "<h2>TODO</h2><ol>";
 foreach($db->query("SELECT content FROM $table") as $row) {
   echo "<li>" . $row['content'] . "</li>";
 }
 echo "</ol>";
} catch (PDOException $e) {
   print "Error!: " . $e->getMessage() . "<br/>";
   die();
}

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

Теперь вы можете получить доступ к этой странице в своем веб-браузере, посетив имя домена или общедоступный IP-адрес вашего сайта, а затем + / todo_list.php +:

http:///todo_list.php

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

image: https: //assets.digitalocean.com/articles/lemp_debian10/todo_list.png [Пример списка задач PHP]

Это означает, что ваша среда PHP готова для подключения и взаимодействия с вашим сервером MariaDB.

Заключение

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

Для дальнейшего улучшения текущих настроек вы можете зайти на install Composer для управления зависимостями и пакетами в PHP, и вы также можете установить сертификат OpenSSL для вашего сайта, используя Let’s Encrypt.

Related