Веб-сервер под CentOS 7

Задача: развернуть выделенную площадку для размещения нескольких веб-сайтов. Рассматриваем процесс с нуля, разделяя на несколько этапов.

Внимание! Уже появилась более прогрессивная методика для версии 7.1.

В качестве операционной системы для будущей хостинг-площадки вполне рационально выбрать операционную систему Linux, диструбутив Centos версии 7.0. Свой выбор на Centos остановим, так как дистрибутив стабильный, прекрасно обновляется, поддерживает работу с пакетами. А самое главное - является вариантом Red Hat Enterprise Linux.

Удивительные вещи, которые ждут нас в седьмой версии:

  • Отказ от iptables, теперь вместо него firewall
  • Отказ от chkconfig - теперь вместо него systemd
  • Переход с MySQL к MariaDB.

Установка операционной системы

На данный момент актуальной является CentOS 7, ориентированный исключительно на архитектуру x86_64. Скачиваем образ ISO и устанавливаем с диска, но можно поставить и с флэшки.

В процессе установки выбираем вариант Desktop: он достаточно лёгкий (не будет тащить за собой кучу лишних пакетов), а кроме того позволит на первых порах отлаживать систему в графическом режиме. В будущем установим дополнительные пакеты вручную.

Аппаратная часть

В нашем распоряжении оказался уже морально устаревший двухядерный компьютер на базе процессора E3300, имеющий 2 Гб оперативной памяти. Как показала практика, его вполне достаточно.

Разделы диска

На шаге Installation Destination нам предлагается выбрать диск для установки системы. Если ничего не трогать (Automatically Configure Partitioning), то инсталлятор самостоятельно справится с разбиением на разделы. Считаю, такие важные вещи нельзя пускать на самотёк, они требуют вмешательства; поэтому наш выбор - I will configure partitioning. Видим диалоговое окно, показанное ниже.

Распределяем место на диске.

  • Нам необходимо выделить более 82 Мб для раздела boot.
  • Всё оставшееся место за исключением размера оперативной памяти отводим под корневой раздел.
  • Наконец, остаток отдаём под файл подкачки, помечая его swap.

 В  результате разделы будут видны примерно таким образом.

Centos: Hard drives setup

 В  отличие от шестой версии, файловой системой по умолчанию в седьмой версии является XFS, а не ext4. К сожалению, в сети довелось натыкаться на негативные отзывы о ней, однако не могу высказать своё собственное мнение: я вынужден использовать ext4 для совместимости с некоторым необходимым программно-аппаратным обеспечением.

Результат команды df -h после установки:

FilesystemSizeUsedAvailUse%Mounted on
   
/dev/sda2 226G 27G 188G 13% /
tmpfs 922M 0 922M 0% /dev/shm
/dev/sda1 194M 82M 103M 45% /boot

Отладка

Первое, что надо сделать – отключить систему безопасности SELinux.

Например, включенный selinux не позволит подключаться по протоколу ftp к серверу, если в будущем поставим vsftpd, клиент будет получать сообщения об ошибке

500 OOPS: cannot change directory:/home/username

В CentOS отключение SELinux выглядит просто. Открываем файл конфига

mcedit /etc/sysconfig/selinux

меняем значение

SELINUX=disabled

перезагружаемся

reboot

Сделано, теперь нас не будут поджидать сюрпризы в будущем. Скептикам, ратующим за безопасность системы, сразу сообщаю, что наш сервер будет надёжно защищён настройкой firewall (пришёл на смену iptables). В соответствии с функциональным назначением нашего сервера настраиваем firewall, открывая для общего доступа порты 80 и 443:

firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https

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

firewall-cmd --reload

Проверяем, что yum установлен. Если его нет, придётся вручную тащить пакет mirror.centos. org/centos/7/os/x86_64/Packages/ и устанавливать через менеджер пакетов.

Устанавливаем необходимые пакеты, которые непосредственно отвечают за функционирование веб-сервера. В нашем случае это apache, mysql, php (для комплекса LAMP) или nginx, mysql, php (для комплекса LEMP), а возможно, и всё вместе.

Например, установка веб-сервера apache выглядит следующим образом:

yum -y install httpd httpd-devel

Запускаем службу, добавляем в автозагрузку, проверяем результат:

systemctl start httpd.service
systemctl enable httpd.service

Если потребуется перезапустить apache после каких либо настроек (или после установки php), пригодится команда

systemctl restart httpd.service

Привычная утилита setup теперь отсутствует. Убеждаемся, что все службы будут стартовать при запуске системы с помощью systemctl is-enabled служба.

Варианты использования systemctl:

   
Остановка службы systemctl stop httpd.service
Запуск службы systemctl start httpd.service
Перечитать файл конфигурации systemctl reload httpd.service
Перезапуск службы systemctl restart httpd.service
Перезапуск службы, если она уже запущена systemctl try-restart httpd.service
Проверка статуса службы systemctl status httpd.service
Добавить в автозапуск systemctl enable httpd.service
Исключить из автозапуска systemctl disable httpd.service
Проверка присутствия в автозапуске systemctl is-enabled httpd.service
Вывести список служб systemctl list-unit-files --type=service

Устанавливаем PHP.

yum -y install php php-mysql php-common php-gd php-xml php-mbstring

Вариант наиболее полной установки PHP, с расчётом на разворачивание платформ для современных популярных движков Joomla, Wordpress и Drupal, будет выглядеть следующим образом:

yum -y install php php-gd php-mysql php-common php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap curl curl-devel

