Установка LAMP на CentOS

По шагам разбираем установку Linux, Apache, MySQL и PHP (LAMP) на виртуальный сервер CentOS.

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

Статья создана на основе руководства по установке и конфигурированию производительных серверов.

К этому моменту мы предполагаем, что вы уже установили CentOS на виртуальную машину и получили к ней доступ по SSH.

Дальнейшая установка позволит вам получить современный сервер Apache, который поддерживает HTTP2 и настроен на работу с PHP-FPM.

В качестве базы данных будет использована MariaDB, которая уже стала негласным стандартом после приобретения MySQL компанией Oracle. Она ничем не отличается от MySQL и разрабатывается создателем этой базы данных под свободной лицензией.

Есть два варианта установки:

  1. Короткий и простой, но без комментариев и понимания что делаем.
  2. Длинный, ручками, с объяснением каждого шага.

1. Способ - Простой. За вас все делает скрипт.

  1. Скачиваем скрипт установки c сайта hika.su вот такой командой и следуем его указаниям:
    wget https://hika.su/ri.sh && chmod u+x ri.sh && ./ri.sh
  2. Дожидаемся установки всех пакетов и если того потребует скрипт, выполняем reboot.
  3. После перезагрузки снова запускаем скрипт командой ./ri.sh и внимательно следим за установкой и подсказками скрипта.

Можно также поставить файл mc.menu вместо стандартного. Это позволит удобно управлять сервером:

cd /etc/mc
mv /etc/mc/mc.menu /etc/mc/mc.menu.old
wget https://hika.su/mc.menu

На этом все - конфигурирование сервера завершено.

2. Способ - Ручной. Делаем всю установку самостоятельно

Начало установки

Начинаем с обновления установленной системы CentOS.

yum update

Устанавливаем любимый файловый менеджер Midnight Commander:

yum install mc

После обновления нужно проверить - выключен ли SELinux? На виртуальной машине VMware скорее всего он был включен. Команда sestatus показывает включен ли SELinux. Если включен - надо его отключить. В файле /etc/sysconfig/selinux найти строку и установить параметр:

SELINUX=disabled

Устанавливаем локаль utf-8, чтобы корректно отображался русский шрифт и различные специальные символы (в частности те, которые используются mc).

localectl set-locale LANG=en_US.UTF-8

На случай если подключение будет через локаль Windows и если локали не совпадут - то все переключится на ANSI кодировку. Локали должны совпадать. Поэтому убедитесь, что локаль вашей Windows системы совпадает с локалью на сервере (по умолчанию в Windows включается русская локаль).

Устанавливаем (или убеждаемся что они уже установлены) программы cronie и logrotate:

yum install cronie
yum install logrotate

Устанавливаем репозитарий EPEL. Полностью EPEL репозиторий называется так — Extra Packages for Enterprise Linux. Это хранилище пакетов, созданное группой специалистов операционной системы Fedora. Пакеты из EPEL репозитория никогда не конфликтуют и не переустанавливают базовые пакеты RHEL.

yum install epel-release

Установка Apache

Теперь установим репозитарий CodeIT для получения последних версий Apache:

cd /etc/yum.repos.d
wget https://repo.codeit.guru/codeit.el`rpm -q --qf "%{VERSION}" $(rpm -q --whatprovides redhat-release)`.repo
yum install httpd mod_ssl
systemctl enable httpd
systemctl start httpd

Если у вас установлен Firewall - конфигурируем его для открытия портов веб-сервера:

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

Делаем рестарт веб-сервера:

systemctl restart httpd

На случай если получаем сообщение по типу

httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1 for ServerName

при перезапуске httpd, то идем в файл /etc/httpd/conf/httpd.conf и ищем вот эти строки:

# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
ServerName пишем сюда IP адрес сервера

Установка PHP

Для установки новой версии php в CentOS приходится использовать сторонний репозиторий. Если устанавливать через репозиторий Remi, то инструкция такая:

wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7*.rpm
yum install yum-utils

Выбираем какую версию PHP будем устанавливать (в нашем случае PHP 7.3):

yum-config-manager --enable remi-php73
yum install php-fpm php-opcache php-cli php-gd php-mbstring php-mcrypt php-mysqlnd php-xml php-soap php-xmlrpc php-pecl-zip php-pecl-xdebug

Cоздаем файл /etc/httpd/conf.d/php.conf со следующим содержимым:

# Tell the PHP interpreter to handle files with a .php extension.
# Proxy declaration
<Proxy "unix:/var/run/php-fpm/default.sock|fcgi://php-fpm">
# we must declare a parameter in here (doesn't matter which) or it'll not register the proxy ahead of time
  ProxySet disablereuse=on connectiontimeout=3 timeout=60
</Proxy>
# Redirect to the proxy
<FilesMatch \.php$>
  SetHandler proxy:fcgi://php-fpm
</FilesMatch>
#
# Allow php to handle Multiviews
#
AddType text/html .php
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php
#
#<LocationMatch /status>
#  SetHandler proxy:fcgi://php-fpm
#</LocationMatch>
#ProxyErrorOverride on

Директива ProxyErrorOverride on нужна для нормальной работы кастомных ошибок, которые настраиваются через htaccess в каждом сайте с помощью директивы ErrorDocument 404. Нужно учитывать, что в этом случае вместо 500 ошибок так же будет выводиться кастомная страница или стандартное сообщение об ошибке Apache. Если для написания сайта используется php фреймворк (например Laravel или Joomla) лучше оставить директиву ProxyErrorOverride отключенной – иначе сайт может работать неверно (например не будет работать перевод сайта в offline). Связано это с действием директив php throw. В том случае, если вы пишите сайт на голом php – возможно включение этой директивы поможет вам в работе. Ее можно включить на уровне виртуальных хостов (и это самый лучший способ так сделать).

