Если у Вас встала задача развернуть Web-сервер на операционной системе Linux CentOS 7.1 с использованием Apache, PHP и MySQL (LAMP), то данный материал в этом Вам поможет, так как сейчас мы пошагово рассмотрим весь процесс установки и настройки веб сервера Apache, языка программирования PHP и СУБД MySQL с подробными комментариями, так как этот сайт для начинающих.
Операционная система Linux и в частности дистрибутив CentOS выбран не случайно, так как он является одним из самых популярных дистрибутивов, которые активно используется в качестве платформы для web-серверов, кстати, говоря о том, что это за дистрибутив и как его установить, мы с Вами подробно разговаривали вот здесь.
И так приступаем и начнем мы с небольшой настройки самой операционной системы, а конкретно откроем необходимые порты на файрволе, для того чтобы иметь возможность обращаться к web-серверу по этим портам.
Примечание! Еще раз обращаю Ваше внимание на то, что все действия мы будем выполнять в CentOS версии 7.1, так как в 6 версии и ниже многое делается по-другому. Также в качестве СУБД в CentOS 7.1 используется полностью бесплатная MariaDB, это ответвление MySQL.
- Открытие портов в файрволе на CentOS 7.1
- Установка и настройка Web-сервера Apache на CentOS 7.1
- Убираем страницу заглушку
- Настраиваем каталоги http сервера
- Настраиваем конфиг для тестового сайта
- Настраиваем SELinux в CentOS 7.1 для WEB сервера
- Устанавливаем PHP на CentOS 7.1
- Устанавливаем MySQL/MariaDB на CentOS 7.1
- Проверяем работу MariaDB
Открытие портов в файрволе на CentOS 7.1
Как уже было сказано выше, для того чтобы наш web сервер был доступен по определенным портам, т.е. обычно это 80 для http и 443 для https, необходимо открыть соответствующие порты на файрволе, делается это достаточно просто, поэтому отключать файрвол, как рекомендуют некоторые web мастера, нет необходимости и я даже больше скажу — это крайне не рекомендуется.
Примечание! Все мы будем делать в терминале (консоли) Linux, поэтому неважно установлена ли графическая оболочка у Вас или нет.
Выполняем от имени суперпользователя следующие команды, 1 для открытия 80 порта, 2 для 443 и 3 для перезапуска файрвола:
firewall-cmd --permanent --zone=public --add-service=http firewall-cmd --permanent --zone=public --add-service=https firewall-cmd --reload
Установка и настройка Web-сервера Apache на CentOS 7.1
Теперь устанавливаем HTTP сервер Apache, это также делается очень просто, выполняем еще 3 команды, первая — это непосредственно сама установка http сервера с модулем ssl, вторая — это его запуск, и третья — это включение в автозагрузку.
Примечание! Перед запуском команд проверьте, подключен ли у Вас Интернет. Эти и все остальные команды выполняются от имени суперпользователя (root).
yum -y install httpd mod_ssl systemctl start httpd.service systemctl enable httpd.service
После того как Вы установили, запустили и поместили в автозагрузку Apache, необходимо проверить работу этого http сервера, для этого просто вводим в браузере ip адрес сервера или если у Вас CentOS со средой рабочего стола, то достаточно указать 127.0.0.1, т.е. localhost непосредственно на самом сервере в браузере. В ответ Вы должны получить что-то вроде этого
Это заставка означает, что http сервер установлен и по умолчанию отображается страница приветствия.
Убираем страницу заглушку
Теперь нам необходимо настроить наш web сервер Apache, и первое что нужно сделать, это убрать страницу заглушку, для этого редактируем файл welcome.conf (напомню, что все делаем от имени root), например, редактором nano, в этом файле всего лишь нужно закомментировать все не закомментированные строки, знак комментария # (решетка).
nano /etc/httpd/conf.d/welcome.conf
Для сохранения нажимаем сочетание клавиш Ctrl+O, затем для подтверждения жмем Enter и для выхода из редактора Ctrl+X.
Перезапускаем Apache
systemctl restart httpd
Проверяем работу, и у нас должно отобразиться вот это
Т.е. список каталогов и файлов, но так как у нас еще нет никаких файлов и папок в корневом каталоге, то, соответственно, ничего и не отображается.
Настраиваем каталоги http сервера
Теперь давайте создадим структуру каталогов и соответственно сами каталоги для наших сайтов, и добавим файл конфигурации хоста, в котором будут храниться настройки нашего первого тестового сайта. Предлагаю следующую структуру, в корневой директории http сервера, т.е. в /var/www/html/ будем создавать отдельные каталоги для каждого сайта, например, для тестового сайта структура следующая:
/var/www/html/testsite/www/ — файлы сайта
/var/www/html/testsite/logs/ — логи сайта
т.е. в домашней директории (html) создаем папку с названием сайта (testsite), в которой создаем папки www и logs, в первой из которых будут располагаться все файлы и папки сайта, а во второй лог обращений и лог ошибок.
Данные каталоги создаем следующими командами:
mkdir -p /var/www/html/testsite mkdir -p /var/www/html/testsite/www mkdir -p /var/www/html/testsite/logs
Настраиваем конфиг для тестового сайта
Давайте создадим конфигурационный файл для сайта, для каждого сайта будем делать отдельный файл, в нашем случае предлагаю назвать его также как и корневой каталог, т.е. testsite, расширение conf, в итоге мы должны создать файл testsite.conf в директории с остальными конфигами (мы туда уже заглядывали) т.е. в /etc/httpd/conf.d/
Создаем файл
touch /etc/httpd/conf.d/testsite.conf
Открываем его на редактирование тем же самым редактором nano
nano /etc/httpd/conf.d/testsite.conf
И вносим следующие настройки (я их прокомментировал)
<VirtualHost *:80> #доменное имя (для примера я просто укажу локальный адрес) ServerName 127.0.0.1 #Корневой каталог сайта DocumentRoot /var/www/html/testsite/www #Настройки каталога www <Directory /var/www/html/testsite/www> #запрещаем просмотр списка файлов и папок Options -Indexes #Разрешаем читать файл .htaccess AllowOverride All #Разрешаем доступ Require all granted </Directory> #Путь к лог файлу ошибок ErrorLog /var/www/html/testsite/logs/error.log #Путь к файлу обращений CustomLog /var/www/html/testsite/logs/access.log common </VirtualHost>
Сохраняем и закрываем тем же самым способом, как мы это делали чуть ранее.
Теперь нам нужно перезапустить Apache, но если мы попытаемся это сделать, у нас ничего не получится, http сервер остановится, но не запустится и в данном случае это будет связанно с настройками безопасности SELinux, а если говорить конкретно, то веб сервер попытается записать данные в лог, но не сможет, поэтому давайте перейдем к настройкам SELinux.
Настраиваем SELinux в CentOS 7.1 для WEB сервера
SELinux (Linux с улучшенной безопасностью) – это система контроля доступа, которая является частью ядра Linux. В некоторых дистрибутивах Linux данная система безопасности по умолчанию включена, например, как у нас в CentOS. В Интернете можно встретить статьи, где веб мастера рекомендуют вообще выключать систему SELinux, также как и файрвол, но самом деле этого лучше не делать, а просто настроить эти компоненты, файрвол мы уже настроили выше, теперь давайте настроим SELinux.
Первое, что мы сделаем — это разрешим посылать запросы из скриптов к базе данных, это делается вот так:
setsebool -P httpd_can_network_connect on
А затем как раз зададим контекст безопасности для каталога logs, чтобы web-сервер мог писать в него, первой командой мы задаем этот контекст безопасности, а второй переконфигурируем SELinux
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/testsite/logs' restorecon -v '/var/www/html/testsite/logs'
Теперь давайте перезагрузимся
reboot
Проверяем работу HTTP-сервера, как обычно обращаемся в браузере к нашему серверу по его адресу. В данный момент мы должны получить ответ Forbidden
т.е. отказано в доступе, так как никаких файлов в нашем каталоге еще нет, а листинг директорий мы отключили.
Устанавливаем PHP на CentOS 7.1
Для установки языка программирования PHP на CentOS необходимо выполнить следующую команду, но учтите, что если Вы используете дополнительные расширения PHP, то их необходимо включать в установку, например, мы сразу установим расширение для работы с базой MySQL (указываем название расширения через пробел). Если Вы не знаете, какие расширения Вы будете использовать, то ничего страшного, потом их конечно можно доустановить, итак, команда для установки php и расширения mysql будет выглядеть следующим образом (все от имени root):
yum -y install php php-mysql
Перезапускаем Apache
systemctl restart httpd
Для проверки установился ли PHP, создаем тестовый файл (например, таким же способом как мы создавали конфиг Apache чуть выше), допустим с названием test.php в директории тестового сайта (/var/www/html/testsite/www/), содержание файла следующее (просто информация о PHP)
<?PHP echo phpinfo(); ?>
После создания мы обращаемся к этому файлу из браузера, например ip_адрес/test.php
В ответ мы должны получить вот такую страницу
Как видите, у нас установилась версия PHP 5.4.16.
Устанавливаем MySQL/MariaDB на CentOS 7.1
В операционной системе CentOS 7.1 в качестве сервера баз данных используется не сама СУБД MySQL, а ее ответвление MariaDB. Эти базы полностью совместимы, только MariaDB разрабатывается и поддерживается сообществом (как Вы знаете, MySQL поддерживает компания Oracle) и является полностью бесплатной.
Для установки MariaDB пишем следующую команду
yum -y install mariadb-server mariadb
Запускаем
systemctl start mariadb
Помещаем в автозагрузку
systemctl enable mariadb
Задаем пароль для root пользователя
mysqladmin -u root password 'Придуманный_пароль'
Запускаем скрипт безопасной установки — это нужно, для того чтобы удалить опасные настройки по умолчанию, например анонимных пользователей
mysql_secure_installation
Сначала Вас спросят пароль root пользователя, а затем если Вы, конечно, захотите установить новый пароль для root, но мы его и так только что задали. На все остальные вопросы отвечаем y (т.е. да)
Проверяем работу MariaDB
Чтобы проверить работу MariaDB исправим немного наш тестовый скрипт (test.php). Пишем следующий код PHP.
<?php ini_set('display_errors', 1); //Включаем вывод ошибок на страницу $dbServer = "127.0.0.1"; //Адрес сервера БД $dbname = "mysql"; //База данных (тестовая по умолчанию) $dbuser = "root"; //Имя пользователя БД $dbpass = "12345"; //Пароль пользователя БД //Подключаемся к серверу $dbconn = @mysql_connect($dbServer, $dbuser, $dbpass); //Проверка доступности сервера if (!$dbconn){ echo "<p>Сервер баз данных недоступен</p>"; exit(); } //Проверка доступности базы данных if (!@mysql_select_db($dbname,$dbconn)){ echo "<p>База данных недоступна</p>"; exit(); } //Простой запрос, узнаем версию MariaDB $VERSION = mysql_query("SELECT VERSION()"); if(!$VERSION){ echo "<p>Ошибка в запросе</p>"; exit(); } echo mysql_result($VERSION, 0); ?>
Также в браузере вызываем test.php и если все хорошо, то в ответ мы получим версию MariaDB, в моем случае это 5.5.41-MariaDB.
Заметка! Рейтинг популярности серверных дистрибутивов Linux.
Вот мы с Вами и настроили полноценный WEB-сервер, надеюсь, данный материал был Вам полезен, удачи!
Классная статья, только что б команда semanage работала нужно установить пакет policycoreutils -python
Цитирую Vlad:Классная статья, только что б команда semanage работала нужно установить пакет policycoreutils -python
Для этого пишем:
yum -y install policycoreutils -python ???
Да
Проверяем работу MariaDB
Что бы проверить работу MariaDB исправим немного наш тестовый скрипт (test.php). Пишем следующий код PHP.
Подскажите где он находиться?
В директории тестового сайта (/var/www/html/testsite/www/). Это указано чуть выше в статье, когда мы устанавливаем PHP
А я вот застрял на прописании политик для firewall. Мне пишет:
# firewall-cmd —permanent —zone=public —add-service=http
FirewallD is not running
статус
# systemctl status firewalld
● firewalld.service — firewalld — dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Чт 2016-02-11 16:19:21 MSK; 10min ago
Process: 595 ExecStart=/usr/sbin/firewalld —nofork —nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS)
Main PID: 595 (code=exited, status=0/SUCCESS)
FATAL ERROR: No IPv4 and IPv6 firewall.
ERROR: Raising SystemExit in run_server
система:# uname -a
Linux pc001 3.10.0-327.4.5.el7.i686 #1 SMP Mon Jan 25 21:58:43 UTC 2016 i686 i686 i386 GNU/Linux
Подскажите алгоритм исправления ошибки?`
Огромная благодарность за статью!!!
после перезагрузки перестала запускаться httpd.service
что делать все по инструкции делал
Команда для помещения в автозагрузку (от имени root)
systemctl enable httpd.service
почти 3 м. не работаю (сам вр.уч). Не поверите, каждый день по многу часов ставлю сборку. Но php только в консоли. И один только раз php 7 отразилась в браузере. Centos 7. и только он. Пока спасибо. С уважением. Сергей.Всё перепробовал. Завтра может откат сделаю к 6 версии. (у меня два компьютера).
Отличная статья! Почти сразу получилось)))
К этой статье не хватает ftp настройку