Показаны сообщения с ярлыком Apache. Показать все сообщения
Показаны сообщения с ярлыком Apache. Показать все сообщения

вторник, 20 декабря 2022 г.

Установка, запуск нескольких версий PHP из набора Software Collections SCL на Centos

 Введение



Использование Apache с PHP-FPM — один из лучших вариантов хостинга приложений PHP, особенно с точки зрения производительности.


В этом обучающем руководстве мы настроим два сайта PHP для работы на одном экземпляре сервера. Каждый сайт будет использовать собственный домен, и на каждом домене будет использоваться собственная версия PHP. Первый сайт <^>site1.your_domain развернет PHP 7.0. Второй сайт site2.your_domainsite2.your_domain<^>` развернет PHP 7.2.


Предварительные требования

Один сервер CentOS 7 с не менее чем 1 ГБ оперативной памяти, настроенный согласно руководству Начальная настройка сервера CentOS 7, с пользователем non-root user с привилегиями sudo и брандмауэром.

Веб-сервер Apache, установленный и настроенный в соответствии с указаниями руководства Установка веб-сервера Apache в CentOS 7​​​.

Доменное имя, настроенное так, чтобы указывать на ваш сервер CentOS 7. 

  

Шаг 1 — Установка PHP версий 7.0 и 7.2 с помощью PHP-FPM

После выполнения предварительных требований мы установим версии PHP 7.0 и 7.2. Репозиторий SCL (Software Collections) содержит множество версий стеков PHP для систем CentOS 7. Если вам нужна абсолютно новая версия PHP, которой нет на SCL, проверьте remi PPA (персональные архивы пакетов).


Начнем с установки репозитория SCL в вашу систему:


sudo yum install centos-release-scl -y

Сначала узнаем, какие версии PHP 7 доступны в SCL:


sudo yum list rh-php7[0-9].x86_64

Вывод будет выглядеть следующим образом:


Output

Available Packages

rh-php70.x86_64                                 2.3-1.el7                                 centos-sclo-rh

rh-php71.x86_64                                 1-1.el7                                   centos-sclo-rh

rh-php72.x86_64                                 1-2.el7                                   centos-sclo-rh

rh-php73.x86_64                                 1-1.el7                                   centos-sclo-rh

Вы заметите, что доступна также новейшая версия, PHP 7.3. Но в наших примерах мы установим версии 7.0 и 7.2.


Начнем с более ранней версии. Установите rh-php70 и rh-php70-php-fpm​​​:


sudo yum install rh-php70  rh-php70-php-fpm -y

rh-php70 — это метапакет, который запускает приложения PHP.

rh-php70-php-fpm​​​ предоставляет интерпретатор Fast Process Manager, который работает как демон и принимает запросы Fast/CGI.

Повторите процедуру для PHP версии 7.2. Установите rh-php72 и rh-php72-php-fpm​​​.


sudo yum install rh-php72  rh-php72-php-fpm -y

Далее запустите следующие команды для начала использования обеих коллекций Software Collections:


sudo scl enable rh-php70 bash

sudo scl enable rh-php72 bash

По умолчанию обе версии PHP прослушивают порт 9000. Но в этом обучающем руководстве мы хотим запустить две версии одновременно. Поэтому назначим два новых порта:


Для этого откройте /etc/opt/rh/rh-php70/php-fpm.d/www.conf в предпочитаемом текстовом редакторе и измените каждое представление 9000 на 9002. Затем сохраните и закройте файл и повторите процедуру для /etc/opt/rh/rh-php72/php-fpm.d/www.conf, только сейчас замените 9000 на 9003. Вы можете использовать эти две команды sed​​​ поочередно, чтобы выполнить замены:


sudo sed -i 's/:9000/:9002/'  /etc/opt/rh/rh-php70/php-fpm.d/www.conf

sudo sed -i 's/:9000/:9003/'  /etc/opt/rh/rh-php72/php-fpm.d/www.conf

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


SELinux — это сокращение от Security Enhanced Linux, которое активируется по умолчанию на CentOS 7. Необходимо добавить новые порты 9002 и 9003 в вашу базу данных SELinux и назначить их для ваших служб httpd, иначе ваши приложения не будут запускаться. Для выполнения этой задачи используйте команду semanage:


sudo semanage port -a -t http_port_t -p tcp 9002

sudo semanage port -a -t http_port_t -p tcp 9003

Флаг -a указывает на то, что вы добавляете объект в базу данных. Флаг -t указывает тип объекта, которым в данном случае является http_port_t​​​. А флаг -p определяет протокол tcp​​​. Дополнительную информацию о SELinux и команде semanage можно найти в этом обучающем руководстве или обратившись к официальной документации SELinux.


Теперь вы готовы запустить и активировать ваши службы PHP. Начнем со службы rh-php70-php-fpm и активируем ее запуск во время загрузки:


sudo systemctl start rh-php70-php-fpm

sudo systemctl enable rh-php70-php-fpm

Затем проверьте статус службы rh-php70-php-fpm:


sudo systemctl status rh-php70-php-fpm

Вывод будет выглядеть следующим образом:


Output

● rh-php70-php-fpm.service - The PHP FastCGI Process Manager

   Loaded: loaded (/usr/lib/systemd/system/rh-php70-php-fpm.service; enabled; vendor preset: disabled)

   Active: active (running) since Sat 2020-04-18 04:49:59 UTC; 1min 6s ago

 Main PID: 1852 (php-fpm)

   Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"

   CGroup: /system.slice/rh-php70-php-fpm.service

           ├─1852 php-fpm: master process (/etc/opt/rh/rh-php70/php-fpm.conf)

           ├─1853 php-fpm: pool www

           ├─1854 php-fpm: pool www

           ├─1855 php-fpm: pool www

           ├─1856 php-fpm: pool www

           └─1857 php-fpm: pool www


Apr 18 04:49:59 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Starting The PHP FastCGI Process Manager...

Apr 18 04:49:59 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Started The PHP FastCGI Process Manager.


Повторите эту процедуру, запустите службу rh-php72-php-fpm и активируйте ее запуск во время загрузки:


sudo systemctl start rh-php72-php-fpm

sudo systemctl enable rh-php72-php-fpm

Затем проверьте статус службы rh-php72-php-fpm:


sudo systemctl status rh-php72-php-fpm

Другой вывод будет выглядеть следующим образом:


Output

● rh-php72-php-fpm.service - The PHP FastCGI Process Manager

   Loaded: loaded (/usr/lib/systemd/system/rh-php72-php-fpm.service; enabled; vendor preset: disabled)

   Active: active (running) since Sat 2020-04-18 04:50:04 UTC; 1min 59s ago

 Main PID: 1876 (php-fpm)

   Status: "Processes active: 0, idle: 5, Requests: 0, slow: 0, Traffic: 0req/sec"

   CGroup: /system.slice/rh-php72-php-fpm.service

           ├─1876 php-fpm: master process (/etc/opt/rh/rh-php72/php-fpm.conf)

           ├─1877 php-fpm: pool www

           ├─1878 php-fpm: pool www

           ├─1879 php-fpm: pool www

           ├─1880 php-fpm: pool www

           └─1881 php-fpm: pool www


Apr 18 04:50:04 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Starting The PHP FastCGI Process Manager...

Apr 18 04:50:04 centos-s-1vcpu-1gb-blr1-01 systemd[1]: Started The PHP FastCGI Process Manager.


Мы установили на сервере две версии PHP. Теперь создадим структуру каталогов для каждого сайта, который будем развертывать.


Шаг 2 — Создание структур каталогов для обоих сайтов

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


Вначале создайте корневые каталоги документов для site1.your_domain и site2.your_domain:


sudo mkdir /var/www/site1.your_domain

sudo mkdir /var/www/site2.your_domain

По умолчанию веб-сервер Apache работает как пользователь apache и группа apache. Поэтому /var/www/ и все его файлы и подкаталоги также должны принадлежать им. Запустите следующие команды для проверки правильности владения и разрешений корневых каталогов вашего веб-сайта:


sudo chown -R apache:apache /var/www/site1.your_domain

sudo chown -R apache:apache /var/www/site2.your_domain

sudo chmod -R 755 /var/www/site1.your_domain

sudo chmod -R 755 /var/www/site2.your_domain

Команда chown меняет владельца двух каталогов веб-сайта на пользователя apache и группу apache. Команда chmod меняет разрешения, связанные с этим и другими пользователями и группами.


Далее вы создадите файл info.php в корневом каталоге каждого сайта. В нем будет отображаться информация о версии PHP для каждого сайта. Начнем с site1:


sudo vi /var/www/site1.your_domain/info.php

Добавьте следующую строку:


/var/www/site1.your_domain/info.php

<?php phpinfo(); ?>

Сохраните и закройте файл. Скопируйте созданный файл info.php в site2:


sudo cp /var/www/site1.your_domain/info.php /var/www/site2.your_domain/info.php

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


Шаг 3 — Настройка Apache для обоих сайтов

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


Для обслуживания этого контента Apache необходимо создать файл виртуального хоста с правильными директивами. Вы создадите два новых файла конфигурации виртуального хоста внутри каталога /etc/httpd/conf.d/.


Вначале создайте новый файл конфигурации виртуального хоста для сайта site1.your_domain. Здесь вы предписываете Apache использовать для рендеринга содержимого PHP 7.0:


sudo vi /etc/httpd/conf.d/site1.your_domain.conf

Добавьте в файл следующее: Убедитесь, что путь к каталогу сайта, имя сервера, порт и версия PHP соответствуют вашей настройке:


/etc/httpd/conf.d/site1.your_domain.conf


<VirtualHost *:80>

     ServerAdmin admin@site1.your_domain

     ServerName site1.your_domain

     DocumentRoot /var/www/site1.your_domain

     DirectoryIndex info.php

     SetHandler "proxy:fcgi://127.0.0.1:9002

     ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

     AddHandler php70-fcgi .php

     Action php70-fcgi /cgi-bin/php70.fcgi

     ErrorLog /var/log/httpd/site1.your_domain_error.log

     CustomLog /var/log/httpd/site1.your_domain_access.log combined

</VirtualHost>

Для DocumentRoot вы указываете путь корневого каталога вашего веб-сайта. Для ServerAdmin вы добавляете адрес электронной почты, к которому имеет доступ администратор сайта your_domain. Для ServerName вы добавляете url для вашего первого субдомена. Для SetHandler вы указываете порт 9002. Остальные директивы также настраивают вашу службу для развертывания PHP 7.0.


Сохраните и закройте файл.


Теперь создайте новый файл конфигурации виртуального хоста для сайта site2.your_domain. Для этого субдомена мы будем развертывать PHP 7.2:


sudo vi /etc/httpd/conf.d/site2.your_domain.conf

Добавьте в файл следующее: Убедитесь, что путь к каталогу сайта, имя сервера, порт и версия PHP соответствуют уникальным параметрам вашей системы:


/etc/httpd/conf.d/site2.your_domain.conf

<VirtualHost *:80>

     ServerAdmin admin@site2.your_domain

     ServerName site2.your_domain

     DocumentRoot /var/www/site2.your_domain

     DirectoryIndex info.php

     SetHandler "proxy:fcgi://127.0.0.1:9003

     ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

     AddHandler php72-fcgi .php

     Action php72-fcgi /cgi-bin/php72.fcgi

     ErrorLog /var/log/httpd/site2.your_domain_error.log

     CustomLog /var/log/httpd/site2.your_domain_access.log combined

</VirtualHost>

Сохраните файл и закройте его после завершения. Проверьте файл конфигурации Apache на наличие синтаксических ошибок:


sudo apachectl configtest

Вы увидите вывод с текстом Syntax OK:


Output

Syntax OK

Перезапустите службу Apache, чтобы применить изменения:


sudo systemctl restart httpd

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


Шаг 4 — Тестирование сайтов

Мы настроили два сайта для работы с двумя разными версиями PHP. Теперь проверим результаты.


Откройте в браузере сайты http://site1.your_domain и http://site2.your_domain. Вы увидите две страницы, выглядящие следующим образом:


Информационная страницаPHP 7.0 Информационная страница PHP 7.2


Обратите внимание на заголовки. На первой странице указано, что на сайте site1.your_domain развернута версия PHP 7.0. На второй странице указано, что на сайте site2.your_domain развернута версия PHP 7.2.


Мы протестировали сайты и теперь можем удалить файлы info.php. Эти файлы представляют собой угрозу безопасности, поскольку они содержат важную информацию о вашем сервере и при этом доступны неуполномоченным пользователям. Удалите файлы:


sudo rm -rf /var/www/site1.your_domain/info.php

sudo rm -rf /var/www/site2.your_domain/info.php

Теперь у вас имеется один сервер CentOS 7, обслуживающий два сайта с двумя разными версиями PHP. Однако PHP-FPM можно применять и для других целей.


Заключение

Мы объединили виртуальные хосты и PHP-FPM для обслуживания нескольких сайтов и нескольких версий PHP на одном сервере. Количество сайтов PHP и версий PHP, которые может обслуживать ваш сервер Apache, зависит исключительно от вычислительной мощности сервера.


Теперь вы можете рассмотреть возможность изучения более расширенных функций PHP-FPM, например порождение процесса или правил регистрации sdtout и stderr​​​​​. Или же теперь вы можете защитить свои веб-сайты. Для этого используйте наш обучающий модуль по защите сайтов с помощью бесплатных сертификатов TLS/SSL от Let’s Encrypt.

вторник, 29 декабря 2015 г.

Автоматический перезапуск апача. watchdog apache linux

Создаем скрипт в домашней дирректории с правами на запуск. Например apache2rst.sh

#!/bin/bash
ps ax | grep apache2 | grep -v grep -q || /etc/init.d/apache2 restart > /dev/null
reply=`curl -s -L --head -w "%{http_code}\n" http://mysite.ru | tail -n1`
if grep sheph! /var/log/watchdog-apache.log > /dev/null
then
    sed "/^.*[sheph\!]$/d" /var/log/watchdog-apache.log > /tmp/watchdog-apache.log
    cp /tmp/watchdog-apache.log /var/log/watchdog-apache.log
    echo "`date +%d-%m-%Y` `date +%H:%M:%S` Use ok, sheph!" >> /var/log/watchdog-apache.log
