Как установить linux, nginx, mysql, php (lemp) в ubuntu 16.04/18.04

Установка php-fpm на CentOS 7

Устанавливаем php-fpm и некоторые модули, которые скорее всего пригодятся в дальнейшей работе:

# yum install -y php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap

Так же я предлагаю установить APC — бесплатный и открытый кэшер кода PHP, который кэширует и оптимизирует промежуточный код PHP, ускоряя его исполнение. Установим APC из хранилища PHPpecl. Для того, чтобы скомпилировать пакет APC нужно установить Centos Development tools.

# yum install -y php-devel
# yum groupinstall 'Development Tools'

Компилируем APC:

# pecl install apc

На все вопросы просто жмем enter, выбирая параметры по-умолчанию.

Теперь отредактируем /etc/php.ini как нам рекомендует инсталлятор:

# mcedit /etc/php.ini

Задаем параметр cgi.fix_pathinfo=0 и добавляем в конце строку extension=apc.so
Заодно установим сразу же часовой пояс: date.timezone = «Europe/Moscow»

Создадим файл настроек APC:

# mcedit /etc/php.d/apc.ini
extension = apc.so
apc.enabled = 1
apc.cache_by_default = 1
apc.ttl = 7200
apc.shm_size = 64M
apc.max_file_size = 4M
apc.stat = 1

Добавляем php-fpm в автозагрузку:

# systemctl enable php-fpm.service
ln -s '/usr/lib/systemd/system/php-fpm.service' '/etc/systemd/system/multi-user.target.wants/php-fpm.service'

И запускаем:

# systemctl start php-fpm.service

Проверяем:

# netstat -tulpn | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 2907/php-fpm: maste

Step 1 — Changing the Multi-Processing Module

You’ll begin by looking for the pre-fork directive in the file. This is the main configuration file for Apache HTTP in which you can enable and disable modules. You can edit and set directives such as the listening port where Apache HTTP will serve content or the location of the content to display in this file.

To make these changes, you’ll use the , number line, program, with the flag to count and number lines so that nothing is mismatched at a later stage. Combined with this command will first count all the lines in the file specified in the path, and once finished, it will search for the string of characters you’re looking for.

Run the following command so that the program will process and number the lines in . Then, will process the output by searching for the given string of characters :

As output you’ll see something similar to:

Let’s edit line 67 with your text editor. In this tutorial, you’ll use , which is the default editor on FreeBSD:

Append a symbol at the beginning of the line so this line is commented out, like so:

/usr/local/etc/apache24/httpd.conf

By appending the symbol you’ve disabled the pre-fork MPM module.

Now you’ll find the event directive in the same file.

You’ll see output similar to the following:

Now you’ll remove the symbol in line 66 to enable the Event MPM:

The directive will now read as follows:

/usr/local/etc/apache24/httpd.conf

Now that you’ve switched the configuration from the MPM pre-fork to event, you can remove the package connecting the PHP processor to Apache HTTP, since it is no longer necessary and will interfere if it remains on the system:

Make sure the configuration is correct by running the following command to test:

If you see in your output, you can restart the Apache HTTP server:

Note: If there are other running HTTP connections on your server a graceful restart is recommended instead of a regular restart. This will ensure that users are not pushed out, losing their connection:

You’ve switched the MPM from pre-fork to event and removed the module connection PHP to Apache HTTP. In the next step you’ll install the PHP-FPM module and configure Apache HTTP so that it can communicate with PHP more quickly.

Установка php-fpm 7.1

Установка и настройка 7-й версии php на centos не очень простая задача. Ранее я уже рассказывал как обновить php до 7-й версии, но в итоге откатился назад. Прошло прилично времени и откатываться уже не будем, так как большинство проблем исправлены.

Вторая проблема в том, что надо определить, какой репозиторий использовать для установки php7. Их существует очень много. К примеру, мой хороший знакомый в своей статье по настройке web сервера использует репозиторий Webtatic. В принципе, чтобы просто поставить php 7-й версии это нормальный вариант. Но если вы после этого захотите установить phpmyadmin через yum уже ничего не получится. Будет ошибка зависимостей, которые нужно будет как-то руками разбирать.

То же самое будет и с другими пакетами. К примеру, zabbix без плясок с бубнами скорее всего не встанет. В сторонних репозиториях есть еще одна проблема. Иногда они закрываются. И это станет для вас большой проблемой на боевом сервере. Так что к выбору репозитория нужно подходить очень аккуратно и внимательно. Я до сих пор иногда встречаю настроенные сервера centos 5 с очень популярным в прошлом репозиторием centos.alt.ru, который закрылся. Сейчас это уже не так актуально, так как таких серверов осталось мало, но некоторое время назад мне это доставляло серьезные неудобства.

