Fedora — LAMP Web Server (Настройка)

Red Hat Fedora Linux Настройка LAMP сервера

Итак у вас есть Удаленная машина с Red Hat Fedora Linux. Машина свеженькая и абсолютно пустая. Например вы купили VPS или взяли выделенный сервер. Цель: установить и настроить программное обеспечение классического web-сервера LAMP (apache, mysql, PHP).

Мое Решение: Это решение не абсолютная истина, это мой рабочий процесс. Работая по привычной схеме я стараюсь экономить время.

PS: Когда надо выполнить больше одной команды я обычно пишу BASH скрипт, его легко исправить если ошибся и после исправления легко повторить весь цикл команд.

1. Устанавливаем файловый менеджер MC (Midnight Commander)
2. Отключение SELinux
3. Отключение Фаервола
4. Автоматическая корректировка времени
5. Настройка HostName
6. Установка LAMP
7. Рабочие каталоги LAMP

Устанавливаем файловый менеджер MC (Midnight Commander) Fedora — LAMP Web Server (Настройка)

Обычно первым делом ставлю себе Midnight Commander. Это и файловый менеджер и редактор с подсветкой синтаксиса, и распаковщик и управление правами файлов и ... короче удобно и быстро. Я люблю Midnight Commander.

#yum install mc
Отключение SELinux Fedora — LAMP Web Server (Настройка)

Возможно эта утилита зачем то нужна на сервере, но мне она мешает. Потребляет ресурсы сервера и приходится тратить время на ее правильную настройку. Поэтому я ее просто выключаю. Это обязательный шаг.

Если кто-то считает, что эту утилиту нельзя отключать, пришлите мне реальные примеры-алгоритмы взлома системы с отключенным SELinux. Иначе все это пустой треп.

Отключение:

путь /etc/selinux/
файл config
строка SELINUX=disabled
#reboot
Отключение Фаервола Fedora — LAMP Web Server (Настройка)

Классическая проблема — фаервол не даст вам доступ по http к вашим сайтам, если его не отключить. Ниже приведенная команда откроет диалоговое окно. Надо убрать галочку Enabled и нажать кнопку Save.

#system-config-firewall
Автоматическая корректировка времени Fedora — LAMP Web Server (Настройка)

Проблема с некорректным временем на сервере может приводить к ошибкам на некоторых CMS. Например CMS Magento Commerce при неправильном времени на сервере не позволяет добавлять товары в корзину и переходить к процессу заказа, логинится пользователю и админу, выдавая ошибку: Cookies not set. На самом деле Из-за неправильного времени срок действия куки у клиента может оказаться просроченным и ошибка возникнет не только на CMS Magento.

Для установки правильного времени в автоматическом режиме есть сервис NTP.

#yum install ntp
#chkconfig ntpd on
#ntpdate pool.ntp.org
#service ntpd start
Настройка HostName Fedora — LAMP Web Server (Настройка)

Следующая проблема которая может возникнуть, а может и не возникнуть, это проблемы с отсылкой почты. Обычно почта в Linux отправляется командой mail И в PHP есть такая функция mail();. Загвоздка начинается когда клиенты начнут писать, что письма до покупателей или посетителей их сайтов не доходят. Хотя команда mail все также прекрасно работает. А письма растворяются в неизвестном направлении. Это происходит потому, что некоторые почтовые сервисы не только кладут ваши письма в папку spam, но и записывают ваш сервер в черный список спамеров (например CBL ABUSE AT list) за одну маленькую оплошность — дефолтный HostName ("localhost", "localhost.localdomain", and other generic "unconfigured" names.) Следующая команда покажет какое имя сервера у вас:

#hostname
my.clients.vps.server.ru

Если у вас localhost.localdomain, то исправляется это в нескольких местах

путь /etc
файл hosts
добавить строку XXX.XXX.XXX.XXX my.clients.vps.server.ru XXX-XXX-XXX-XXX

Здесь XXX.XXX.XXX.XXX — IP адрес сервера. my.clients.vps.server.ru — меняете на свое имя сервера

Вызовите команду

#hostname my.clients.vps.server.ru

И еще одна фенечка - Имя сервера не должно ни в коем случае совпадать с именем домена какого нибудь сайта на этом сервере. По этой причине почта отправленная утилитой sendmail, для этого домена, будет складываться локально, а почта для других доменов отправляться получателям. Если вы все же столкнулись с этим - поменяйте имя сервера и перезагрузите его.

Установка LAMP Fedora — LAMP Web Server (Настройка)

Для установки LAMP (apache, mysql, php) я заготовил себе небольшой bash скрипт. В него также включена и установка FTP сервера. Но последнее время я FTP не устанавливаю поскольку было несколько примеров непонятным образом скомпрометированных FTP паролей, как следствие заражение сайтов посторонним кодом. Сколько работаю с SSH — никогда такой компрометации не было. Вот этот скрипт.