else
    echo "`date +%d-%m-%Y` `date +%H:%M:%S` 2 Use ok, sheph!" >> /var/log/watchdog-apache.log
fi
if [ $reply -ne "200" ]
then
echo "`date +%d-%m-%Y`  `date +%H:%M:%S%` Sheph, use propalo. Server podvis." >> /var/log/watchdog-apache.log
/etc/init.d/apache2 restart
echo "Site mysite.ru upal. Status="$reply | mail -s "Site upal" myemail@gmail.com
fi
exit 0
Добавляем его в крон рута

sudo crontab -eu root
Будем запускать раз в минуту

* * * * * /home/myuser/apache2rst.sh >> /var/log/watchdog-apache.log

понедельник, 30 ноября 2015 г.

Часто используемые команды и конструкции при разработке на Bitrix

Вывод массива php

Часто есть необходимость посмотреть что содержит переменная или массив. Ниже несколько вариантов как это можно сделать, в том числе незаметно для посетителей сайта.

<div style="display: none;"><? echo json_encode($arResult['ITEMS']);?></div>
<textarea style="display: none;"><? echo var_export($arResult['ITEMS']);?></textarea&gt
<?global $USER; if($USER->isAdmin()){echo ‘<pre>’;print_r($array);echo ‘</pre>}?>
<? echo "<pre>"; print_r ($arResult); echo "</pre>"; ?>
<?echo "<pre style='display: inline;'>"; print_r(get_defined_vars());echo "</pre>";?> //вывод массива всех определенных серверных и пользовательских переменных