Редактируем файл /etc/php-fpm.d/www.conf - находим строку:

listen = 127.0.0.1:9000

и заменяем ее на:

listen = /var/run/php-fpm/default.sock
listen.allowed_clients = 127.0.0.1
listen.owner = apache
listen.group = apache
listen.mode = 0660
user = apache
group = apache

Если вы хотите чтобы в Apache логи PHP-FPM разбивались индивидуально по сайтам, а не писались в один файл, необходимо закомментировать еще две строки в этом же файле /etc/php-fpm.d/www.conf :

;php_admin_value[error_log] = /var/log/php-fpm/www-error.log
;php_admin_flag[log_errors] = on

Если есть экзотическое желание заставить работать страницы .html как .php (чтобы в них могли исполняться PHP скрипты), то придется исправить еще одну строку в этом файле:

security.limit_extensions = .php .html

Здесь мы добавляем расширение .html для того, чтобы в нем могли исполняться PHP скрипты.

Директории для сессий при установке PHP могут быть не созданы. Проверьте в конце файла наличие строк:

php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache

Если необходимо, создайте эти директории :

mkdir /var/lib/php/session
mkdir /var/lib/php/wsdlcache

Проверим что конфигурационный файл PHP-FPM корректен:

php-fpm -t

Теперь перезапускаем сервис php-fpm и делаем его автоматически запускаемым:

systemctl enable php-fpm systemctl start php-fpm

Не забудьте изменить ограничение на загрузку файлов в 2M. В файле

/etc/php.ini найдите эти параметры и исправьте на приведенные значения (или на те, которые вас устроят):

memory_limit = 256M
upload_max_filesize = 32M
post_max_size = 32M

Установка MariaDB вместо MySQL

Выполняем команды:

cd /etc/yum.repos.d/
echo "# MariaDB 10.3 CentOS repository list - created 2018-10-22 16:03 UTC" > MariaDB.repo
echo "# https://downloads.mariadb.org/mariadb/repositories" >> MariaDB.repo
echo "[mariadb]" >> MariaDB.repo
echo "name = MariaDB" >> MariaDB.repo
echo "baseurl = https://yum.mariadb.org/10.3/centos7-amd64" >> MariaDB.repo
echo "gpgkey = https://yum.mariadb.org/RPM-GPG-KEY-MariaDB" >> MariaDB.repo
echo "gpgcheck = 1" >> MariaDB.repo
yum install MariaDB-server MariaDB-client
systemctl start mariadb
systemctl enable mariadb

Запускаем команду:

mysql_secure_installation

Когда будет задан вопрос о root пароле, то устанавливаем его. В качестве ответа на остальные вопросы просто жмем Enter.

В конфигурационном файле /etc/my.cnf.d/server.cnf в разделе [mysqld] раскомментируем строку bind-address и задаем значение 127.0.0.1:

bind-address=127.0.0.1

В файл .bashrc (расположен в домашней папке) добавляем строку в конце:

export EDITOR=mcedit

Также добавляем строку с паролем MariaDB:

export MYSQLPASS=ваш_пароль

Завершение установки

yum install unzip

Настраиваем локальное время (например, Московское):

mv /etc/localtime /etc/localtime.bak
ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Генерируем самоподписанный сертификат SSL на 10 лет:

openssl req -new -days 3650 -x509 -nodes -out /etc/pki/tls/certs/localhost.crt -keyout /etc/pki/tls/private/localhost.key

Указываем только страну, остальное Enter.

Для удобного управления сервером можно использовать созданные заранее скрипты для MC.

Загрузить их можно с сайта hika.su командой:

cd /etc/mc && mv mc.menu mc.menu.old && wget https://hika.su/mc.menu

На этом можно считать конфигурацию завершенной.

Создание сайта

Если вы установили скрипты для MC, то для того, чтобы создать сайт, создаем папку в директории /var/www/html с именем сайта (например joomla.test), затем наводим на нее куросор в MC и нажимаем F2.

Появится меню с выбором возможных действий:

  1. С помощью стрелок выбираем пункт меню создать сайт по имени папки (можно воспользоваться клавиатурой и просто нажать цифру 2).
  2. Выбираем пункт меню coздaть бaзy mysql пo имени папки (можно просто нажать цифру 3) – скрипт создаст базу данных с таким же названием как и сайт.
  3. Выбираем пункт меню скачать Joomla в папку (можно просто нажать j) - автоматически загружается последняя стабильная версия Joomla 3.x.
  4. Нажимаем нa установить владельцем apache. Не забываем сделать рестарт сервера Apache. До тех пор пока вы этого не сделаете - сайт не будет доступен.
  5. Прописываем в Windows файле hosts наш сайт. Путь к файлу hosts на Windows машине следующий:
    C:\Windows\System32\drivers\etc

    Файл необходимо открыть от имени администратора и добавить строку:

    IP адрес виртуальной машины joomla.test

    Например так:

    192.168.0.3 joomla.test
  6. Теперь открываем в обозревателе адрес joomla.test - мы должны увидеть страницу установки Joomla.

Для корректной работы скриптов требуется установленная в файле .bashrc переменная с root паролем от базы MariaDB.

© 2019 BinaryCraft. Все права защищены.