# Эти строки конкретно для Fedora 16 поскольку в ее сборке MySQL присутсвует баг. 
# Поэтому MySQL устанавливается из стороннего репозитария
rpm -Uvh http://download1.rpmfusion.org/free/fedora/->
->rpmfusion-free-release-stable.noarch.rpm
rpm -Uvh http://download1.rpmfusion.org/nonfree/fedora/->
->rpmfusion-nonfree-release-stable.noarch.rpm
rpm -Uvh http://rpms.famillecollet.com/remi-release-16.rpm
yum --enablerepo=remi list mysql mysql-server
yum --enablerepo=remi install mysql mysql-server
# --== просто для RHEL 6.0 ==--
# закоментируйте предыдущие строки
# раскоментируйте следующую строку
# yum install mysql mysql-server
chkconfig mysqld on

# Для Апача мне нужен SSL модуль для Magento клиентов.
yum install httpd
yum install mod_ssl
chkconfig httpd on

# Здесь установка PHP и необходимых дополнений к PHP
yum install php
yum install php-gd
yum install php-mbstring
yum install php-mysql
yum install php-xml
yum install php-mcrypt

# Это установка FTP сервера 
# в последнее время я избегаю использовать FTP
yum install proftpd
chkconfig proftpd on
mkdir /ftpserv
ln -s /etc/proftpd.conf /ftpserv/proftpd.conf

# Это установка 7zip архиватора
# я его использую для Backup
yum install p7zip

# Эти строки позволят автоматически запускать 
# жизненно важные сервисы
# после перезапуска сервера
/sbin/chkconfig --level 3 httpd on
/sbin/chkconfig --level 3 mysqld on
/sbin/chkconfig --level 3 proftpd on
/sbin/chkconfig --level 3 ntpd on
Рабочие каталоги LAMP Fedora — LAMP Web Server (Настройка)

Я люблю порядок, я не люблю кучу-малу и непонятное нагромождение файлов. Поэтому я разработал для своих серверов некоторую рабочую структуру каталогов, которой и стараюсь придерживаться.

# Это корневая папка веб сервера апаче.
mkdir /www

# Бекапы - без них нельзя!
mkdir /www/BACKUPS

# ежедневные бекапы баз MySQL
mkdir /www/BACKUPS/DB

# недельные бекапы файлов сайтов
mkdir /www/BACKUPS/SITE

# файлы хранящие Хэш сумму файлов каждого сайта
# по крону специальная задача сверяет хеш-суммы
# в случае несовпадения высылается письмо о заражении
# изначальные хеш-суммы генерируются при выкладке сайта на сервер
# файлы на DEVELOP машине считаются не зараженными 
# и их хеш считается верным.
mkdir /www/CRC-FAULT

# Служебные BASH скрипты
# Я не люблю в попыхах вспоминать все Linux команды, 
# а в критические моменты именно так и происходит
# поэтому я сделал для себя эту коллекцию скриптов
# чтобы быстро без шума и пыли решать насущные проблемы.
# также кроме ручного запуска эти скрипты легко запускать из cron-а
mkdir /www/SCRIPTS

# Скрипты для работы с mysql
# Здесь обычно 4 скрипта:
# 1) Ежедневный backup (архивы хранятся за каждый день).
# 2) Удаление старых бекапов — более месяца назад.
# 3) Проверка исправление поврежденных таблиц.
# 4) Восстановление из бекапа
mkdir /www/SCRIPTS/mysql

# Скрипты обслуживания сайтов
# Здесь 2 общих скрипта и персональный каталог для каждого сайта.
# скрипт недельного бекапа (следующий архив затрет предыдущий)
# очистка логов — логи имеют привычку расти и занимать много места.
mkdir /www/SCRIPTS/sites
# В каталоге каждого сайта его персональные скрипты 
# например какой нибудь импорт или экспорт данных
mkdir /www/SCRIPTS/sites/www.mysite1.ru
mkdir /www/SCRIPTS/sites/www.mysite2.ru

# Системные скрипты, это может быть 
# Генерация запроса на SSL сертификат
# Генерация состояния системы, сколько места на диске, load average etc.
# Установка прав на каталоги и прочее прочее прочее...
mkdir /www/SCRIPTS/system

# каталог сайтов
mkdir /www/sites

# если сайт целиком на одном домене и не имеет поддоменов
mkdir /www/sites/www.one-domain-site.ru

# если сайт имеет много поддомененов
mkdir /www/sites/multy-domain-site.ru
mkdir /www/sites/multy-domain-site.ru/www
mkdir /www/sites/multy-domain-site.ru/img
mkdir /www/sites/multy-domain-site.ru/demo
mkdir /www/sites/multy-domain-site.ru/etc

# каталог загрузок
# сюда я загружаю по SSH сначала zip архив с файлами
# потом с помощью Midnight Commander распаковываю и раскладываю 
# файлы по целевым каталогам.
mkdir /www/UPLOAD