Запись массива в файл или лог Apache

Если нет возможности вывести массив на страницу, то можно записать его в файл

$current = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/log.txt');

$current .= "John Smith\n";

$current .= var_export($_SESSION, true);

file_put_contents($file, $current);


или лог Apache


error_log ("blyat` ".var_export($arStatus, true), 0);
error_log ("blyat` ".var_export($arStatus, true), 1, "wer@mail.ru")

Вывод лога в реальном времени.

tail -f /var/log/syslog

Работа с базой

Посмотреть какие запросы идут в базу можно так:
В терминале
mysql -uroot -p
пароль
затем
SHOW PROCESSLIST;

Прямое обращение к базе работает на много быстрее чем через API битрикса.

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/dbconn.php");
$db=new PDO($DBType.':host='.$DBHost.';dbname='.$DBName, $DBLogin, $DBPassword);
$db->query("SET CHARACTER SET utf8");
$res=$db->prepare(" SELECT VALUE FROM `b_iblock_element_property`  WHERE (`IBLOCK_PROPERTY_ID`='3847' and `IBLOCK_ELEMENT_ID` LIKE '%".$item['id']."%')");
 $res->execute();// выборка из базы возвращает код товара поставщика по внутреннему коду товара
 if($row=$res->fetch()){
  if ($row<1){error_log ("пусто", 0);}
  else  echo $row[0];
 }