Для установки свежей версии php я буду использовать репозиторий Remi. Это известный и популярный репозиторий, который ведет сотрудник RedHat. И хотя надежность репозитория, который ведет один человек не так высока, но ничего лучше и надежнее remi лично я не нашел для своих целей. Если вы можете что-то посоветовать на этот счет — комментарии в вашем распоряжении. Буду благодарен за дельный совет.

Подключаем remi репозиторий для centos 7.

# rpm -Uhv http://rpms.remirepo.net/enterprise/remi-release-7.rpm

Я получил ошибку:

Retrieving http://rpms.remirepo.net/enterprise/remi-release-7.rpm
warning: /var/tmp/rpm-tmp.nwcDV1: Header V4 DSA/SHA1 Signature, key ID 00f97f56: NOKEY
error: Failed dependencies: 
       epel-release = 7 is needed by remi-release-7.3-2.el7.remi.noarch

Тут все понятно, нужен репозиторий epel. Те, кто готовили сервер по моей статье по базовой настройке сервера его уже подключили, а те кто не делали этого, подключают сейчас:

# yum install epel-release

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

# yum repolist

У меня такая картинка получилась.

Активируем репу remi-php71, для этого выполняем команду:

# yum-config-manager --enable remi-php71

Если получаете ошибку:

bash: yum-config-manager: command not found

то установите пакет yum-utils.

# yum install yum-utils

Теперь устанавливаем php7.1.

# yum install php71

Установим php-fpm и наиболее популярные модули, которые могут пригодится в процессе эксплуатации веб сервера.

# yum install php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-opcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip

Запускаем php-fpm и добавляем в автозагрузку.

# systemctl start php-fpm
# systemctl enable php-fpm

Проверяем, запустился ли он.

# netstat -tulpn | grep php-fpm
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 9084/php-fpm: maste

Все в порядке, повис на порту 9000. Запустим его через unix сокет. Для этого открываем конфиг /etc/php-fpm.d/www.conf и комментируем строку:

;listen = 127.0.0.1:9000

Вместо нее добавляем несколько других:

listen = /var/run/php-fpm/php-fpm.sock
listen.mode = 0660
listen.owner = nginx
listen.group = nginx

Заодно измените пользователя, от которого будет работать php-fpm. Вместо apache укажите nginx.

user = nginx
group = nginx

Перезапускаем php-fpm.

# systemctl restart php-fpm

Проверяем, стартовал ли указанный сокет.

# ll /var/run/php-fpm/php-fpm.sock 
srw-rw----. 1 nginx nginx 0 Oct 26 18:08 /var/run/php-fpm/php-fpm.sock

На текущий момент с настройкой php-fpm закончили, двигаемся дальше.

Для того, чтобы проверить работу нашего веб сервера, нужно установить ssl сертификаты. Без них nginx с текущим конфигом не запустится. Исправляем это.

Apache (httpd)

Несмотря на то, что мы установили и настроили PHP-FPM, Apache нам понадобится, как минимум, по двум причинам. Во-первых, многие сайты используют файл .htaccess, который читает только Apache. Во-вторых, последний включает большое число модулей, которые может использовать портал.

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

И так, устанавливаем httpd:

yum install httpd

Заходим в настройки:

vi /etc/httpd/conf/httpd.conf

И редактируем следующее:

Listen 8080

* наш веб-сервер будет слушать на порту 8080, так как на 80 уже работает NGINX.

<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

* если не указан конкретный скрипт, сначала веб-сервер пытается найти и запустить index.php, затем index.html

Добавляем:

