Установка LAMP на CentOS
По шагам разбираем установку Linux, Apache, MySQL и PHP (LAMP) на виртуальный сервер CentOS.
Оглавление
Стек LAMP мы будем использовать в качестве среды разработки, тестирования и отладки, при этом работать он будет на стандартном для большинства хостингов дистрибутиве - CentOS.
Статья создана на основе руководства по установке и конфигурированию производительных серверов.
К этому моменту мы предполагаем, что вы уже установили CentOS на виртуальную машину и получили к ней доступ по SSH.
Дальнейшая установка позволит вам получить современный сервер Apache, который поддерживает HTTP2 и настроен на работу с PHP-FPM.
В качестве базы данных будет использована MariaDB, которая уже стала негласным стандартом после приобретения MySQL компанией Oracle. Она ничем не отличается от MySQL и разрабатывается создателем этой базы данных под свободной лицензией.
Есть два варианта установки:
- Короткий и простой, но без комментариев и понимания что делаем.
- Длинный, ручками, с объяснением каждого шага.
1. Способ - Простой. За вас все делает скрипт.
- Скачиваем скрипт установки c сайта hika.su вот такой командой и следуем его указаниям:
wget https://hika.su/ri.sh && chmod u+x ri.sh && ./ri.sh
- Дожидаемся установки всех пакетов и если того потребует скрипт, выполняем reboot.
- После перезагрузки снова запускаем скрипт командой ./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.
Появится меню с выбором возможных действий:
- С помощью стрелок выбираем пункт меню создать сайт по имени папки (можно воспользоваться клавиатурой и просто нажать цифру 2).
- Выбираем пункт меню coздaть бaзy mysql пo имени папки (можно просто нажать цифру 3) – скрипт создаст базу данных с таким же названием как и сайт.
- Выбираем пункт меню скачать Joomla в папку (можно просто нажать j) - автоматически загружается последняя стабильная версия Joomla 3.x.
- Нажимаем нa установить владельцем apache. Не забываем сделать рестарт сервера Apache. До тех пор пока вы этого не сделаете - сайт не будет доступен.
- Прописываем в Windows файле hosts наш сайт. Путь к файлу hosts на Windows машине следующий:
C:\Windows\System32\drivers\etc
Файл необходимо открыть от имени администратора и добавить строку:
IP адрес виртуальной машины joomla.test
Например так:
192.168.0.3 joomla.test
- Теперь открываем в обозревателе адрес joomla.test - мы должны увидеть страницу установки Joomla.
Для корректной работы скриптов требуется установленная в файле .bashrc переменная с root паролем от базы MariaDB.
- Последнее обновление: .