Стек LAMP – это группа открытых программ, которая необходима для поддержки динамических сайтов и веб-приложений. Акроним LAMP расшифровывается как Linux (операционная система), Apache (веб-сервер), MariaDB (система управления базами данных, которая используется в Debian вместо MySQL) и PHP (серверный язык сценариев для обработки динамического контента).
Обычно уровень БД в стеке LAMP обслуживается системой управления базами данных MySQL. Но до релиза CentOS 8 пакета MySQL не было в стандартном репозитории системы CentOS. Поэтому в качестве альтернативы на машинах CentOS стала широко использоваться система MariaDB, поддерживаемый сообществом форк MySQL. На практике это значит, что вы можете перейти на MariaDB, не меняя код или конфигурации своего приложения.
Этот мануал поможет вам установить все компоненты стека LAMP на сервер CentOS 8. Поскольку сервер использует операционную систему Linux, первый компонент уже установлен. Мануал поможет вам установить остальное.
Требования
- Сервер CentOS 8.
- Пользователь с доступом к команде sudo и базовый брандмауэр (все инструкции можно найти здесь).
1: Установка Apache и настройка брандмауэра
Apache является одним из самых популярных веб-серверов в мире. Он хорошо документирован, широко используется в интернете почти с самого начала его существования и может обслуживать PHP-страницы. Установить Apache очень легко, пакеты этого веб-сервера доступны в стандартном репозитории CentOS 8.
Для установки используйте пакетный менеджер dnf. Необходимый нам пакет называется httpd:
sudo dnf install httpd
Подтвердите установку, нажав у.
После завершения установки введите эту команду, чтобы включить и запустить сервер:
sudo systemctl start httpd
Если ранее вы включили брандмауэр firewalld, нужно разблокировать в нем сервис Apache. Следующая команда откроет порт 80 для HTTP-соединений на постоянной основе:
sudo firewall-cmd --permanent --add-service=http
Чтобы убедиться, что политика брандмауэра изменилась, введите:
sudo firewall-cmd --permanent --list-all
Вы получите такой вывод:
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: cockpit dhcpv6-client http ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
Перезапустите брандмауэр, чтобы изменения вступили в силу:
sudo firewall-cmd --reload
Добавив новое правило брандмауэра, нужно проверить, работает ли сервер. Попробуйте открыть стандартную посадочную страницу в браузере по доменному имени или IP-адресу сервера.
Если вы не знаете своего IP-адреса, вы можете узнать его с помощью команды:
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
Команда вернёт несколько адресов, однако сервер может использовать не все, а только один из них; проверьте каждый полученный адрес.
Также можно при помощи curl запросить свой адрес у третьей стороны.
curl -4 icanhazip.com
Полученный IP-адрес введите в браузер, чтобы убедиться, что веб-сервер работает должным образом.
http://server_domain_or_IP
На экране должна появиться стандартная посадочная страница Apache.
2: Установка MariaDB
Теперь, когда веб-сервер установлен, пришло время установить MariaDB. MariaDB – это система управления базами данных. Она организует и обеспечивает доступ к базам данных, в которых сайт может хранить свою информацию.
MariaDB – это форк MySQL, разработанный сообществом.
Чтобы установить эту программу, введите:
sudo dnf install mariadb-server
Когда установка завершится, включите и запустите сервис MariaDB:
sudo systemctl start mariadb
Чтобы защитить установку MariaDB, можно запустить простой скрипт безопасности, который удалит потенциально рискованные настройки. Инициируйте скрипт:
sudo mysql_secure_installation
Сценарий задаст ряд вопросов. Сначала нужно указать root-пароль MariaDB. Это учетная запись администратора MariaDB, которая имеет повышенные привилегии. Вы установили MariaDB только что и еще не внесли никаких изменений, этого пароля пока у вас нет, поэтому просто нажмите Enter.
В следующем окне скрипт предложит настроить root пароль для базы данных. Введите N и нажмите клавишу Enter. Вместо пароля MariaDB использует для root более надежный метод аутентификации, поэтому пароль сейчас можно не устанавливать.
На остальные вопросы можно нажать Y и Enter. Это удалит анонимных пользователей и тестовые базы данных, отключит удалённый root логин и обновит текущие настройки MariaDB.
После этого откройте командную строку MariaDB в терминале:
sudo mysql
Вы подключитесь к серверу MariaDB в качестве root пользователя базы данных. Вы должны увидеть примерно такой результат:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 10.3.17-MariaDB MariaDB Server
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)]>
Обратите внимание: вам не нужно было указывать пароль. Это потому, что метод аутентификации администратора по умолчанию в MariaDB – unix_socket, а не password. Сначала это может показаться проблемой безопасности, но это делает сервер базы данных более защищенным, поскольку войти в систему как пользователь root MariaDB могут только системные пользователи с привилегиями sudo, подключающиеся из консоли или приложения, работающее с теми же привилегиями. Практически это значит, что вы не сможете использовать аккаунт администратора для подключения с вашего PHP-приложения.
Для повышения безопасности лучше иметь отдельные учетные записи с более узкими привилегиями для каждой базы данных (особенно если вы планируете разместить на своем сервере несколько БД). Давайте создадим базу данных example_database и пользователя example_user (вы можете заменить эти имена другими значениями).
Чтобы создать новую базу данных, выполните следующую команду из консоли MariaDB:
CREATE DATABASE example_database;
Теперь можно создать нового пользователя и предоставить ему полные права на новую базу данных. Следующая команда определяет условный пароль этого пользователя (password), вы должны заменить это значение безопасным паролем.
GRANT ALL ON example_database.* TO 'example_user'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
Это предоставит пользователю example_user полные права доступа к БД example_database, в то же время запретив ему создавать или изменять другие базы данных на вашем сервере.
Сбросьте привилегии:
FLUSH PRIVILEGES;
После этого выйдите из оболочки MariaDB:
exit
Вы можете убедиться, что у нового пользователя есть соответствующие права доступа. Снова войдите в консоль MariaDB, на этот раз с помощью новых учетных данных:
mysql -u example_user -p
Обратите внимание на флаг -p в этой команде, который запрашивает пароль, который вы указали при создании пользователя example_user. После входа в консоль MariaDB убедитесь, что у вас есть доступ к базе данных example_database:
SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)
Чтобы выйти из оболочки MariaDB, введите:
exit
На данный момент СУБД настроена, вы можете перейти к установке PHP, последнего компонента стека LAMP.
3: Установка PHP
PHP – это серверный язык сценариев для написания динамических страниц. Он позволяет запускать сценарии, подключаться к БД MariaDB и передавать обработанный контент в браузер для отображения.
Также вам понадобится дополнительный пакет php-mysqlnd, модуль PHP, который позволяет PHP взаимодействовать с базами данных на основе MySQL. Базовые пакеты PHP установятся автоматически в качестве зависимостей.
Чтобы установить php и php-mysqlnd, используйте dnf:
sudo dnf install php php-mysqlnd
После установки нужно перезапустить Apache, чтобы включить модули PHP.
sudo systemctl restart httpd
Теперь стек полностью установлен. Давайте протестируем его работу.
4: Тестирование PHP
В CentOS 8 стандартная установка Apache автоматически создает корневой каталог /var/www/html. Вам не нужно вносить изменения в конфигурацию Apache, чтобы PHP смог работать корректно.
Единственное изменение, которое нужно внести, – это в привилегии на корневой каталог. Это даст вам возможность создавать и редактировать файлы в этом каталоге в сессии своего обычного пользователя без необходимости использовать префикс sudo.
Следующая команда передаст права на стандартный корневой каталог Apache пользователю и группе по имени 8host (вместо этого условного имени вы должны указать в команде имя своего пользователя и группы).
sudo chown -R 8host.8host /var/www/html/
Сейчас нужно убедиться в том, что веб-сервер взаимодействует с PHP. Для этого нужно создать простой сценарий PHP, info.php. По умолчанию в этой системе используется редактор vi, но новичкам непросто разобраться, как он работает. Если хотите, установите вместо него nano.
sudo dnf install nano
Подтвердите установку, нажав у.
Создайте файл:
nano /var/www/html/info.php
На экране появится пустой файл. Поместите в него такой код:
<?php
phpinfo();
Сохраните и закройте файл.
Теперь попробуйте открыть его в браузере:
http://server_host_or_IP/info.php
На экране появится веб-страница, содержащая информацию о сервере. Если такая страница появилась, веб-сервер обслуживает файлы PHP.
Важно! После проверки обязательно удалите этот файл, иначе любой пользователь сможет получить доступ к конфиденциальным данным о сервере.
rm /var/www/html/info.php
5: Тестирование соединения базы данных с PHP (опционально)
Если вы хотите проверить, может ли PHP подключаться к MariaDB и выполнять запросы к базе данных, вы можете создать тестовую таблицу с фиктивными данными и запросить ее содержимое из сценария PHP.
Сначала подключитесь к консоли MariaDB с помощью пользователя БД, которого вы создали в разделе 2 данного руководства:
mysql -u example_user -p
Создайте таблицу по имени 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 /var/www/html/todo_list.php
Добавьте в PHP-скрипт следующее содержимое:
<?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://server_host_or_IP/todo_list.php
Вы должны увидеть свой контент, который вы добавили в тестовую таблицу.
Это означает, что среда PHP может подключаться и взаимодействовать с вашим сервером MariaDB.
Заключение
Теперь на сервере CentOS 8 установлен программный стек LAMP – надёжная и гибкая платформа для развёртывания сайта или приложения. На этом этапе можно приступать к дальнейшей настойке сервера.