Интерактивная консоль php

Проверить код можно в интерактивной консоли php. Для этого в терминале нужно запустить команду 
php -a

SSH

Монтируем файловую систему удаленного сервера к своей
sshfs user@domen.ru:/ /media/sshfsdomen.ru -o reconnect

Если злобный админ закрыл куда-нибудь доступ
sudo ssh -D 777 user@domen.ru
получаем socks сервер на localhost:777

Просмотр лога в реальном времени.
ssh myyser@site.ru tail -f /var/log/nginx/error.log

Посмотреть кто зашел
who

Проверка свободного места на диске

Куда делось место на диске покажет команда
df -h
du -| grep "[0-9]M" | sort --r

Работа с архивами

Распаковать бэкап битрикса можно командой<
sudo cat *.* | tar xzv

Поиск куска кода

sudo find -type f -name '*.php' | xargs grep -l "echo '$aritem" --color

Задать права на файлы рекурсивно

sudo chmod -R 777 /bitrix/templates/newtempl

Дамп TCP

tcpdump -vX -i eth0 port 80

Смотрим подключения

netstat -tap | grep nginx


fail2ban iptables

Забаннить
iptables -I INPUT -j DROP -s 58.40.10.2
iptables -I INPUT -m iprange --src-range 5.143.231.0-5.143.231.255 -j DROP


Алиасы .bashrc или в .bash_aliases для быстрого банна
alias ban=’iptables -I INPUT -j DROP -s’
alias unban=’iptables -D INPUT -j DROP -s’


Список забанненых
iptables-saveили
iptables -L -n -v --line-numbers


Удалить ip из банна
iptables -D fail2ban-ssh -j DROP -s 46.20.67.32/32
iptables -D fail2ban-ssh 1

Остановить, запустить файрвол.
service ufw stop
service ufw start


Сохраняем правила файрвола.
iptables-save > /etc/iptables.rules


Восстанавливаем правила.
iptables-restore < /etc/iptables.rules

Часто используемые команды и конструкции при разработке на Bitrix

Вывод массива php

Часто есть необходимость посмотреть что содержит переменная или массив. Ниже несколько вариантов как это можно сделать, в том числе незаметно для посетителей сайта.

<div style="display: none;"><? echo json_encode($arResult['ITEMS']);?></div>
<textarea style="display: none;"><? echo var_export($arResult['ITEMS']);?></textarea&gt
<?global $USER; if($USER->isAdmin()){echo ‘<pre>’;print_r($array);echo ‘</pre>}?>
<? echo "<pre>"; print_r ($arResult); echo "</pre>"; ?>
<?echo "<pre style='display: inline;'>"; print_r(get_defined_vars());echo "</pre>";?> //вывод массива всех определенных серверных и пользовательских переменных

Запись массива в файл или лог Apache

Если нет возможности вывести массив на страницу, то можно записать его в файл

$current = file_get_contents($_SERVER['DOCUMENT_ROOT'].'/log.txt');

$current .= "John Smith\n";

$current .= var_export($_SESSION, true);

file_put_contents($file, $current);


или лог Apache


error_log ("blyat` ".var_export($arStatus, true), 0);
error_log ("blyat` ".var_export($arStatus, true), 1, "wer@mail.ru")

Вывод лога в реальном времени.
tail -f /var/log/syslog

Работа с базой

Посмотреть какие запросы идут в базу можно так:
В терминале
mysql -uroot -p
пароль
затем
SHOW PROCESSLIST;

Прямое обращение к базе работает на много быстрее чем через API битрикса.

require($_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/dbconn.php");
$db=new PDO($DBType.':host='.$DBHost.';dbname='.$DBName, $DBLogin, $DBPassword);
$db->query("SET CHARACTER SET utf8");
$res=$db->prepare(" SELECT VALUE FROM `b_iblock_element_property`  WHERE (`IBLOCK_PROPERTY_ID`='3847' and `IBLOCK_ELEMENT_ID` LIKE '%".$item['id']."%')");
 $res->execute();// выборка из базы возвращает код товара поставщика по внутреннему коду товара
 if($row=$res->fetch()){
  if ($row<1){error_log ("пусто", 0);}
  else  echo $row[0];
 }

Интерактивная консоль php

Проверить код можно в интерактивной консоли php. Для этого в терминале нужно запустить команду 
php -a

SSH

Монтируем файловую систему удаленного сервера к своей
sshfs user@domen.ru:/ /media/sshfsdomen.ru -o reconnect

Если злобный админ закрыл куда-нибудь доступ
sudo ssh -D 777 user@domen.ru
получаем socks сервер на localhost:777

Просмотр лога в реальном времени.
ssh myyser@site.ru tail -f /var/log/nginx/error.log

Посмотреть кто зашел
who

Проверка свободного места на диске

Куда делось место на диске покажет команда
df -h
du -| grep "[0-9]M" | sort --r

Работа с архивами

Распаковать бэкап битрикса можно командой<
sudo cat *.* | tar xzv

Поиск куска кода

sudo find -type f -name '*.php' | xargs grep -l "echo '$aritem" --color

Задать права на файлы рекурсивно

sudo chmod -R 777 /bitrix/templates/newtempl

Дамп TCP

tcpdump -vX -i eth0 port 80

Смотрим подключения

netstat -tap | grep nginx


fail2ban iptables

Забаннить
iptables -I INPUT -j DROP -s 58.40.10.2
iptables -I INPUT -m iprange --src-range 5.143.231.0-5.143.231.255 -j DROP


Алиасы .bashrc или в .bash_aliases для быстрого банна
alias ban=’iptables -I INPUT -j DROP -s’
alias unban=’iptables -D INPUT -j DROP -s’


Список забанненых
iptables-saveили
iptables -L -n -v --line-numbers


Удалить ip из банна
iptables -D fail2ban-ssh -j DROP -s 46.20.67.32/32
iptables -D fail2ban-ssh 1

Остановить, запустить файрвол.
service ufw stop
service ufw start


Сохраняем правила файрвола.
iptables-save > /etc/iptables.rules


Восстанавливаем правила.
iptables-restore < /etc/iptables.rules

пятница, 24 июля 2015 г.

Как узнать что именно грузит сервер?

  1. Открываем top или htop, ловим высоконагруженный pid апача
  2. lsof -p PID — покажет с какими ресурсами работает pid
Также в логах апача можно включить запись времени обработки каждого запроса посмотрите у кого это время длинное, так вычислите не только сайт, но и конкретное место сайта 
LogFormat "%h %l %u %t \"%r\" %>s %bb %D" common
в конце — время обработки запроса в микросекундах

четверг, 5 марта 2015 г.

CentOS 7 + FreePBX 12

Устанавливаем CentOS 7  х86_64 с минимальным комплектом программ.

http://www.centos.org/


rpm -Uvh http://mirror.yandex.ru/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 
Ограничиваем количество установленных версий пакетов до 3-х (например количество версий установленного ядра):
nano -w /etc/yum.conf
installonly_limit=3
yum install net-tools
ifconfig

Узнали свой ip. Далее подключаемся по SSH к этомe ip. Будет удобнее копипастить команды)))

Устанавливаем FreePBX 12

Отключаем систему принудительного контроля доступа

sed -i 's/\(^SELINUX=\).*/\SELINUX=disabled/' /etc/selinux/config
reboot
Запускаем sestatus
Если видим строку "SELinux status: disabled" значит все ок
Обновляем систему:

yum -y update
yum groupinstall core
yum groupinstall base


Устанавливаем Дополнительные Необходимые Зависимости

yum install gcc gcc-c++ lynx bison mysql-devel php php-mysql php-pear php-mbstring tftp-server httpd make ncurses-devel libtermcap-devel sendmail sendmail-cf caching-nameserver sox newt-devel libxml2-devel libtiff-devel audiofile-devel gtk2-devel subversion kernel-devel git subversion kernel-devel php-process crontabs cronie cronie-anacron wget vim php-xml uuid-devel libtool sqlite-devel

Иногда при копипасте кода установки может вылезать ошибка, что какой-то пакет не найден. На самом деле все правильно, просто глюк копипаста. Решение вбить руками команду или попробовать стереть название проблемного пакета вместе с пробелами по краям и вбить руками только его.


IPTables

Если Вы ставите FreePBX не на чистую систему временно отключите IPTables. Внимание! Не забудьте включить снова после настройки АТС
текущее состояние:   
chkconfig iptables --list
Отключите Iptables:
chkconfig --level 0123456 iptables off
Или остановите службу до перезагрузки:
service iptables stop


Установка MySQL