<Directory /var/www/*/www>
    AllowOverride All
    Options Indexes ExecCGI FollowSymLinks
    Require all granted
</Directory>

* где Directory — разрешенные каталоги для запуска из apache; Options — разрешенные опции; Require — с каких IP-адресов можно открывать сайты, определенные в данном каталоге. Итого, мы разрешаем все каталоги в /var/www, но только если следующий каталог будет www; разрешаем опции Indexes (возвращает список файлов, если нет индексного файла, например, index.php), ExecCGI (разрешены сценарии CGI), FollowSymLinks (включены символические ссылки в этом каталоге); доступ для данных каталого разрешен со всех адресов (all granted).

Проверяем синтаксис конфигурационного файла httpd:

apachectl configtest

Разрешаем автозапуск и запускаем службу:

systemctl enable httpd

systemctl start httpd

Создаем php-файл со следующим содержимым:

vi /var/www/html/index.php

<?php phpinfo(); ?>

Открываем браузер и вводим в адресную строку IP-адрес нашего сервера и добавляем :8080. Мы должны увидеть привычную страницу:

NGINX + Apache

Ранее нами была настроена связка nginx + php-fpm. Теперь проверяем совместную работу первого с apache.

Открываем конфигурационный файл nginx:

vi /etc/nginx/conf.d/default.conf

* если при настройке nginx мы редактировали файл /etc/nginx/nginx.conf, то необходимо открыть его.

Находим наш настроенный location для php-fpm:


    location ~ \.php$ {
            fastcgi_pass unix:/run/php-fpm/www.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
            include fastcgi_params;
            fastcgi_param DOCUMENT_ROOT $root_path;
    }

и меняем на:


    location ~ \.php$ {
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect     off;
        proxy_set_header   Host             $host;
        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   X-Real-IP        $remote_addr;
        proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
    }

Проверяем и перезапускаем nginx:

nginx -t

systemctl restart nginx

Пробуем открыть в браузере IP-адрес нашего сервера — должна открыться та же страница, что при проверке Apache (с добавлением 8080):

Apache Real IP

Так как все запросы на httpd приходят от NGINX, они воспринимаются как от IP-адреса 127.0.0.1. На практике, это может привести к проблемам, так как некоторым сайтам необходимы реальные адреса посетителей.

Для решения проблемы будем использовать модуль mod_rpaf. Устанавливаем набор разработчика для apache:

yum install httpd-devel gcc unzip

Переходим в каталог /usr/local/src:

cd /usr/local/src

Скачиваем модуль:

wget https://github.com/gnif/mod_rpaf/archive/stable.zip

Распаковываем его:

unzip stable.zip

Переходим в распакованный каталог:

cd mod_rpaf-stable/

Собираем модуль и устанавливаем его:

make

make install

* при возникновении ошибки ./apxs.sh: line 15: -c: command not found, необходимо поставить which командой yum install which.

Создаем конфигурационный файл со следующим содержимым:

vi /etc/httpd/conf.d/mod_rpaf.conf

LoadModule              rpaf_module modules/mod_rpaf.so
RPAF_Enable             On
RPAF_ProxyIPs           127.0.0.1
RPAF_SetHostName        On
RPAF_SetHTTPS           On
RPAF_SetPort            On
RPAF_ForbidIfNotProxy   Off

Перезапускаем httpd:

systemctl restart httpd

Для проверки настройки открываем на редактирование созданный index-файл для httpd:

vi /var/www/html/index.php

И редактируем содержимое на:

<?php echo $_SERVER ?>

Открываем браузер и вводим в адресную строку IP-адрес нашего сервера. Мы должны увидеть внешний адрес компьютера, с которого обращаемся к серверу.

Resources # Resources

Reference

  • nginx + php-fpm + PHP APC + WordPress multisite (subdirectory) + WP Super Cache (Thanks bigsite)
  • Notes on removing ‘index.php’ from Permalinks (Can be done using Nginx Helper Plugin)

External Links

  • Nginx WordPress wiki page
  • Nginx Full Example
  • Nginx Full Example 2
  • LEMP guides on Linode’s Library
  • Various guides about Nginx on Linode’s Library
  • Lightning fast WordPress with Php-fpm and Nginx
  • Virtual Hosts Examples
  • List of 20+ WordPress-Nginx Tutorials for common situations
  • An introduction to Nginx configuration
  • A comprehensive blog series on hosting WordPress yourself using Nginx
  • WordPress Installation CentminMod
  • Nginx WordPress Installation Guide

Подготовка php-fpm к мониторингу

Переходим к мониторингу php-fpm. Он отдает побольше метрик, не буду описывать их все. Рассмотрю только самые основные. Мы будем наблюдать следующие параметры php-fpm:

Мониторинг php-fpm
active processes count Число активных процессов
connections per sec Количество соединений в секунду
idle processes count Количество idle процессов
slow requests Количество медленных запросов
length of listen queue Размер очереди ожидающих подключений
max children reached Сколько раз был достигнут лимит по процессам
max length of listen queue Максимальный размер очереди подключений

Пару слов о том, зачем это нужно и как пользоваться полученными данными. Этот мониторинг актуален, если у вас динамическое создание процессов в php-fpm. К примеру, если у вас значение max children reached регулярно больше единицы, то вам рекомендуется увеличить лимит на максимальное количество процессов, если позволяют ресурсы сервера. То же самое относится и к параметру length of listen queue. Если он больше нуля, то создается очередь из запросов, которые не успевают обработать сервер. Необходимо увеличить количество процессов, которые смогут обработать ожидающие подключения.

Приступаем к настройке мониторинга php-fpm на web сервере. Установим fcgi:

# yum install fcgi

Теперь подготовим pfp-fpm для сбора статистики. Для этого мы снова воспользуемся nginx. Редактируем его конфиг, добавляя в ту же секцию server, что и на прошлом этапе, следующую конструкцию:

location /phpfpm-status {
	include fastcgi_params;
	fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
	fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

Обращаю ваше внимание на то, что я в своей конфигурации использую подключение к php-fpm через unix сокет. За это отвечает параметр конфигурации fastcgi_pass

Если вы используете в работе tcp/ip порт, обычно 127.0.0.1:9000, то нужно указать его вместо сокета, вот так: fastcgi_pass 127.0.0.1:9000

Перезапускаем nginx:

# systemctl restart nginx

Внесем необходимые изменения в конфиг php-fpm — добавим одну строку:

# mcedit /etc/php-fpm.d/www.conf
pm.status_path = /phpfpm-status

Перезапускаем php-fpm:

# systemctl restart php-fpm

Проверяем, что по указанному адресу мы получаем статистику php-fpm:

# curl http://localhost/phpfpm-status

И ее же в формате json.

# curl -s 'http://localhost/phpfpm-status?json'
{"pool":"www","process manager":"dynamic","start time":1566494413,"start since":2049,"accepted conn":3236,"listen queue":0,"max listen queue":0,"listen queue len":0,"idle processes":5,"active processes":1,"total processes":6,"max active processes":6,"max children reached":0,"slow requests":0}

Если у вас примерно то же самое, то все в порядке, php-fpm отдает информацию о своем состоянии.

NBR, TPU, MVQ, …

Эластомеры — это материалы, которые посредством применения небольшой силы поддаются очень сильному растяжению. Благодаря их строению эластомеры обладают очень высокой степенью способности возвращения в исходное положение. Это означает, что остаточное изменение формы этих материалов является незначительным. В принципе эластомеры можно разделить на две группы: эластомеры химического сшивания и термопластические эластомеры. Химически сшитые эластомеры или резиновые материалы являются высокополимерами, макромолекулы которых сшиты крупными
петлями с помощью добавления вулканизационного средства. Благодаря подобному химическому сшиванию они не поддаются плавлению и распадаются при высоких температурах. Более того, подобное сшивание способствует тому, что резиновые материалы являются нерастворимыми и в зависимости от среды менее или более сильно разбухают или сокращаются. Термопластические эластомеры — это материалы, которые обладают характерными свойствами эластомеров в пределах высокого температурного диапазона. Однако их сшивание происходит физическим, а не химическим путем. Благодаря этому они плавятся при высоких температурах и поддаются обработке обычными термопластическими методами. Термопластические эластомеры растворимы и
обладают более низкой способностью набухания по сравнению с их химически сшитыми эквивалентами.

Установка phpMyAdmin

Переходим на сайт разработчика phpMyAdmin и копируем ссылку на нужную нам версию, например, последнюю:

Воспользовавшись скопированной ссылкой, скачиваем архив с установочными файлами:

wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.zip

Распаковываем скачанный архив:

unzip phpMyAdmin-*-all-languages.zip

Создаем каталог для phpmyadmin:

mkdir /usr/share/phpMyAdmin

… и переносим в него содержимое распакованного архива:

mv phpMyAdmin-*-all-languages/* /usr/share/phpMyAdmin/

Задаем владельца для каталога:

chown -R apache:apache /usr/share/phpMyAdmin

* как правило, сервис, которых обрабатываем php-запросы работает от пользователя apache.

Устанавливаем модули php, необходимые для корректной работы phpMyAdmin:

dnf install php-json php-mbstring  php-mysqli

Внесем небольшую настройку в конфигурацию phpMyAdmin.

Сгенерируем случайную последовательность символов:

head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32 ; echo »

Откроем на редактирование или создадим файл:

vi /usr/share/phpMyAdmin/config.inc.php

Внесем в него строку:

<?php

$cfg = ‘jd7n6yIcHOl55ikE7l5HAdNaWwunSHvR’;
?>

* где jd7n6yIcHOl55ikE7l5HAdNaWwunSHvR — последовательность, которую нам выдала команда head /dev/urandom …; Также обратите внимание на <?php  ?> — если мы создали новый файл, необходимо указать данные теги, так как они открывают код PHP. В противном случае, настройка не применится

Теперь создадим для phpmyadmin отдельный виртуальный домен в NGINX:

vi /etc/nginx/conf.d/phpMyAdmin.conf

И добавим в него следующее содержимое:

server {
        listen       80;
        server_name  phpmyadmin.dmosk.local;
        set $root_path /usr/share/phpMyAdmin;
        location / {
                root $root_path;
                index index.php;
        }
        location ~ \.php$ {
                fastcgi_pass unix:/run/php-fpm/www.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
                include fastcgi_params;
                fastcgi_param DOCUMENT_ROOT $root_path;
                fastcgi_read_timeout 300;
        }
}

* где phpmyadmin.dmosk.local — адрес для виртуального домена, именно этот адрес должен быть введен в адресную строку браузера, чтобы открылся нужный сайт. Поэтому если нет возможности зарегистрировать домен и имя узла в DNS, можно воспользоваться локальным файлом hosts. /usr/share/phpMyAdmin — это каталог, в который по умолчанию устанавливается phpMyAdmin.

После перезапускаем NGINX:

systemctl reload nginx

Также нужно перезапустить php-fpm, так как в процессе установки были добавлены модули для PHP:

systemctl restart php-fpm

И открываем в браузере наш домен, в данном примере, http://phpmyadmin.dmosk.local. Откроется форма для авторизации — вводим логин root и пароль, который мы указали после установки и запуска mariadb.

Определяем версию CentOS

В версии CentOS указывается сразу несколько цифр, каждая из которых имеет свое значение, например, 7.6.1810. Здесь 7 — основная версия, 6 — второстепенная, а 1810 — код даты второстепенной версии. Благодаря этим значениям пользователь может запросто узнать необходимые сведения и применить их в нужной сфере

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

Способ 1: Команда lsb_release

Стандартизация внутренней системы CentOS осуществляется благодаря стандарту Linux Standard Base (LSB). Команда lsb_release, позволяющая узнать информацию о стандартной базе, поддерживается всеми версиями рассматриваемой ОС и может использоваться для вывода на экран текущей сборки платформы. Для этого:

  1. Откройте «Терминал» через основное или контекстное меню, которое вызывается нажатием ПКМ по свободной области рабочего стола.

Введите , а затем нажмите на клавишу Enter.

Если вместо выведенной версии вы получили уведомление о том, что команда не найдена, потребуется добавить библиотеки утилиты в систему.

Поэтому придется прописать .

Подтвердите подлинность учетной записи суперпользователя, введя пароль от нее.

Примите загрузку новых компонентов, выбрав вариант y.

После успешной инсталляции повторно впишите , после чего увидите несколько строк с информацией, среди которых будет находиться и «Release».

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

Способ 2: Инструмент RPM

Опытные пользователи наверняка знают, что RPM (Red Hat Package Manager) — это инструмент управления пакетами в дистрибутивах, основанных на движке Red Hat. К таким платформам относится и CentOS. Дело в том, что у утилиты rpm имеется один специальный аргумент, позволяющий вывести на экран новую строку с данными по поводу текущей версии системы. Для этого требуется запустить консоль и вставить туда строку .

После активации команды отобразится новая строка с интересующими вас сведениями. Здесь будет выведена не только версия сборки, но и ее архитектура, например, centos-release-7-6.1810.2.el7.centos.x86_64.

Способ 3: Команда cat

Стандартная для всех дистрибутивов, основанных на ядре Linux, команда cat предназначена для просмотра содержимого файлов любых форматов, в том числе и конфигурационных. На нашем сайте уже есть статья, посвященная детальному разбору действия этой утилиты, ссылку на которую вы найдете ниже.

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

Активировав команду, в следующей строке вы получите искомые данные.

Способ 4: Команда hostnamectl

hostnamectl — стандартная команда CentOS, позволяющая узнать данные об имени хоста, параметры виртуализации, версию Kernel и архитектуру системы. Помимо этого, она может быть задействована и при необходимости определения текущей сборки платформы. Тогда в консоли достаточно вписать и нажать на Enter.

Среди всех строк обратите внимание на «Operating System»: после двоеточия и будет указана версия ОС. Как можно заметить, там отображается только ветвь

Именно потому, что этот способ подойдет далеко не всем юзерам, мы поставили его последним.

На этом наша статья подходит к концу. Вам остается только ознакомиться с каждым приведенным методом и выбрать наиболее оптимальный в сложившейся ситуации или показавшийся самым простым.

Опишите, что у вас не получилось.
Наши специалисты постараются ответить максимально быстро.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *