Web-сервер на CentOS 7.1 – установка и настройка Apache, PHP и MySQL

Если у Вас встала задача развернуть 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 сервер был доступен по определенным портам, т.е. обычно это 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

Скриншот 1

Установка и настройка 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 

Скриншот 2

После того как Вы установили, запустили и поместили в автозагрузку Apache, необходимо проверить работу этого http сервера, для этого просто вводим в браузере ip адрес сервера или если у Вас CentOS со средой рабочего стола, то достаточно указать 127.0.0.1, т.е. localhost непосредственно на самом сервере в браузере. В ответ Вы должны получить что-то вроде этого

Скриншот 3

Это заставка означает, что http сервер установлен и по умолчанию отображается страница приветствия.

Убираем страницу заглушку

Теперь нам необходимо настроить наш web сервер Apache, и первое что нужно сделать, это убрать страницу заглушку, для этого редактируем файл welcome.conf (напомню, что все делаем от имени root), например, редактором nano, в этом файле всего лишь нужно закомментировать все не закомментированные строки, знак комментария # (решетка).

 
   nano /etc/httpd/conf.d/welcome.conf

Скриншот 4

Скриншот 5

Для сохранения нажимаем сочетание клавиш Ctrl+O, затем для подтверждения жмем Enter и для выхода из редактора Ctrl+X.

Перезапускаем Apache

 
   systemctl restart httpd

Скриншот 6

Проверяем работу, и у нас должно отобразиться вот это

Скриншот 7

Т.е. список каталогов и файлов, но так как у нас еще нет никаких файлов и папок в корневом каталоге, то, соответственно, ничего и не отображается.

Настраиваем каталоги 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

Скриншот 8

Настраиваем конфиг для тестового сайта

Давайте создадим конфигурационный файл для сайта, для каждого сайта будем делать отдельный файл, в нашем случае предлагаю назвать его также как и корневой каталог, т.е. 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>

Скриншот 9

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

Теперь нам нужно перезапустить 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

Скриншот 10

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

Скриншот 11

т.е. отказано в доступе, так как никаких файлов в нашем каталоге еще нет, а листинг директорий мы отключили.

Устанавливаем PHP на CentOS 7.1

Для установки языка программирования PHP на CentOS необходимо выполнить следующую команду, но учтите, что если Вы используете дополнительные расширения PHP, то их необходимо включать в установку, например, мы сразу установим расширение для работы с базой MySQL (указываем название расширения через пробел). Если Вы не знаете, какие расширения Вы будете использовать, то ничего страшного, потом их конечно можно доустановить, итак, команда для установки php и расширения mysql будет выглядеть следующим образом (все от имени root):

 
   yum -y install php php-mysql

Перезапускаем Apache

 
   systemctl restart httpd

Скриншот 12

Для проверки установился ли PHP, создаем тестовый файл (например, таким же способом как мы создавали конфиг Apache чуть выше), допустим с названием test.php в директории тестового сайта (/var/www/html/testsite/www/), содержание файла следующее (просто информация о PHP)

 
   <?PHP
         echo phpinfo();
   ?>

Скриншот 13

После создания мы обращаемся к этому файлу из браузера, например ip_адрес/test.php

В ответ мы должны получить вот такую страницу

Скриншот 14

Как видите, у нас установилась версия 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 (т.е. да)

Скриншот 15

Проверяем работу 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.

Вот мы с Вами и настроили полноценный WEB-сервер, надеюсь, данный материал был Вам полезен, удачи!

Понравилась статья? Поделиться с друзьями:
Заметки IT специалиста
Комментарии: 11
  1. Аватар
    Vlad

    Классная статья, только что б команда semanage работала нужно установить пакет policycoreutils -python

    1. Аватар
      Владимир

      Цитирую Vlad:Классная статья, только что б команда semanage работала нужно установить пакет policycoreutils -python

      Для этого пишем:
      yum -y install policycoreutils -python ???

      1. Админ
        Админ (автор)

        Да

  2. Аватар
    Роман

    Проверяем работу MariaDB

    Что бы проверить работу MariaDB исправим немного наш тестовый скрипт (test.php). Пишем следующий код PHP.

    Подскажите где он находиться?

    1. Админ
      Админ (автор)

      В директории тестового сайта (/var/www/html/testsite/www/). Это указано чуть выше в статье, когда мы устанавливаем PHP

  3. Аватар
    Andrew

    А я вот застрял на прописании политик для 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

    Подскажите алгоритм исправления ошибки?`

  4. Аватар
    KrivoyRog

    Огромная благодарность за статью!!!

  5. Аватар
    Serik

    после перезагрузки перестала запускаться httpd.service
    что делать все по инструкции делал

    1. Админ
      Админ (автор)

      Команда для помещения в автозагрузку (от имени root)
      systemctl enable httpd.service

  6. Аватар
    Сергей

    почти 3 м. не работаю (сам вр.уч). Не поверите, каждый день по многу часов ставлю сборку. Но php только в консоли. И один только раз php 7 отразилась в браузере. Centos 7. и только он. Пока спасибо. С уважением. Сергей.Всё перепробовал. Завтра может откат сделаю к 6 версии. (у меня два компьютера).

  7. Аватар
    Senatry

    Отличная статья! Почти сразу получилось)))

Добавить комментарий для KrivoyRog Отменить ответ

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:
Нажимая на кнопку «Отправить комментарий», я даю согласие на обработку персональных данных и принимаю политику конфиденциальности.