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

0 Акции
0
0
0
0

Введение

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

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

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

Предпосылки

Для выполнения этого руководства вам понадобится сервер Debian 10 с активной учетной записью sudo без полномочий root и базовым брандмауэром.

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

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

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

sudo apt update

Затем установите Apache с помощью следующей команды:

sudo apt install apache2

Эта команда запросит подтверждение установки Apache. Подтвердите установку, нажав Y, а затем ENTER. После завершения установки вам потребуется настроить параметры брандмауэра. Если вы следовали инструкциям по первоначальной настройке сервера для установки и включения брандмауэра UFW, убедитесь, что ваш брандмауэр разрешает HTTP- и HTTPS-трафик.

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

sudo ufw app list

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

Output
Available applications:
. . .
WWW
WWW Cache
WWW Full
WWW Secure
. . .

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

sudo ufw app info "WWW Full"
Output
Profile: WWW Full
Title: Web Server (HTTP,HTTPS)
Description: Web Server (HTTP,HTTPS)
Ports:
80,443/tcp

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

sudo ufw allow in "WWW Full"

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

http://your_server_ip

Это возвращает веб-страницу Apache Debian 10 по умолчанию, которая предназначена для информационных и тестовых целей:

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

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

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

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

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

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

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

Поскольку Debian 10 имеет завиток Он не является стандартным, его необходимо сначала установить:

sudo apt install curl

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

curl http://icanhazip.com

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

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

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

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

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

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

sudo apt install mariadb-server

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

sudo mysql_secure_installation

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

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

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

После завершения войдите в консоль MariaDB:

sudo mariadb

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

Output
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 42
Server version: 10.3.36-MariaDB-0+deb10u2 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. Хотя на первый взгляд это может показаться угрозой безопасности, это повышает безопасность сервера базы данных, поскольку входить в систему как пользователь root MariaDB могут только системные пользователи с привилегиями sudo, что можно сделать из консоли или через запущенное приложение с теми же привилегиями. На практике это означает, что вы не сможете использовать пользователя root для подключения из вашего PHP-приложения.

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

Выйти из консоли MariaDB можно следующим образом:

exit

Ваш сервер MariaDB установлен и защищён. Теперь вам нужно установить PHP, последний компонент в стеке LAMP.

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

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

Помимо пакета PHP, вам понадобится php-mysql — модуль PHP, позволяющий PHP взаимодействовать с базами данных MySQL, такими как MariaDEB. Также вам понадобится libapache2-mod-php, чтобы Apache мог обрабатывать файлы PHP. Основные пакеты PHP устанавливаются автоматически как зависимости.

Чтобы установить эти пакеты, выполните следующую команду:

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

После завершения установки вы можете проверить версию PHP с помощью следующей команды:

php -v
Output
PHP 7.3.31-1~deb10u2 (cli) (built: Dec 15 2022 09:39:10) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.31, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.3.31-1~deb10u2, Copyright (c) 1999-2018, by Zend Technologies

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

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

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>

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

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

sudo systemctl reload apache2

Проверить состояние службы apache2 можно с помощью systemctl status:

sudo systemctl status apache2
Sample Output
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset:
Active: active (running) since Fri 2023-01-20 22:21:24 UTC; 2min 12s ago
Docs: https://httpd.apache.org/docs/2.4/
Process: 13076 ExecStart=/usr/sbin/apachectl start (code=exited, status=0/SUCC
Process: 13097 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/
Main PID: 13080 (apache2)
Tasks: 6 (limit: 4915)
Memory: 13.7M
CGroup: /system.slice/apache2.service
├─13080 /usr/sbin/apache2 -k start
├─13101 /usr/sbin/apache2 -k start
├─13102 /usr/sbin/apache2 -k start
├─13103 /usr/sbin/apache2 -k start
├─13104 /usr/sbin/apache2 -k start
└─13105 /usr/sbin/apache2 -k start

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

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

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

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

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

sudo mkdir /var/www/your_domain

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

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

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

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

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

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

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

По завершении сохраните и закройте файл.

Теперь используйте a2ensite для активации этого виртуального хоста:

sudo a2ensite your_domain

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

sudo a2dissite 000-default

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

sudo apache2ctl configtest

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

sudo systemctl reload apache2

Далее вам предстоит создать PHP-скрипт для проверки правильности установки и настройки PHP на вашем сервере.

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

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

Начните с создания нового файла с именем info.php внутри вашей корневой веб-папки:

nano /var/www/your_domain/info.php

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

<?php
phpinfo();

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

Чтобы протестировать скрипт, откройте веб-браузер и введите доменное имя или IP-адрес вашего сервера, затем введите имя скрипта, в данном случае info.php:

http://your_domain/info.php

Вот пример веб-страницы PHP по умолчанию:

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

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

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

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

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

Шаг 6 — Тестирование подключения к базе данных из PHP (необязательно)

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

Сначала подключитесь к консоли MariaDB, используя учетную запись root:

sudo mariadb

Чтобы создать новую базу данных, выполните следующую команду из консоли MariaDB:

CREATE DATABASE example_database;

Теперь создайте нового пользователя и предоставьте ему полные привилегии для созданной вами базы данных.

Следующая команда создаёт нового пользователя с именем example_user, который аутентифицируется по паролю. Мы задаём пароль этого пользователя как password, но вам следует заменить это значение на надёжный пароль по вашему выбору:

CREATE USER 'example_user'@'%' IDENTIFIED BY 'password';

Затем предоставьте этому пользователю разрешение на использование базы данных example_database:

GRANT ALL ON example_database.* TO 'example_user'@'%';

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

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

FLUSH PRIVILEGES;

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

exit

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

mariadb -u example_user -p

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

SHOW DATABASES;

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

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

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

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

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

INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

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

SELECT * FROM example_database.todo_list;

Вы получите следующий результат:

+---------+--------------------------+
| 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/your_domain/todo_list.php

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

Добавьте этот контент в скрипт todo_list.php, не забыв заменить значения example_user и password своими собственными значениями:

<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";
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://your_domain/todo_list.php

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

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

Результат

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

В качестве следующего шага вам следует обеспечить безопасность подключений к вашему веб-серверу, используя HTTPS. Для этого можно использовать Let's Encrypt. Вы также можете ознакомиться с нашим руководством по установке и использованию Composer для управления зависимостями и пакетами в PHP.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может понравиться