FAMP на pfsense с помощью PHP-FPM

    Статья является продолжением моей публикации, где рассматривалась возможность установки не нативных для pfsense пакетов на примере FAMP. Такая возможность не лишена недостатков:
    1. после инсталляции неродных php-пакетов меняются нативные библиотеки и зависимости, что вызывает php варнинги (можно отключить) и наблюдаются глюки при попытке поставить родное приложение большого размера на этапе проверки контрольной суммы. Причем мелкие приложение pfsense устанавливались без проблем.
    2. приходилось создавать недостающие стартовые BSD-скрипты, которые вызывали варнинги в шелле.
    3. отсутствие интеграции с вебмордой pfsense.

    В новой статье попытаюсь исправить вышеперечисленные недостатки приблизив в последующих публикациях проект к нативному приложению pfsense.
    Первый недостаток связан с тем, что в системе все службы завязаны на php-fpm cli, но и этот же недостаток можно использовать для того чтобы исполнять php на вебсервере через fastcgi, тем самым избавив апач от php5_module и увеличив производительность сайта.
    Еще о приятном моменте, в чистом виде нативного апача нет, но есть сборка ModSecurity на основе апача.
    Как сказано в описание ModSecurity — это вебприложение файрвол, предназначенное для работы либо в качестве встроенного, либо обратного прокси … и используемого для редиректа на вебсервера, размещенные за pfsense.
    При детальном рассмотрении становится ясно, что данный пакет можно с помощью определенных манипуляций превратить в полноценный апач.
    Итого, имеем две составляющие FAMP, а именно Apache и PHP, которые являются нативными для pfsense.
    С mysql сложнее — ни в одном нативном пакете его нет. Но, в расширенных php присутствует экстеншен mysql.so. Установим mysql и встроим возможность запуска и остановки службы в вебморду pfsense.

    В вебадминке
    Освобождаем 80 порт от вебморды на основе lighttpd и включаем sshd.
    Устанавливаем самый первый пакет Apache with mod_security_dev

    Mysql. В консоле
    pkg update
    pkg install mysql56-server
    


    Создаем файл настроек /usr/local/etc/my.cnf
    [client]
    port		= 3306
    socket		= /var/tmp/mysql.sock
    default-character-set = utf8
    
    [mysqld]
    port		= 3306
    socket		= /var/tmp/mysql.sock
    init-connect='SET NAMES utf8'
    collation_server = utf8_unicode_ci
    character_set_server = utf8
    character_set_client = utf8
    character_set_filesystem = utf8
    


    Установим базу пользователей
    /usr/local/bin/mysql_install_db --basedir=/usr/local --defaults-extra-file=/usr/local/etc/my.cnf --datadir=/var/db/mysql —force
    


    создаем стартовый скрипт /usr/local/etc/rc.d/mysql.sh
    #!/bin/sh
    rc_start() {
    if [ ! -f /var/run/mysql/mysql.pid ]
    then
    mkdir /var/run/mysql
    chown -R mysql:mysql /var/run/mysql
    /usr/local/libexec/mysqld --defaults-extra-file=/usr/local/etc/my.cnf --user=mysql --datadir=/var/db/mysql --pid-file=/var/run/mysql/mysql.pid
    fi
    }
    
    rc_stop() {
    if [ -f /var/run/mysql/mysql.pid ];
    then
    PID=`cat /var/run/mysql/mysql.pid`
    kill $PID
    else
    killall mysqld 2>/dev/null
    fi
    }
    
    case $1 in
    	start)
    		rc_start
    		;;
    	stop)
    		rc_stop
    		;;
    	restart)
    		rc_stop
    		rc_start
    		;;
    esac
    
    

    Биты исполнения и права
    chmod 755 /usr/local/etc/rc.d/mysql.sh
    chown -R mysql:mysql /var/db/mysql
    


    Добавим службу в /cf/config.xml после apache

    <service>
    	<name>mysql</name>
    	<rcfile>mysql.sh</rcfile>
    	<executable>mysqld</executable>
    	<description><![CDATA[Mysql server]]></description>
    </service>
    


    Удаляем кеш конфига
    rm /tmp/config.cache
    


    Под вебкой заходим
    Status — Services
    И тестируем (start/stop) службу mysql

    PHP. Добавим в скрипт /etc/rc.php_ini_setup
    до; Extensions
    mbstring.internal_encoding = UTF-8
    mbstring.func_overload = 2
    


    после; Extensions
    extension = mysql.so
    extension = gd.so
    


    Ниже, в том же файле меняем настроки отвечающие за php-fpm
    listen = /var/run/php-fpm.socket
    listen.owner = www
    listen.group = www
    listen.mode = 0660
    


    Настрока апача
    В вебке создадим юзера для виртуал хоста.
    System — User Manager — Groups — добавим группу www
    Вкладка Users — добавим юзера bitrix в группе www
    System — packages — установим FileManager
    С помощью FileManager создадим каталог для вебконтента /home/bitrix/www
    Service — Mod_Security — Virtual hosts — добавим новый:
    Enable
    Protocol = Http
    Server Names = bitrix.ru
    www.bitrix.ru
    Custom Options:

    <Directory "/home/bitrix/www">
        Options Indexes FollowSymLinks
        AllowOverride All
        Order allow,deny
        Allow from all
        Require all granted
    </Directory>
    DirectoryIndex index.php index.html
    LoadModule proxy_module libexec/apache24/mod_proxy.so
    LoadModule proxy_fcgi_module libexec/apache24/mod_proxy_fcgi.so 
    ProxyPassMatch ^/(.*\.php(/.*)?)$ unix:/var/run/php-fpm.socket|fcgi://127.0.0.1/home/bitrix/www
    


    Перегружаемся и смотрим тестовый файл /home/bitrix/www/test.php
    <?php
    phpinfo();
    ?>
    


    На клиентской машине не забываем отредактировать /etc/hosts
    192.168.100.1 bitrix.ru
    


    На этом все, но большинство CMS требуют графический пакет php55-GD.
    Который при установке потянет за собой зависимости, в том числе сам php55, что не есть хорошо.
    Поэтому мы поставим только зависимости:

    pkg install freetype2 jpeg libxml2 pcre png t1lib libXaw xproto printproto libXpm libXext xextproto libXau libX11 libxcb libXdmcp libpthread-stubs kbproto libXt libSM libICE libXp libXmu
    


    A сам пакет распакуем в корне системы
    cd /
    fetch http://pkg.freebsd.org/freebsd:9:x86:64/latest/All/php55-gd-5.5.22.txz
    tar xpf php55-gd-5.5.22.txz
    rm php55-gd-5.5.22.txz
    


    Перегружаемся и ставим нашу CMS.
    fetch http://www.1c-bitrix.ru/download/business_encode_php5.tar.gz
    tar xpf business_encode_php5.tar.gz
    

    В случае с битриксом, будет одна ошибка:
    Обработка .htaccess — Выключена
    Она возникает из-за php-fpm и вопросов безопасности. Это недосмотр самого битрикса. Игнорируем ошибку.

    Мы получили рабочее решение. С интегрированными в pfsense службами. С удобным управлением с помощью веба.

    Комментарии 1

      0
      Уберите под кат

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

      Самое читаемое