Сразу скажу я не специалист по Linux, начал изучать Linux только потому что аренда серверов под Windows в разы дороже, то есть как ни крути Linux это просто выгодно, а еще как оказалось в некоторых моментах и попроще чем Windows.
Статья написана как полное руководство по одному из возможных вариантов настройки веб сервера на CentOS от начала и до конца, со всеми подводными камнями, на устранение которых человеку не знакомому с Linux, может понадобиться много времени. Сервер предполагается на Apache+PHP+Postgres, кому нужна MySQL без труда смогут найти руководство в интернете, Postgres все таки менее популярен, а поэтому чуть посложнее. Кроме возможной пользы для других, планирую и сам пользоваться своим руководством чтобы вспомнить моменты которые напрягли при настройки CentOS и быстро разворачивать сервера на CentOS по мере необходимости, поэтому любые и советы и дополнения приветствуются!
Почему CentOS ?, тут тоже все просто так как я не работал ни с одной версией Linux, выбирал лучшую из доступных под мои требования, а требования простые раз это сервер, то нужна максимальная стабильность ну и бесплатность, а CentOS это операционная система корпоративного класса созданная на основе платной Red Hat Linux и в отличии от Fedora без всяких экспериментов только проверенные и надежные технологии от Red Hat.
Несмотря на заявленную стабильность, советую начинать изучение CentOS на локальном компе в виртуальной машине, и в качестве виртуальной машины советую Virtual Box, потому что в любимой мной VMware Workstation, CentOS умудрилась вызвать зависание всей VMware, которое я за много лет пользования VMware вообще никогда не видел и еще CentOS почему то не ставиться на VMware Workstation 9 в минимальной конфигурации, а именно в этой конфигурации (то есть просто доступ к командной строке, без всяких графических оболочек) в идеале использовать CentOS на удаленном сервере, так же с VMware возникли проблемы с установкой 64-битной версии CentOS 6.4. Конечно я уверен что все эти проблемы с VMware решаемы, но как то не хотелось разбираться еще и в этом, когда изучение самой ОС намного интереснее, просто имейте ввиду при прочих равных лучше начать изучение в Virtual Box.
Итак начнем:
Для начала советую ставить CentOS с графическим интерефейсом, дистрибутив легко отличить по самому большому размеру, основную работу все равно придется делать в окне терминала, но привычный вид рабочего стола поможет легче пережить шок от того что можно работать и без графики.
После установки CentOS и создания пользователя например Test, входить в систему нужно под пользователем root, а пароль вводить от пользователя Test, root это администратор системы и только под ним можно сделать все то что нужно для настройки нашего сервака, странная логика но это нужно знать.
Так же можно зайти под Test и ввести
# su root
в итоге все будете делать под root, этот способ так же более безопасен
спасибо Falcon_peregrinus за совет
После того как логин прошел успешно, нужно открыть окно терминала в графической версии CentOS, либо просто начать писать команды в командную строку в минимальной версии CentOS.
Для начала сделаем обновление системы. Просто напишем в терминале:
# yum update
и нажмем enter
Знак # писать не нужно, я просто написал его чтобы было понятно что это команда для терминала CentOS.
После yum update если у вас есть соединение с интернетом, пойдет обновление всей системы из официального репозитория CentOS. Чем мне сразу понравилась CentOS в сравнении с Windows это наличие такого репозитория, где собрано куча оттестированного софта для вашей системы. Конечно пользоваться им только из окна терминала не так удобно как могло бы быть, но в случае сервера, софта будет не много и этого более чем достаточно.
Сеть
Если у вас все таки какие то проблемы с интернетом на CentOS то опишу как настроить сетевой адаптер.
Набираем в терминале команду
# ifconfig
Не ipconfig, а именно if
В результате нам покажут все сетевые интерфейсы которые есть на CentOS. Чтобы был интернет в списке доступных интерфейсов кроме lo(то есть локальный), должен быть хотя бы один адаптер eth, например eth0.
Если нет ни одного eth, вводим
# ifconfig eth0 up
После чего вводим опять ifconfig и проверяем, eth0 должен появиться.
Если интернета все равно нет, то открываем настройки eth0
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
vi это текстовый редактор чтобы начать редактировать нужно нажать клавишу i внизу появится надпись INSERT, чтобы выйти из режима редактирования нажимаем ESC. После чего пишем :wq что значит сохранить и выйти(:q! чтобы выйти не сохраняясь). Как именно редактировать файл настроек сетевого адаптера eth0 это вам виднее, единственное скажу что нужно поставить ONBOOT=”yes”, чтобы сетевой адаптер загружался автоматически. Мне этот параметр помог наконец получить IP адрес от моего роутера по DHCP по другому почему то не получилось. Еще скажу что для настройки сети есть графическая прога вызвать которую можно командой
system-config-network
Но в ней нельзя настроить параметр ONBOOT=”yes”, да и вообще по моему в обычном файле как то удобнее.
Да и в минимальной конфигурации CentOS эту прогу еще нужно поставить из репозитория.
Apache
Когда мы обновили систему, а значит не имеем проблем с интернетом в нашей ОС, можно переходить к настройке сервака.
Сначала поставим веб сервер.
# yum -y install httpd
-y значит что установщик нажмет yes если такое потребуется, можно запустить и просто
# yum install httpd
Но тогда нажимать y придется самим.
Добавим апачи в автозагрузку
# chkconfig httpd on
И запустим
# service httpd start
Если появиться ОК значит все прошло хорошо.
PHP
Теперь поставим php
# yum install php
Сделаем файл для проверки
# echo '<?php phpinfo(); ?>' > /var/www/html/test.php
Перегрузим Apache
# service httpd restart
Смотрим по адресу IP-адрес_сервера/test.php информацию о php, если она есть значит все хорошо.
Postgres
Теперь с установкой Postgres сделаем немного посложнее. В официальном репозитории CentOS, находиться старая версия Postgres 8.3, по опыту работы с postgres скажу что у меня с ней были проблемы, поэтому советую ставить более новую версию.
Оригинальное руководство на английском тут
Для начала выключаем SELinux
# vi /etc/sysconfig/selinux
И устанавливаем переменную SELinux=disabled
SELinux это система контроля доступа в Linux, она помешала мне соединиться с Postgres, в оригинальном английском руководстве об этом ни слова.
Уже после написания статьи настраивал CentOS на другом сервере и соеденения с Postgres прошли нормально и без выключения SELinux, поэтому просто имейте ввиду если Postgres не работает возможно дело в SELinux.
Теперь скачаем данные о репозитории Postgres с официального сайта.
# wget http://yum.pgrpms.org/9.2/redhat/rhel-6-x86_64/pgdg-centos92-9.2-6.noarch.rpm
Если ничего не качает установите прогу wget (yum install wget)
Устанавливаем репозиторий чтобы можно было поставить Postgres через yum
# rpm -ivh pgdg-centos92-9.2-6.noarch.rpm
После чего ставим клиент сервер для Postgres
# yum install postgresql92 postgresql92-server
нажимая Y там где это нужно
Инициализируем БД
# service postgresql-9.2 initdb
И стартуем
# service postgresql-9.2 start
добавим Postgres в автозагрузку
# chkconfig postgresql-9.2 on
Теперь нужно создать пользователя для Postgres
# su postgres
# psql -dpostgres
должна появится надпись postgres=# вначале строки, значит мы залогинены под этим пользователем в БД.
После чего создаем супер пользователя и пароль
# CREATE role opensourcedbms LOGIN PASSWORD 'opensourcedbms' SUPERUSER;
После чего выходим
# \q
Теперь нужно сделать стандартные настройки Postgres
# vi /var/lib/pgsql/9.2/data/postgresql.conf
Расскоментируем строку #listen_addresses = ‘localhost’ и изменим ее на #listen_addresses = ‘*’
И настроим файл pg_hba.conf
# vi /var/lib/pgsql/9.2/data/pg_hba.conf
Я для проверки работы БД оставляю раскомментированными такие строки
Host all all 0.0.0.0/0 trust
Host all all ::1/128 trust
То есть коннект принимается с любых адресов и без пароля, потом не забудьте это исправить.
После настройки советую изменить trust на md5, пускать только локальные подключения к базе и в виде исключения прописать ваш IP адрес с которого можно подключатся к базе и удаленно, если IP динамический и нужно прямое подключение к базе то оставьте 0.0.0.0/0
После чего
# service postgresql-9.2 restart
И если у вас запущем фаервол нужно добавить в него такую запись
# vi /etc/sysconfig/iptables
-A INPUT -m state —state NEW -m tcp -p tcp —dport 5432 -j ACCEPT
Хотя я для начала советую просто сделать
# service iptables stop
Чтобы выключить его совсем.
После чего можно пробовать подключатся к базе данных из установленного не в CentOS, pgAdmin. Можно конечно поставить pgAdmin и в саму CentOS, но я думаю это лишнее, тем более для этого обязательно нужен графический интерфейс.
В случае каких то проблем для начала перезапустите все сервисы или вообще весь сервер, возможно где то забыли это сделать и изменения еще не вступили в силу.
Теперь осталось только связать Postgres c PHP
# yum install php-pgsql
после чего перезапускаем веб сервер и базу данных
# service httpd restart
# service postgresql-9.2 restart
И в нашем файле test.php который мы создали ранее должна появиться информация о Postgres.
FTP
Теперь поставим FTP для доступа к файлам на нашем сервере.
# yum install vsftpd
# chkconfig vsftpd on
# service vsftpd start
Думаю эти три строчки понятны, я расскажу о том как создать пользователя для фтп и назначить ему папку не по умолчанию, именно назначение папки почему то неправильно описано в статьях что я читал по настройке vsftpd.
# adduser ftpuser1
# passwd ftpuser1
Создаем пользователя и пароль.
Открываем файл со всеми пользователями CentOS
# vi /etc/passwd
Находим там ftpuser1 и меняем там папку на свое усмотрение
После чего перезагружаем vsftpd и проверяем.
Смена стандартной папки для ftp пользователя мне например пригодилась чтобы заливать файлы по ftp сразу в директорию вебсервера
Конфигурация vsftpd находиться в /etc/vsftpd.conf, описывать не буду у каждого она индивидуальная но по умолчанию все работает.
Можно только сразу выключить доступ анонимов по ftp
anonymous_enable:no
Графика
Теперь хотелось бы сказать как поставить графический интерфейс на CentOS, если у вас такого нет.
#yum groupinstall «X Window System» «Desktop» «Desktop Platform» «Fonts»
И запуск
# startx
Чтобы выйти из графического интерфейса наберите
# telinit 3
Обратите внимание команда с пробелом!
По поводу доступа к графическому интерфейсу на удаленном сервере(на своей локальной виртуалке такой доступ не нужен) могу просто посоветовать использовать xrdp, по информации в интеренете этот доступ наиболее стабильный и быстрый, мне установили по требованию на мой хостинг и я не стал разбираться с установкой, потому что для настройки сервера вполне хватает обычной консоли которую можно получить в программе PuTTY. Я даже удивился как может быть удобна консоль советую просто попробовать, для сервака самое то, доступ к рабочему столу обычно тормозит и это раздражает, но даже если бы все было как на локальном компьютере я бы тоже использовал консоль. Графика очень полезна для начального изучения что и как, но когда быстро надо настроить сервак консоль просто лучше.
Дополнительные мелкие полезности, планирую обновлять:
# yum search file_name
Поиск файла в репозитории CentOS
# find /* -iname 'file_name'
Поиск расположения файла на локальном компьютере
# ls
# ls –l
Показывает содержание текущего каталога
# system-config-firewall
фаервол в графике можно удобно поставить галки на те сервисы которым разрешено выходить в интернет, иногда требуется установка из репозитория.