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

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


Введение

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

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

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

Предпосылки

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

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

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

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

  1. sudo apt update

Затем установите Apache со следующим:

  1. sudo apt install apache2

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

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

  1. sudo ufw app list

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

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

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

  1. 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 для этого профиля:

  1. sudo ufw allow in "WWW Full"

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

http://your_server_ip

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

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

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

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

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

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

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

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

Поскольку в Debian 10 нет curl по умолчанию, вам необходимо сначала установить его:

  1. sudo apt install curl

Затем выполните следующую команду и спросите конкретный сервер, какой у вас IP-адрес:

  1. 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, запустите:

  1. sudo apt install mariadb-server

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

  1. sudo mysql_secure_installation

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

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

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

Когда вы закончите, войдите в консоль MariaDB:

  1. 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 следующим образом:

  1. exit

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

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

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

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

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

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

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

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

  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>

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

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

  1. sudo systemctl reload apache2

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

  1. 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, но вы должны заменить его своим собственным доменным именем.

Примечание. Если вы используете DigitalOcean в качестве провайдера DNS, ознакомьтесь с нашей документацией по продукту, чтобы получить подробные инструкции о том, как настроить новое доменное имя и указать его на свой сервер.

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

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

  1. sudo mkdir /var/www/your_domain

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

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

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

  1. 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/ваш_домен в качестве корневого веб-каталога. Если вы хотите протестировать Apache без доменного имени, вы можете удалить или закомментировать параметры ServerName и ServerAlias, добавив знак решетки (#) в начале строк каждой опции.

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

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

  1. sudo a2ensite your_domain

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

  1. sudo a2dissite 000-default

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

  1. sudo apache2ctl configtest

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

  1. sudo systemctl reload apache2

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

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

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

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

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

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

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

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

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

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

  1. sudo mariadb

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

  1. CREATE DATABASE example_database;

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

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

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

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

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

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

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

  1. FLUSH PRIVILEGES;

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

  1. exit

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

  1. mariadb -u example_user -p

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

  1. SHOW DATABASES;

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

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

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

  1. CREATE TABLE example_database.todo_list (
  2. item_id INT AUTO_INCREMENT,
  3. content VARCHAR(255),
  4. PRIMARY KEY(item_id)
  5. );

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

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

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

  1. SELECT * FROM example_database.todo_list;

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

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:

  1. exit

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

  1. nano /var/www/your_domain/todo_list.php

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

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

<?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. Для этого вы можете использовать How to Install and Use Composer для управления зависимостями и пакетами в PHP.