5 April 2015

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

PHPMySQL1С-Bitrix
Статья является продолжением моей публикации, где рассматривалась возможность установки не нативных для 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 службами. С удобным управлением с помощью веба.
Tags:pfsenseapachemysqlphpphp-fpmfastcgibitrix
Hubs: PHP MySQL 1С-Bitrix
-4
4k 19
Comments 1
Popular right now
Top of the last 24 hours