Установка 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 в каждом сайте. Иначе вместо кастомной страницы будет отображаться просто сообщение File Not Found.

Редактируем файл /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. Все права защищены.