Настройка lamp centos 8
Стек 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.
Подтвердите установку, нажав у.
После завершения установки введите эту команду, чтобы включить и запустить сервер:
Чтобы убедиться, что политика брандмауэра изменилась, введите:
sudo firewall-cmd --permanent --list-all
Вы получите такой вывод:
Перезапустите брандмауэр, чтобы изменения вступили в силу:
sudo firewall-cmd --reload
Добавив новое правило брандмауэра, нужно проверить, работает ли сервер. Попробуйте открыть стандартную посадочную страницу в браузере по доменному имени или IP-адресу сервера.
Если вы не знаете своего IP-адреса, вы можете узнать его с помощью команды:
ip addr show eth0 | grep inet | awk '< print $2; >' | sed 's/\/.*$//'
Команда вернёт несколько адресов, однако сервер может использовать не все, а только один из них; проверьте каждый полученный адрес.
Также можно при помощи curl запросить свой адрес у третьей стороны.
Полученный IP-адрес введите в браузер, чтобы убедиться, что веб-сервер работает должным образом.
На экране должна появиться стандартная посадочная страница Apache.
2: Установка MariaDB
Теперь, когда веб-сервер установлен, пришло время установить MariaDB. MariaDB – это система управления базами данных. Она организует и обеспечивает доступ к базам данных, в которых сайт может хранить свою информацию.
MariaDB – это форк MySQL, разработанный сообществом.
Чтобы установить эту программу, введите:
sudo dnf install mariadb-server
Когда установка завершится, включите и запустите сервис MariaDB:
sudo systemctl start mariadb
Чтобы защитить установку MariaDB, можно запустить простой скрипт безопасности, который удалит потенциально рискованные настройки. Инициируйте скрипт:
Сценарий задаст ряд вопросов. Сначала нужно указать root-пароль MariaDB. Это учетная запись администратора MariaDB, которая имеет повышенные привилегии. Вы установили MariaDB только что и еще не внесли никаких изменений, этого пароля пока у вас нет, поэтому просто нажмите Enter.
В следующем окне скрипт предложит настроить root пароль для базы данных. Введите N и нажмите клавишу Enter. Вместо пароля MariaDB использует для root более надежный метод аутентификации, поэтому пароль сейчас можно не устанавливать.
На остальные вопросы можно нажать Y и Enter. Это удалит анонимных пользователей и тестовые базы данных, отключит удалённый root логин и обновит текущие настройки MariaDB.
После этого откройте командную строку MariaDB в терминале:
Вы подключитесь к серверу 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)]>
Для повышения безопасности лучше иметь отдельные учетные записи с более узкими привилегиями для каждой базы данных (особенно если вы планируете разместить на своем сервере несколько БД). Давайте создадим базу данных 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, в то же время запретив ему создавать или изменять другие базы данных на вашем сервере.
После этого выйдите из оболочки MariaDB:
Вы можете убедиться, что у нового пользователя есть соответствующие права доступа. Снова войдите в консоль MariaDB, на этот раз с помощью новых учетных данных:
mysql -u example_user -p
Обратите внимание на флаг -p в этой команде, который запрашивает пароль, который вы указали при создании пользователя example_user. После входа в консоль MariaDB убедитесь, что у вас есть доступ к базе данных example_database:
Чтобы выйти из оболочки MariaDB, введите:
На данный момент СУБД настроена, вы можете перейти к установке PHP, последнего компонента стека LAMP.
3: Установка PHP
PHP – это серверный язык сценариев для написания динамических страниц. Он позволяет запускать сценарии, подключаться к БД MariaDB и передавать обработанный контент в браузер для отображения.
Также вам понадобится дополнительный пакет php-mysqlnd, модуль PHP, который позволяет PHP взаимодействовать с базами данных на основе MySQL. Базовые пакеты PHP установятся автоматически в качестве зависимостей.
Чтобы установить php и php-mysqlnd, используйте dnf:
sudo dnf install php php-mysqlnd
После установки нужно перезапустить Apache, чтобы включить модули PHP.
Теперь стек полностью установлен. Давайте протестируем его работу.
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
Подтвердите установку, нажав у.
На экране появится пустой файл. Поместите в него такой код:
Сохраните и закройте файл.
Теперь попробуйте открыть его в браузере:
На экране появится веб-страница, содержащая информацию о сервере. Если такая страница появилась, веб-сервер обслуживает файлы 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:
Теперь можно создать PHP-скрипт, который будет подключаться к MariaDB и запрашивать контент. Создайте новый 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:
Вы должны увидеть свой контент, который вы добавили в тестовую таблицу.
Это означает, что среда PHP может подключаться и взаимодействовать с вашим сервером MariaDB.
Заключение
Теперь на сервере CentOS 8 установлен программный стек LAMP – надёжная и гибкая платформа для развёртывания сайта или приложения. На этом этапе можно приступать к дальнейшей настойке сервера.
Термин LAMP является аббревиатурой от названий следующих четырех компонентов с открытым исходным кодом:
Стек LAMP обычно используется для разработки и развертывания динамических приложений PHP, таких как WordPress, Laravel и Drupal.
Если вы спешите и не хотите читать более подробную документацию, вы можете установить LAMP Stack на свой сервер CentOS 8, следуя нашему разделу Quickstart.
Установите LEMP Stack в CentOS 8 [Быстрый старт]
В этом кратком руководстве показаны основные шаги, необходимые для установки стека LAMP на сервере CentOS 8.
Предпосылки
Пользователь, под которым вы вошли в систему, должен иметь права sudo, чтобы иметь возможность устанавливать пакеты.
Шаг 1. Установка Apache
Apache доступен в репозиториях CentOS 8 по умолчанию, и установка довольно проста.
После завершения установки запустите и включите службу Apache, набрав:
Шаг 2. Установка MySQL
Следующим шагом является установка сервера базы данных MySQL или MariaDB. Для этого введите:
После установки запустите и включите службу с помощью:
Если вы хотите установить MySQL вместо MariaDB, ознакомьтесь с инструкциями по установке в нашем руководстве .Запустите сценарий mysql_secure_installation для защиты вашего сервера и установите пароль root MySQL:
Вам будет предложено настроить VALIDATE PASSWORD PLUGIN , который используется для проверки надежности паролей пользователей MySQL и повышения безопасности. Существует три уровня политики проверки пароля: низкий, средний и надежный. Нажмите ENTER если вы не хотите устанавливать плагин проверки пароля.
Шаг 3. Установка PHP
CentOS 8 распространяется с PHP 7.2. Эта версия поддерживает большинство современных приложений PHP, но более не будет активно поддерживаться с ноября 2019 года. Новые версии PHP доступны в репозитории Remi. Мы установим PHP 7.4.
Выполните следующую команду, чтобы установить репозиторий Remi и включить PHP 7.4:
Установите PHP FPM и несколько наиболее распространенных модулей PHP, набрав:
FPM устанавливается как зависимость и используется как сервер FastCGI. Запустите службу FPM и включите ее автоматический запуск при загрузке:
Если в вашей системе работает SELinux , вам необходимо обновить контекст безопасности SELinux:
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужно пройти . Если вам нужен высокопроизводительный web сервер на базе последних версий nginx и php-fpm, то читайте отдельную статью по этой теме - установка и настройка nginx и php-fpm7 на centos.Цели статьи
Данная статья является частью единого цикла статьей про сервер Centos.
Введение
В этой статье я расскажу, как настроить web сервер на базе популярного стека технологий - apache и php с модулем prefork. В связи с выходом нового релиза Centos 8, многие статьи на эту тему стали не актуальны, так как версии софта в базовых репозиториях обновились и тот же php нет смысла ставить из стороннего репозитория.
Работать будем на сервере под управлением CentOS 8. Если у вас его еще нет, то читайте мои статьи на тему установки и базовой настройки centos. Не забудьте уделить внимание теме настройки iptables. В данной статье я ее не буду касаться, хотя тема важная для web сервера.
В своей тестовой среде я буду использовать следующие сущности.
Web сервер на CentOS 8
Подопытным сервером будет выступать виртуальная машина от ihor, характеристики следующие:
Процессор | 2 ядра |
Память | 3 Gb |
Диск | 30 Gb SSD |
Хочу сразу уточнить, что разбираю базовую дефолтную настройку. Для улучшения быстродействия, повышения надежности и удобства пользования нужно установить еще несколько инструментов, о чем я расскажу отдельно. В общем случае для организации веб сервера будет достаточно того, что есть в этой статье.
Настройка apache в CentOS 8
Теперь приступим к установке apache. В CentOS 8 это делается очень просто:
Добавляем apache в автозагрузку:
Запускаем apache в CentOS 8:
Проверяем, запустился ли сервер:
Если ничего не видите, скорее всего у вас не настроен firewall. Если не занимались его настройкой, то по-умолчанию в centos установлен firewalld. На нем открыть порты для web сервера можно следующими командами.
Проверить, открылись ли порты можно командой.
Все в порядке, веб сервер работает. Теперь займемся настройкой apache. Я предпочитаю следующую структуру веб хостинга:
Создаем для нее директории.
Перезапуск apache в centos
Проверим созданную конфигурацию и выполним перезапуск apache.
В данном случае ошибок нет, показано предупреждение. Теперь делаем restart apache:
Дальше на своем компьютере правим файл hosts, чтобы обратиться к нашему виртуальному хосту. Добавляем туда строчку:
где 10.20.1.23 ip адрес нашего веб сервера. Это нужно сделать только в том случае, если настраиваете web сервер где-то в локальной сети без реально существующего доменного имени.
Установка php в CentOS 8
Установка php в Centos 8 сильно упростилась по сравнению с предыдущей версией, потому что в базовом репозитории хранится актуальная версия php 7.2 , которой можно пользоваться. Пока нет необходимости подключать сторонние репозитории, так как версия 7.2 вполне свежа и актуальна. Если у вас нет необходимости использовать что-то новее, то можно остановиться на этой версии.
Устанавливаем php в CentOS 8, а так же некоторые популярные модули, которые могут пригодиться для того же phpmyadmin.
Выполним перезапуск apache:
Создадим файл в директории виртуального хоста и проверим работу php:
Вы должны увидеть вывод информации о php. Если что-то не так, возникли какие-то ошибки, смотрите лог ошибок виртуального хоста, php ошибки будут тоже там. Если вам необходима более свежая версия php, то читайте статью по обновлению php 7.2 до 7.4.
Где лежит php.ini
После установки часто возникает вопрос, а где хранятся настройки php? Традиционно они находятся в едином файле настроек. В CentOS php.ini лежит в /etc, прямо в корне. Там можно редактировать глобальные настройки для всех виртуальных хостов. Персональные настройки каждого сайта можно сделать отдельно в файле конфигурации виртуального хоста, который мы сделали раньше. Давайте добавим туда несколько полезных настроек:
Добавляем в самый конец, перед </VirtualHost>
Для применения настроек нужно сделать restart apache. Если у вас полностью дефолтная установка, как у меня, то скорее всего вы увидите ошибку.
Invalid command 'php_admin_value', perhaps misspelled or defined by a module not included in the server configuration
Тут стоит проверка на запуск модуля. Он загружается только, если у нас загружен модуль prefork. Давайте попробуем его загрузить принудительно. Для этого комментируем все строки, кроме основной.
Проверяем конфигурацию apache.
Apache is running a threaded MPM, but your PHP Module is not compiled to be threadsafe.
Стандартный модуль mod_php скомпилирован с поддержкой модуля mpm_prefork. С другими он работать не будет. Таким образом, чтобы у нас нормально заработал php, нам надо вместо модуля mpm_event подключить модуль mpm_prefork. Для этого в конфиге 00-mpm.conf закомментируем подключение mpm_event_module и раскомментируем prefork.
После этого проверяйте конфигурацию и перезапускайте apache. Все должно заработать. Теперь в выводе phpinfo можно увидеть изменение настроек.
Установка MySQL в CentOS 8
Как я уже писал ранее, сейчас все большее распространение получает форк mysql — mariadb. Она имеет полную совместимость с mysql, так что можно смело пользоваться. Я предпочитаю использовать именно ее.
Устанавливаем mariadb на CentOS 8:
Запускаем mariadb и добавляем в автозагрузку.
Запускаем скрипт начальной конфигурации mysql и задаем пароль для root. Все остальное можно оставить по-умолчанию.
Не буду приводить весь вывод работы этого скрипта, там все достаточно просто и понятно. Сначала задаем пароль для root (текущий пароль после установки пустой), потом удаляем анонимных пользователей, отключаем возможность подключаться root удаленно, удаляем тестового пользователя и базу.
Файлы настроек mysql/mariadb в Centos 8 лежат в директории /etc/my.cnf.d. Для обычной работы достаточно настроек по-умолчанию. Но если вы решите изменить их, не забудьте перезапустить службу баз данных.
Перезапуск mariadb/mysql в CentOS 8:
На этом все. Базовый функционал web сервера на CentOS 8 настроен. Дальше настроим популярную панель управления mysql сервером - phpmyadmin.
Установка phpmyadmin
Для того, чтобы установить phpmyadmin на наш web сервер, достаточно просто распаковать в директорию с виртуальным хостом исходники панели. Давайте подготовим виртуальный хост. Создаем структуру папок.
После добавления конфига, не забудьте перезапустить apache.
Архив упакован в zip. Если у вас нет на сервере пакета unzip, установите его.
Распаковываем исходники в директорию виртуального хоста.
Более подробно вопрос установки и настройки phpmyadmin я рассматривал отдельно. Можете зайти в панель и создать базу mysql для тестового сайта, например, wordpress. Затем через консоль загрузить исходники cms и распаковать их.
Настройка ssl сертификата Lets Encrypt в apache
Теперь настроим работу web сервера apache с ssl сертификатом. Хотя если быть точным, то tls сертификатом. Устанавливаем пакет certbot для получения бесплатного ssl сертификата от let’s encrypt. Для этого нам сначала надо подключить репозиторий epel.
После установки пакетов certbot, если его запустить, напишет ошибку, что не может сам настроить apache.
Настроим все сами. Для начала создадим самоподписанный дефолтный сертификат, чтобы apache не ругался на отсутствие файла и смог запуститься.
Все параметры оставляйте дефолтные, не принципиально. Мы этот сертификат использовать не будет. Перезапустите apache.
Теперь выпустим сертификат для нашего домена. Имейте ввиду, чтобы получить сертификат у вас должно быть действующее доменное имя, ссылающееся на web сервер, который настраиваете. Let's Encrypt будет по доменному имени обращаться к серверу, на котором настраиваете сертификат, чтобы проверить домен. В тестовой лаборатории с вымышленным доменным именем получить настоящий ssl сертификат не получится.
В качестве способа аутентификации выбирайте
По аналогии делаете с остальными виртуальными хостами, для которых используете бесплатные сертификаты let’s encrypt. Осталось дело за малым — настроить автоматический выпуск новых ssl сертификатов, взамен просроченным. Для этого добавляем в /etc/crontab следующую строку:
- Через файл .htaccess
- С помощью настройки виртуального хоста.
Мне нравится больше второй вариант, поэтому приводим конфиг виртуального хоста к следующему виду.
Ротация логов веб сервера apache
Последний штрих в настройке web сервера — ротация логов виртуальных хостов. Если этого не сделать, то через какое-то, обычно продолжительное, время возникает проблема в связи с огромным размером лог файла.
Я предлагаю ротировать файлы логов по достижению ими размера в 10Мб, сжимать после ротации и хранить 10 архивов с логом. Обращаю внимание на важный нюанс при ротации логов по размеру. Скорее всего в общем случае она будет работать не так, как вы ожидаете. Подробности читайте по ссылке. Я привел пример простой конфигурации. Все параметры вы можете поменять по своему усмотрению. Примеров конфигурации logrotate в интернете много.
Настройка SELinux для web сервера apache
Раздел для тех, кто хочет настроить SELinux на своем web сервере. Сначала ставим пакет policycoreutils-python-utils если он еще не установлен. Он нам нужен для утилиты semanage.
Теперь автоматически сформируем модуль для selinux на основе событий аудита, которые накопились, пока мы настраивали сайт. Посмотреть их можно командой.
Создаем модуль selinux.
То же самое делаем для php.
Добавим нашу директорию /web/sites в соответствующие таблицы selinux для контента и логов.
И отдельно добавим каталог, куда web сервер сможет писать данные. Я покажу на примере правила для сайтов wordpress, где web сервер должен уметь писать в директорию wp-content для загрузки медиафайлов, установки тем и плагинов, а так же изменять файл wp-config.php.
Обновляем атрибуты файлов новым контекстом SELinux.
Теперь активируем защиту selinux и проверяем, что она работает.
Режим работы Enforcing означает, что selinux работает. Убедиться, что модули загружены, можно командой.
В целом, по selinux все. Мы просто разрешили все, что веб сервер просил. По идее, надо вдумчиво во всех правилах разбираться и разрешать только то, что считаешь нужным. Я честно скажу, что selinux знаю не очень хорошо. Дальше загрузки готовых модулей и автоматического создания модулей с помощью audit2allow я не двигался. Руками модули никогда не писал. Если есть какой-то более осмысленный и правильный способ настройки selinux на кастомной конфигурации веб сервера, буду рад полезной информации.
Видео
В завершении полное видео настройки web сервера apache на основе приведенной статьи. Если у кого-то что-то не получается, посмотрите, как это сделал я.
Заключение
Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!На этом по настройке apache все. Я рассмотрел все основные моменты, которые необходимы для установки и настройки web сервера на основе apache и php, который обычно называют LAMP. При этом рассказал о некоторых вещах, которые повышают удобство и гибкость эксплуатации сервера.
Тема настройки веб сервера обширна. Рассмотреть все варианты в одной статье невозможно, так как функционал будет разниться, в зависимости от назначения сервера. Тем не менее приведу еще несколько ссылок на материалы, которые имеют отношение к настройке web сервера:
-
или отдельных сайтов. и веб сайта с помощью zabbix. .
- Если у вас будут проблемы с ботами, то пригодится статья по блокировке доступа к сайту по странам или защита сайта от ddos.
Если еще что-то полезное вспомню, добавлю ссылки. Пока вроде все. Статья получилось большой и насыщенной. Было не просто все собрать воедино, проверить, связать между собой и оформить в последовательное повествование. Мог где-то ошибиться. Жду комментариев и отзывов. Написал все по своему опыту, как я обычно настраиваю веб сервера. Предполагаю что-то можно сделать более удобно и правильно. Буду рад научиться.
Напоминаю, что данная статья является частью единого цикла статьей про сервер Centos.
В этом руководстве мы покажем вам, как установить стек LAMP на CentOS 8. Для тех из вас, кто не знал, LAMP (стек сервера) представляет собой полнофункциональный стек, содержащий самый популярный веб-сервер, известный как Apache, самый популярный сервер баз данных MariaDB и самый популярный язык веб-программирования с открытым исходным кодом, известный как PHP. Все компоненты являются бесплатными программами с открытым исходным кодом, и их комбинация подходит для создания динамических веб-страниц.
Установка LAMP на CentOS 8
Шаг 1. Во-первых, давайте начнем с проверки актуальности вашей системы.
Шаг 2. Установка Apache на CentOS 8.
Мы будем устанавливать Apache с помощью dnf , который является менеджером пакетов по умолчанию для CentOS 8:
После установки служб Apache в вашей системе запустите все необходимые службы:
Шаг 3. Установка MariaDB на CentOS 8.
По умолчанию MariaDB не усилен. Вы можете защитить MariaDB с помощью mysql_secure_installation скрипта. вы должны внимательно прочитать и под каждым шагом, который установит пароль root, удалит анонимных пользователей, запретит удаленный вход root и удалит тестовую базу данных и доступ к безопасности MariaDB::
Чтобы войти в MariaDB, используйте следующую команду (обратите внимание, что это та же команда, которую вы использовали бы для входа в базу данных MariaDB):
Затем перезапустите сервер базы данных MariaDB и включите его запуск при запуске системы, используя:
Шаг 4. Установка PHP на CentOS 8.
Наконец, выполните следующие команды, чтобы установить PHP вместе с другими полезными модулями:
Перезапустите Apache, systemctl чтобы изменения вступили в силу:
Пришло время проверить это. Создайте новый файл с именем test.php on и добавьте следующее /var/www/html :
Поздравляю! Вы успешно установили LAMP . Благодарим за использование этого руководства для установки LAMP ( Apache , MariaDB и PHP ) в системе CentOS 8. Для получения дополнительной помощи или полезной информации мы рекомендуем вам посетить официальный веб-сайт Apache, MariaDB и PHP.
Веб-сервер, настроенный по данной инструкции можно будет использовать для размещения собственных сайтов в локальной сети или сети Интернет. Данная инструкция проверена для CentOS 8.
Общая настройка системы
Установка пакетов
1. Обновляем CentOS:
2. Устанавливаем репозиторий EPEL и дополнительные пакеты для загрузки и распаковки:
dnf install epel-release wget unzip
Время
1. Устанавливаем часовой пояс:
\cp /usr/share/zoneinfo/Europe/Moscow /etc/localtime
* данной командой мы установим часовой пояс по московскому времени.
2. Устанавливаем и запускаем службу для автоматической синхронизации времени:
dnf install chrony
systemctl enable chronyd
systemctl start chronyd
Настройка безопасности
1. Отключаем SELinux:
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
* первая команда редактирует конфигурационный файл, чтобы SELinux не запускался автоматически, вторая — отключает его разово. Подробнее читайте статью Как отключить SELinux.
2. Открываем необходимые порты в брандмауэре:
firewall-cmd --permanent --add-port=/tcp
firewall-cmd --permanent --add-port=/tcp
firewall-cmd --permanent --add-port=/tcp
* 80, 443 и 8080 порты для веб-сервера; 20, 21 порты нужны для работы FTP; 60000-65535 также необходимы для работы FTP (динамические порты для пассивного режима); 25, 465 и 587 порты нужны для работы почтового сервера по SMTP; последняя команда перезапускает firewalld, чтобы применить новые правила. Подробнее про настройку firewalld.
Установка NGINX
dnf install nginx
Внесем небольшую корректировку в файл nginx.conf:
* на практике, может встретиться ошибка could not build server_names_hash, you should increase server_names_hash_bucket_size: 32. Она возникает при большом количестве виртуальных серверов или если один из них будет иметь длинное название. Данная строка в конфиге исправит ситуацию.
Разрешаем автозапуск сервиса и запустим его:
systemctl enable nginx
systemctl start nginx
Проверим, что веб-сервер работает. Для этого открываем браузер на другом компьютере, который находится в одной сети и вводим в адресной строке IP-адрес сервера. В итоге мы должны увидеть заголовок «Welcome to nginx!»:
* обратите внимание, что данное приветствие может иметь и другой вид.
Установка PHP и PHP-FPM
Устанавливаем PHP и php-fpm следующей командой:
dnf install php php-fpm
* В CentOS 8 будет установлена версия php 7.2 и выше
Запускаем php-fpm и разрешаем его автозапуск:
systemctl enable php-fpm --now
Настройка связки NGINX + PHP
Открываем файл для настройки виртуального домена по умолчанию:
В секции location редактируем параметр index на следующее значение:
location / index index.php index.html index.htm;
>
* добавляем index.php в начало списка. Если параметра index нет, создаем его.
А внутри секции server добавим следующее:
Открываем настройки php-fpm:
Проверяем, что параметр listen настроен так:
. иначе, меняем значение. После перезагружаем php-fpm:
systemctl restart php-fpm
Проверяем правильность настроек nginx:
И перезагружаем его:
systemctl restart nginx
Создаем index.php в каталоге сайта по умолчанию со следующим содержимым:
Открываем в браузере IP-адрес нашего сервера. Теперь мы должны увидеть сводную информацию по PHP и его настройкам, например:
Установка MariaDB или MySQL
В данной статье мы установим MariaDB, но процедура установки и настройки MySQL аналогичная. Все расхождения будут отмечены явно в инструкции.
Устанавливаем MariaDB следующей командой:
dnf install mariadb mariadb-server
* для установки mysql выполняем команду dnf install mysql
Разрешаем автозапуск и запускаем СУБД:
systemctl enable mariadb --now
* для работы с mysql меняем mariadb на mysql.
Сразу создаем пароль для учетной записи root:
mysqladmin -u root password
PHP + MariaDB (MySQL)
Для возможности подключаться к базе данных скриптами PHP необходимо установить следующие модули:
dnf install php-mysqli
Если мы установили php5, также ставим php-mysql:
dnf install php-mysql
После перезагружаем php-fpm:
systemctl restart php-fpm
И открываем наш сайт в браузере. В phpinfo появится новая секция MySQL:
* нас не должно смущать, что установили мы mariadb, а заголовок mysql. Если посмотреть в таблицу, можно увидеть ячейку Client API version, в которой указано, что используется именно mariadb.
Установка phpMyAdmin
Переходим на сайт разработчика phpMyAdmin и копируем ссылку на нужную нам версию, например, последнюю:
Воспользовавшись скопированной ссылкой, скачиваем архив с установочными файлами:
Распаковываем скачанный архив:
Создаем каталог для phpmyadmin:
. и переносим в него содержимое распакованного архива:
mv phpMyAdmin-*-all-languages/* /usr/share/phpMyAdmin/
Задаем владельца для каталога:
chown -R apache:apache /usr/share/phpMyAdmin
* как правило, сервис, которых обрабатываем php-запросы работает от пользователя apache.
Устанавливаем модули php, необходимые для корректной работы phpMyAdmin:
dnf install php-json php-mbstring php-mysqli
Внесем небольшую настройку в конфигурацию phpMyAdmin.
Сгенерируем случайную последовательность символов:
Откроем на редактирование или создадим файл:
Внесем в него строку:
* где jd7n6yIcHOl55ikE7l5HAdNaWwunSHvR — последовательность, которую нам выдала команда head /dev/urandom . ; Также обратите внимание на <?php ?> — если мы создали новый файл, необходимо указать данные теги, так как они открывают код PHP. В противном случае, настройка не применится.
Теперь создадим для phpmyadmin отдельный виртуальный домен в NGINX:
И добавим в него следующее содержимое:
server listen 80;
server_name phpmyadmin.dmosk.local;
set $root_path /usr/share/phpMyAdmin;
location / root $root_path;
index index.php;
>
* где phpmyadmin.dmosk.local — адрес для виртуального домена, именно этот адрес должен быть введен в адресную строку браузера, чтобы открылся нужный сайт. Поэтому если нет возможности зарегистрировать домен и имя узла в DNS, можно воспользоваться локальным файлом hosts. /usr/share/phpMyAdmin — это каталог, в который по умолчанию устанавливается phpMyAdmin.
После перезапускаем NGINX:
systemctl reload nginx
Также нужно перезапустить php-fpm, так как в процессе установки были добавлены модули для PHP:
systemctl restart php-fpm
Установка Memcached
Первым этапом мы установим и настроим сервис memcached. Вторым — модуль php-memcached.
Сервис memcached
Выполняем установку пакетов:
dnf install memcached libmemcached
Создаем или открываем на редактирование конфигурационный файл для запуска сервиса:
Приводим его к виду:
* где PORT указываем на каком порту будет слушать сервис кэширования; USER — пользователь, под которым должен запускаться сервис; MAXCONN — максимальное число одновременных подключений; CACHESIZE — размер под кэш в мегабайтах; OPTIONS — параметры запуска (в данном примере наш сервис будет принимать запросы только с адреса локальной петли).
После разрешаем автозапуск и запускаем сервис кэширования:
systemctl enable memcached --now
Модуль для php
Обратите внимание, что у каждой версии пакета есть свои требования к версии PHP. Внимательно изучаем, подойдет ли версия php-memcached для нашего сервера.
Скачиваем архив, ссылку на который мы скопировали:
Устанавливаем пакеты, необходимые для сборки php-pecl-memcached:
dnf install php-devel zlib-devel make
dnf --enablerepo=PowerTools install libmemcached-devel
Распаковываем скачанный архив:
tar -xvzf memcached-*.tgz
Переходим в распакованный каталог:
Запускаем компиляцию php-расширения:
Копируем созданный модуль в каталог php-модулей:
cp modules/memcached.so /usr/lib64/php/modules/
Создаем конфигурационной файл для подключения расширения:
После установки модуля перезапускаем php-fpm:
systemctl restart php-fpm
Чтобы проверить, что модуль memcached работаем, открываем наш сайт в браузере — в phpinfo должна появиться новая секция:
. или вводим команду:
php -m | grep memcached
Мы должны получить:
Установка и настройка FTP-сервера
В качестве FTP-сервера будем использовать ProFTPd, так как он позволяет авторизовываться под uid системных учетных записей.
ProFTPd можно устанавливать командой:
dnf install proftpd
Загружаем скрипт ftpasswd:
Разрешаем запуск на выполнение скрипта:
chmod +x /etc/proftpd/ftpasswd
Создаем виртуального пользователя:
/etc/proftpd/ftpasswd --passwd --file=/etc/proftpd/ftpd.passwd --name=ftpwww --uid=48 --gid=48 --home=/var/www --shell=/sbin/nologin
- /etc/proftpd/ftpd.passwd — путь до файла, в котором хранятся пользователи;
- ftpwww — имя пользователя (логин);
- uid и gid — идентификаторы пользователя и группы системной учетной записи (apache);
- /var/www — домашний каталог пользователя;
- /sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.
Изменим права для созданного файла с паролями:
chmod 440 /etc/proftpd/ftpd.passwd
* в противном случае, при запуске proftpd мы получим ошибку «. fatal: AuthUserFile: unable to use /etc/proftpd.d/ftpd.passwd: Operation not permitted. »
Открываем на редактирование конфигурационный файл proftpd:
И редактируем следующее (комментируем):
Создадим конфигурационный файл со своими настройками:
И добавим следующее:
UseIPv6 off
IdentLookups off
PassivePorts 60000 65535
RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c
* где 60000 - 65535 — диапазон динамических портов для пассивного режима.
Разрешаем автозапуск FTP-серверу и запускаем его:
systemctl enable proftpd --now
Пробуем подключиться к серверу, использую любые FTP-клиенты, например, FileZilla, Total Commander или тот же браузер.
Это базовая и самая простая настройка ProFTPd, но если необходимо настроить TLS или хранить виртуальных пользователей в базе MySQL, читайте подробнее инструкцию по настройке ProFTPd на CentOS.
Несмотря на то, что мы установили и настроили PHP-FPM, Apache нам понадобится, как минимум, по двум причинам. Во-первых, многие сайты используют файл .htaccess, который читает Apache. Во-вторых, последний включает большое число модулей, которые может использовать портал.
В некоторых случаях, можно обойтись без Apache, но в данной инструкции мы опишем процедуру его установки и настройки.
Заходим в настройки:
И редактируем следующее:
* наш веб-сервер будет слушать на порту 8080, так как на 80 уже работает NGINX.
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
* если не указан конкретный скрипт, сначала веб-сервер пытается найти и запустить index.php, затем index.html
<Directory /var/www/*/www>
AllowOverride All
Options Indexes ExecCGI FollowSymLinks
Require all granted
</Directory>
* где Directory — разрешенные каталоги для запуска из apache; Options — разрешенные опции; Require — с каких IP-адресов можно открывать сайты, определенные в данном каталоге. Итого, мы разрешаем все каталоги в /var/www, но только если следующий каталог будет www; разрешаем опции Indexes (возвращает список файлов, если нет индексного файла, например, index.php), ExecCGI (разрешены сценарии CGI), FollowSymLinks (включены символические ссылки в этом каталоге); доступ для данных каталогов разрешен со всех адресов (all granted).
И если получаем ответ:
. разрешаем автозапуск и запускаем службу:
Создаем php-файл со следующим содержимым:
NGINX + Apache
Ранее нами была настроена связка nginx + php-fpm. Теперь проверяем совместную работу первого с apache.
Открываем конфигурационный файл nginx:
Находим наш настроенный location для php-fpm:
Проверяем, есть ли файл:
. и если есть, комментируем его содержимое:
* в данном примере мы отключили обработку всех php-файлов с помощью php-fpm, так как это у нас должен делать apache.
Проверяем и перезапускаем nginx:
systemctl restart nginx
Apache Real IP
Для решения проблемы будем использовать модуль mod_rpaf. Устанавливаем набор разработчика для apache:
Переходим в каталог /usr/local/src:
Переходим в распакованный каталог:
Собираем модуль и устанавливаем его:
* при возникновении ошибки ./apxs.sh: line 15: -c: command not found, необходимо поставить which командой dnf install which.
Создаем конфигурационный файл со следующим содержимым:
Postfix
Устанавливаем postfix командой:
dnf install postfix
Теперь нам необходимо сделать несколько простых настроек:
.
myorigin = $mydomain
.
inet_protocols = ipv4
.
Открываем карту пересылки:
* данной настройкой мы будем подставлять всем отправляемым письмам без поля FROM адрес [email protected].
Для применения настроек перезагружаем почтовый сервер:
systemctl restart postfix
Тюнинг веб-сервера
Открываем на редактирование следующий файл:
И правим следующее:
upload_max_filesize = 512M
.
post_max_size = 512M
.
short_open_tag = On
.
date.timezone = "Europe/Moscow"
systemctl restart php-fpm
NGINX
Открываем на редактирование следующий файл:
После перезапускаем nginx:
systemctl restart nginx
Postfix
Чтобы отправляемая почта меньше попадала в СПАМ, необходимо выполнить следующие шаги:
Создание первого сайта
Задаем переменную, значение которой будет домен сайта:
Создаем новый файл виртуального домена NGINX:
* обязательно на конце должен быть .conf, так как только такие файлы веб-сервер подгружает в конфигурацию.
И добавляем следующее содержимое.
access_log /var/www/site1/log/nginx/access_log;
error_log /var/www/site1/log/nginx/error_log;
gzip on;
gzip_disable "msie6";
gzip_min_length 1000;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ expires modified +1w;
>
>
* где site1.local — домен, для которого создается виртуальный домен; /var/www/site1 — каталог, в котором будет размещаться сайт.
** все запросы будут переводиться на локальный сервер, порт 8080, на котором работает apache, кроме обращений к статическим файла (jpg, png, css и так далее).
*** обратите внимание на выделения полужирным — здесь нужно подставить свои данные.
server listen 443 ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;
access_log /var/www/site1/log/nginx/access_log;
error_log /var/www/site1/log/nginx/error_log;
gzip on;
gzip_disable "msie6";
gzip_min_length 1000;
gzip_vary on;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ expires modified +1w;
>
>
Теперь настроим виртуальный домен в Apache:
<VirtualHost *:8080>
Define root_domain site1.local
Define root_path /var/www/site1
ErrorLog $/log/apache/error_log
TransferLog $/log/apache/access_log
</VirtualHost>
Создаем каталоги для сайта:
mkdir -p /var/www/$TMP_SITE/
mkdir -p /var/www/$TMP_SITE/log/
Создаем индексный файл со следующим содержимым:
Задаем права на папки:
chown -R apache:apache /var/www/$TMP_SITE
chmod -R 775 /var/www/$TMP_SITE
Проверяем корректность настроек конфигурационных файлов:
systemctl reload nginx
Открываем сайт в браузере.
При необходимости, создаем базу данных.
> CREATE DATABASE site1 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
* данными sql-командами мы создаем базу данных site1 и предоставляем к ней доступ для учетной записи dbuser с паролем password. При желании сделать соединение более безопасным, можно убрать WITH GRANT OPTION.
Читайте также: