В данном руководстве мы рассмотрим как установить стек LAMP (Linux, Apache, MySQL, PHP) на CentOS Stream, что так же справедливо будет и для CentOS 8 и RHEL 8. Чтобы не было путаницы, стоит прояснить момент, что Apache – организация открытого программного обеспечения, которая организовалась вокруг Apache HTTP Server – и в зависимости от контекста может подразумеваться и первое и второе. В нашем же руководстве мы под Apache будем подразумевать Apache HTTP Server.
Системные требования
Вам понадобится сервер с установленной CentOS Stream, образ системы можно бесплатно скачать здесь.
Если у вас нет своего виртуального сервера, вы можете запустить сервер с Centos Stream из консоли RUVDS здесь.
В этом руководстве используется привилегированная учетная запись root, что бы переключиться на нее, наберите следующую команду и введите пароль root:
su -
Шаг 1. Обновление и настройка системы CentOS Stream
Перед тем как приступить к установке, будет хорошо обновить репозитории и установленные пакеты:
dnf update -y
Отключим SELinux, что бы не углубляться в тонкую настройку системы:
<!-- wp:heading {"level":1} -->
<h1>su -c "setenforce 0"</h1>
<!-- /wp:heading -->
<!-- wp:heading {"level":1} -->
<h1>sudo sed -i --follow-symlinks 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux</h1>
<!-- /wp:heading -->
Шаг 2. Установка Apache на CentOS Stream
Введите следующую команду, что бы установить пакеты [httpd] (собственно сам веб-сервер Apache) и [httpd-tools] (набор вспомогательных утилит, предоставляющих такие функции как мониторинг лог-файлов с построением графиков, блокирование DoS атак на основе данных от mod_status, тестирование быстродействия и т.д.):
dnf install httpd httpd-tools -y

После того, как установка завершилась, мы можем запустить Apache используя команду:
systemctl start httpd
И разрешить автозапуск Apache при загрузке системы:
systemctl enable httpd
Теперь давайте проверим статус сервиса:
systemctl status httpd
Вывод:
httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2021-02-28 22:01:30 MSK; 11s ago
Docs: man:httpd.service(8)
Main PID: 1662 (httpd)
Status: "Running, listening on: port 80"
Tasks: 213 (limit: 24739)
Memory: 42.9M
CGroup: /system.slice/httpd.service
├─1662 /usr/sbin/httpd -DFOREGROUND
├─1663 /usr/sbin/httpd -DFOREGROUND
├─1664 /usr/sbin/httpd -DFOREGROUND
├─1665 /usr/sbin/httpd -DFOREGROUND
└─1666 /usr/sbin/httpd -DFOREGROUND
“Enabled” в выводе команды означает, что сервис будет запущен при старте сервера, а “active (running)” показывает что сервис работает в настоящий момент.
Чтобы выйти из просмотра статуса, нажмите “q”.
Чтобы посмотреть версию установленного Apache, наберите команду:
httpd -v
Вывод:
Server version: Apache/2.4.37 (centos)
Server built: Jul 31 2020 20:44:41
Чтобы проверить, правильно ли работает сервер, в первую очередь нужно открыть порт 80 (http) в файрволле Centos (включен по умолчанию), для этого добавим порт по имени сервиса в разрешенные, командой:
firewall-cmd --permanent --add-service=http
Опция –permanent означает, что это правило для файрволла будет сохранено и после перезагрузки сервера. Далее применим новые правила файрволла, чтобы изменения вступили в силу:
systemctl reload firewalld
После этого мы можем перейти по IP-адресу сервера в браузере, и увидеть тестовую страницу сервера:

Теперь, если ваш сервер доступен в Интернете, ваша страница так же доступна публично.
Что бы отключить страницу по умолчанию, нужно удалить ее конфигурацию из списка конфигураций Apache:
rm /etc/httpd/conf.d/welcome.conf
Создадим собственную стартовую страницу, что бы убедится, что все работает корректно:
echo "Мой первый сайт!" > /var/www/html/index.html
Подготовим каталог /var/www/html для наших файлов, установив владельцем пользователя apache, который был создан при установке Apache:
chown -R apache:apache /var/www/html
По умолчанию Apache использует имя системы как свой глобальный “ServerName”. Если это имя не разрешается корректно DNS-сервером, при выполнении “apachectl configtest”, вы увидите сообщение об ошибке:
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
Чтобы определить однозначно ServerName, потребуется отредактировать файл конфигурации нашего сервера. Для этого установим текстовый редактор nano и создадим новый файл конфигурации (который будет дополнять глобальный файл конфигурации):
<!-- wp:heading {"level":1} -->
<h1>dnf install nano -y</h1>
<!-- /wp:heading -->
<!-- wp:heading {"level":1} -->
<h1>nano /etc/httpd/conf.d/servername.conf</h1>
<!-- /wp:heading -->
Добавим в начало файла ServerName localhost, если у нашего сервера нет DNS записей, или укажем полное DNS-имя (FQDN), если такое существует:
ServerName localhost
Проверим, что теперь на нашем сервере открывается наша страница, перейдя в браузере по ip-адресу сервера.
Шаг 3. Установка сервера MySQL 8 на CentOS Stream
Установим сервер MySQL с помощью команды:
dnf install mysql-server -y
Запустим и добавим старт сервиса при зарузке сервера:
systemctl start mysqld
systemctl enable mysqld
Обезопасим установку сервера MySQL выполнив скрипт:
mysql_secure_installation
Потребуется ответить на вопросы, приведены рекомендуемые ответы:
- Would you like to setup VALIDATE PASSWORD component? (Установить проверку паролей на сложность?) N
- Please set the password for root here. (Установите пароль для mysql-пользователя root) Задайте надежный пароль.
- Remove anonymous users? (Удалить анонимных пользователей) Y
- Disallow root login remotely? (Запретить подключатся mysql-пользователю root удаленно?) Y
- Remove test database and access to it? (Удалить тестовую базу и доступ к ней?) Y
- Reload privilege tables now? (Перезагрузить таблицы привилегий сейчас?) Y
Проверим статус сервиса:
systemctl status mysqld
Вывод:
mysqld.service - MySQL 8.0 database server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2021-02-28 23:01:13 MSK; 11min ago
Main PID: 4638 (mysqld)
Status: "Server is operational"
Tasks: 40 (limit: 24739)
Memory: 441.8M
CGroup: /system.slice/mysqld.service
└─4638 /usr/libexec/mysqld --basedir=/usr
Feb 28 23:01:03 localhost.localdomain systemd[1]: Starting MySQL 8.0 database server…
Feb 28 23:01:03 localhost.localdomain mysql-prepare-db-dir[4556]: Initializing MySQL database
Feb 28 23:01:13 localhost.localdomain systemd[1]: Started MySQL 8.0 database server.
Теперь можно подключиться к mysql используя консольный клиент:
mysql -u root -p
Чтобы выйти из консоли, наберите “\q” или “exit;”
Шаг 4. Установка PHP на CentOS Stream
Установим PHP с наиболее часто используемыми модулями, на CentOS Stream веб-сервер Apache по умолчанию использует PHP-FPM вместо mod_php что бы выполнять код PHP, поэтому в команде ниже мы так же установим php-fpm:
dnf install php php-fpm php-mysqlnd php-opcache php-gd php-xml php-mbstring -y
После установки, нам потребуется запустить и добавить в автозапуск php-fpm:
systemctl start php-fpm
systemctl enable php-fpm
Проверим статус сервиса:
systemctl status php-fpm
Вывод:
php-fpm.service - The PHP FastCGI Process Manager
Loaded: loaded (/usr/lib/systemd/system/php-fpm.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2021-02-28 23:42:33 MSK; 12s ago
Main PID: 5197 (php-fpm)
Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 6 (limit: 24739)
Memory: 14.7M
CGroup: /system.slice/php-fpm.service
├─5197 php-fpm: master process (/etc/php-fpm.conf)
├─5198 php-fpm: pool www
├─5199 php-fpm: pool www
├─5200 php-fpm: pool www
├─5201 php-fpm: pool www
└─5202 php-fpm: pool www
Feb 28 23:42:33 localhost.localdomain systemd[1]: Starting The PHP FastCGI Process Manager…
Feb 28 23:42:33 localhost.localdomain systemd[1]: Started The PHP FastCGI Process Manager.
PHP-FPM так же устанавливает конфигурацию php.conf для Apache в каталог сервера /etc/httpd/conf.d/, поэтому нужно перезапустить Apache, чтобы иметь возможность исполнять PHP код.
systemctl restart httpd
Шаг 5. Проверяем работу PHP
Создадим php-файл, который выводит информацию об установленном PHP:
echo "" > /var/www/html/info.php
Теперь если мы перейдем в браузере по адресу http://ip_адреснашегосервера/info.php или localhost/info.php, в случае если мы установили LAMP на локальную машину, мы увидим страницу с информацией об установленном PHP:

Теперь, когда мы убедились, что все работает, как ожидается – можно удалить файл info.php:
rm /var/www/html/info.php
Выводы
В данном руководстве, мы рассмотрели как установить популярный стек LAMP на CentOS Stream, который подойдет для разработки и тестирования приложений на PHP. Для продуктивных сред, как правило добавляется nginx, т.к. nginx и apache имеют ключевое отличие в том, как они обрабатывают запросы. Там где таких запросов минимум (сервер для разработки) достаточно одного Apache, там где количество подключений будет значительным (сервер в интернете) – желательно дополнительно установить nginx, как реверс-прокси.