yum install wget
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
yum install mysql-server
chkconfig --level 345 mysqld on
service mysqld start

Стартуем Apache

chkconfig --level 345 httpd on
service httpd start

Устанавливаем PearDB

pear channel-update pear.php.net
pear install db-1.7.14

Перезапускаем машину

reboot

Установите зависимости для Google Voice

cd /usr/src
wget https://iksemel.googlecode.com/files/iksemel-1.4.tar.gz
tar xf iksemel-*.tar.gz
cd iksemel-*
./configure
make
make install

Добавляем пользователя Asterisk

adduser asterisk -M -c "Asterisk User"

Устанавливаем и конфигурируем Asterisk

cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.4-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
git clone https://github.com/akheron/jansson.git
wget http://www.pjsip.org/release/2.2.1/pjproject-2.2.1.tar.bz2

Компилируем и устанавливаем DAHDI и LibPRI
cd /usr/src
tar xvfz dahdi-linux-complete-current.tar.gz
tar xvfz libpri-1.4-current.tar.gz
rm -f dahdi-linux-complete-current.tar.gz libpri-1.4-current.tar.gz
cd dahdi-linux-complete-*
make all
make install
make config
cd /usr/src/libpri-1.4.*
make
make install

Компилируем и устанавливаем pjproject
cd /usr/src
tar -xjvf pjproject-2.2.1.tar.bz2
cd pjproject-2.2.1
CFLAGS='-DPJ_HAS_IPV6=1' ./configure --prefix=/usr --enable-shared --disable-sound\
  --disable-resample --disable-video --disable-opencore-amr --libdir=/usr/lib64
make dep
make
make install

Компилируем и устанавливаем jansson
cd /usr/src/jansson
autoreconf -i
./configure --libdir=/usr/lib64
make
make install

Компилируем и устанавливаем Asterisk
cd /usr/src
tar xvfz asterisk-13-current.tar.gz
rm -f asterisk-13-current.tar.gz
cd asterisk-*
contrib/scripts/install_prereq install
./configure --libdir=/usr/lib64
contrib/scripts/get_mp3_source.sh
make menuselect
make
make install
make config
ldconfig

Установка Asterisk-Extra-Sounds
mkdir -p /var/lib/asterisk/sounds
cd /var/lib/asterisk/sounds
wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-ru-wav-current.tar.gz
tar xfz asterisk-extra-sounds-en-wav-current.tar.gz
rm -f asterisk-extra-sounds-en-wav-current.tar.gz
# Скачать широкополосный звук
wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-en-g722-current.tar.gz
tar xfz asterisk-extra-sounds-en-g722-current.tar.gz
rm -f asterisk-extra-sounds-en-g722-current.tar.gz

Устанавливаем и конфигурируем  FreePBX

cd /usr/src/
wget http://mirror.freepbx.org/freepbx-12.0.3.tgz
tar vxfz freepbx-12.0.3.tgz

Выставляе права
chown asterisk. /var/run/asterisk
chown -R asterisk. /etc/asterisk
chown -R asterisk. /var/{lib,log,spool}/asterisk
chown -R asterisk. /usr/lib64/asterisk
mkdir /var/www/html
chown -R asterisk. /var/www/

Несколько небольших изменений Apache.
sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php.ini
cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf_orig
sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/httpd/conf/httpd.conf
service httpd restart

Конфигурируем базуданных MYSQL. 
cd /usr/src/freepbx
export ASTERISK_DB_PW=amp109
mysqladmin -u root create asterisk 
mysqladmin -u root create asteriskcdrdb 

Выставляе права MYSQL .
mysql -u root -e "GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';"
mysql -u root -e "GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';"
mysql -u root -e "flush privileges;"

Перезагрузка Asterisk и инсталляция FreePBX.
cd /usr/src/freepbx
./start_asterisk start
./install_amp --installdb --username=asteriskuser --password=${ASTERISK_DB_PW}
amportal chown
amportal a ma installall
amportal a reload
amportal a ma refreshsignatures
amportal chown


ln -s /var/lib/asterisk/moh /var/lib/asterisk/mohmp3
amportal restart

http://localhost/admin
http://yourlocalipaddress/html

Split / разбить dump

//Разбить дамп по 50000 строк for i in `ls *.sql`; do split -d -l 50000 -a 4 --additional-suffix=.sql $i "$(basename "$i" .sq...