Если оригинальная версия php не соответствует минимальным требованиям размещаемых сайтов, можно воспользоваться описанной методикой или лучше более прогрессивной методикой.

Устанавливаем и запускаем MySQL.

yum -y install mysql mysql-server
systemctl enable mysqld
systemctl start mysqld

Не забываем задать пароль root для MySQL.

Альтернативный вариант: устанавливаем и запускаем MariaDB:

yum install -y mariadb mariadb-server
systemctl enable mariadb
systemctl start mariadb

Теперь готовимся к отказу от графического интерфейса.

Во всём семействе Red Hat Linux (Fedora, Red Hat, CentOS) используется следующая система уровней выполнения

  • Single-user text mode (without networking)
  • Not used (user-definable)
  • Full multi-user text mode
  • Not used (user-definable)
  • Full multi-user graphical mode (with an X-based login screen)
  • Reboot

Состояние подготовки к выключению кодируется нулём.

Так как перед нами стоит задача развернуть выделенный сервер, наиболее рационально выбрать уровень 3, который является многопользовательским, но не использует графику.

Редактируем

/etc/inittab

Прописываем

id:3:initdefault:

Теперь третий уровень выполнения становится уровнем по умолчанию, именно на нём будет работать система в случае перезапуска.

В любой момент времени проверить текущий уровень можно командой runlevel:

/sbin/runlevel

Теперь дело за малым:

  • Настроить mysql, однако необходимо заметить, что компания Red Hat предпочитает на данный момент альтернативную базу данных MariaDB
  • Настроить высокопроизводительный веб-сервер (например, связку nginx+apache), или оставить только службу httpd
  • Настроить php

Если все шаги выполнены, то у нас всё готово.

Можно клонировать сайты и запускать корабль в плавание.

12 комментарии

  • anonymous

    написал anonymous

    Вторник, 04 Ноябрь 2014 17:32

    Не знал, что теперь надо использовать firewall-cmd. Весь интернет перерыл, но только тут нашёл.

  • Радик

    написал Радик

    Воскресенье, 09 Ноябрь 2014 16:12

    Доброго времени суток!
    Ваша статья меня немного озадачила. Зачем устанавливать и apache, и nginx? И на счет Selinux, на CentOS 6.5 я его не отключал и у меня все нормально подключалось. Чисто любопытства ради сейчас попробую его опять же не трогать, настроить веб-сервер и подключиться файлзилой к серверу...
    ИМХО, вам придется подправить эту статью

  • Владимир Драч

    написал Владимир Драч

    Воскресенье, 09 Ноябрь 2014 16:47

    Здравствуйте!
    На мой взгляд, одновременное использование apache+nginx это очень изящное решение при условии, что хочется использовать производительность и надёжность nginx, но рядовые веб-мастера (плодящие сайты на нашей площадке) не должны заподозрить подвоха.
    Что касается Selinux, наверное, у меня с ним личные счёты. После проблем с FTP я его отключаю на всех системах (Fedora/CentOS), считая, что неприятности от него осязаемы, а польза не очевидна.

  • Viktor

    написал Viktor

    Воскресенье, 12 Апрель 2015 16:50

    Использую VESTA CP, ничего настраивать не нужно... установил и пользуйся...

  • Леонид

    написал Леонид

    Воскресенье, 12 Апрель 2015 20:57

    Viktor, Вы путаете пушистое с кислым. Не смущайте начинающих!

  • андрей

    написал андрей

    Среда, 29 Апрель 2015 16:44

    firewall-cmd -reload
    правильно firewall-cmd --reload

  • Владимир Драч

    написал Владимир Драч

    Пятница, 01 Май 2015 19:13

    Андрей, спасибо!
    Поправил текст.

  • Виктор

    написал Виктор

    Суббота, 20 Июнь 2015 13:05

    # inittab is no longer used when using systemd.
    #
    # ADDING CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.
    #
    # Ctrl-Alt-Delete is handled by /usr/lib/systemd/system/ctrl-alt-del.target
    #
    # systemd uses 'targets' instead of runlevels. By default, there are two main targets:
    #
    # multi-user.target: analogous to runlevel 3
    # graphical.target: analogous to runlevel 5
    #
    # To view current default target, run:
    # systemctl get-default
    #
    # To set a default target, run:
    # systemctl set-default multi-user.target
    #

  • Владимир Драч

    написал Владимир Драч

    Понедельник, 22 Июнь 2015 19:46

    Виктор, тогда пробуйте вот это вариант:
    http://drach.pro/blog/linux/item/99-centos-7-1-perfect-web-server

  • Нариман

    написал Нариман

    Понедельник, 14 Сентябрь 2015 12:45

    Привет, привет, народ, такой вопрос, у меня в локальной сети виден сайт, но когда прописываю айпи, который выделил мне провайдер, через него не заходит, что делать?

  • Владимир Драч

    написал Владимир Драч

    Понедельник, 14 Сентябрь 2015 14:15

    Надо убедиться, что Ваш веб-сервер (Apache, nginx?..) готов отдавать сайт по двум интерфейсам. Проверить с внешнего компьютера доступность Вашего сервера (через ping или traceroute).

  • .config

    написал .config

    Четверг, 22 Октябрь 2015 00:24

    Маршрутизатор надо настроить. Сделать Forwarding 80 порта. И еще про firewall не забудь. А может, надо открыть 80 порт.

Оставить комментарий

Ваше мнение очень важно для нас! Обязательно выскажите Ваши мысли, пожелания и критику! Не стесняйтесь задавать вопросы. Скорее всего, ответ появится уже через 2-3 дня. Спасибо заранее.

Go to top