1C-bitrix

Подписаться на эту рубрику по RSS

Простой WEB сервер на ubuntu, для Битрикс

Расскажу как по быстрому сконфигурировать WEB сервер для работы с Битрикс. Безо всяких nginx и прочего, для высоконагруженных проектов конечно не пойдет, но "просто сайт" вполне полетит. Итак после установки на ноутбук Sumsung P29 (ему вот уже 9 лет) с конфигурацией Celeron M- 1.4 Ghz, 700 Мб. оперативной памяти, жесткий IDE на 40 гигов, словом тот еще драндулет- установка Битрикс: Малый Бизнес 12, решение интернет магазин выдает 52 балла производительности, все параметры самую капельку выше эталона.

ИТАК УСТАНАВЛИВЕМ ОСНОВУ

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

sudo apt-get install apache2 

Установка PHP и библиотеки для работы с графикой:

apt-get install apache2 apache2.2-common apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-cert libapache2-mod-php5 php5 php5-common php5-gd php5-mysql php5-imap php5-cli php5-cgi libapache2-mod-fcgid apache2-suexec php-pear php-auth php5-mcrypt mcrypt php5-imagick imagemagick libapache2-mod-suphp libruby libapache2-mod-ruby

Чтобы Apache подхватил только что установленный PHP перезагрузим его командой:

sudo apache2ctl restart

Установка MySQL

sudo apt-get install mysql-server

 

в процессе установки попросит ввести пароль, придумайте самостоятельно

Установка PhpMyAdmin

sudo apt-get install phpmyadmin

 

в процессе запросит пароль от MYSQL - тот самый что вводили выше. Все основа готова, на этом вполне заработает сайт.

ЗАПИЛИВАЕМ ПОД БИТРИКС

Для повышения производительности, да и вообще по требованиям Битрикс к серверу, на нем должен быть установлен APC (на самом деле не только он подходит, можно поставить eAccelerator, XChache и.т.д) 

Устанавливаем оной вводя команды по одной (хотя наверное можно и хором)

sudo apt-get install php-pear 
sudo apt-get install php5-dev apache2-prefork-dev build-essential 
sudo pecl install apc

ДАЛЬШЕ СОЗДАЕМ И ОТКРЫВАЕМ ФАЙЛ НАСТРОЕК APC

nano /etc/php5/conf.d/apc.ini

прямо туда копируем вот это

extension=apc.so 
realpath_cache_size=4096k 
apc.ttl=1 
apc.max_file_size=4M 
apc.shm_size=128M //вот тут достаточно и 96М, но я предпочитаю 128 

ТЕПЕРЬ УСКОРИМ РАБОТУ MYSQL

открываем

nano /etc/mysql/my.cnf

и добавляем в него (можно куда-нибудь в середину)

innodb_flush_log_at_trx_commit = 0 
innodb_buffer_pool_size = 128M 
innodb_flush_method = O_DIRECT 
transaction-isolation = READ-COMMITTED 
table_open_cache = 600 //тут самостоятельно

ну вот и все, остально, например php.ini уже докручивайте на свое усмотрение, с этими настройками Битрикс вполне летает на компе средней паршивости

Дополнение с демагогией - установка memcache на ubuntu server с битрикс сайтом, для ускорения (под высоконагруженные проекты, для всякой мелочевки не стоит заморачиваться)

PS: УСТАНОВКА WEBMIN НА UBUNTU. ЧТО БЫ БЫЛО ПРОЩЕ:

Добавляем необходимые пакеты

apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions

Скачиваем ключи

wget http://www.webmin.com/jcameron-key.asc

Добавляем их

apt-key add jcameron-key.asc

Добавляем в самый конец sources.list

nano /etc/apt/sources.list 

deb http://download.webmin.com/download/repository sarge contrib

Скачиваем ключи

wget http://www.webmin.com/jcameron-key.asc

Обнавляемся и устанавливаем webmin

sudo apt-get update 

sudo apt-get install webmin

Дожидаемся конца установки и после WEBMIN доступен по адресу

https://ВАШ_IP:10000

И ЕЩЕ ОДНА МАЛЕНЬКАЯ ВЕЩЬ

Лично я держу пару таких серверов на домашнем компьютере. То есть на однй, достаточно мощной машине установлено 5 виртуальных машин с простенькими параметрами. Так у меня роутер, и виртуальные машины получают IP адреса по DHCP. необходимо задать им статичные IP адреса. По большей сути это актуально и для еденичного компьютера в домашней сети

Идем в nano /etc/network/interfaces и приводим к виду:

# This file describes the network interfaces available on your system 
# and how to activate them. For more information, see interfaces(5). 

# The loopback network interface 
auto lo 
iface lo inet loopback 

# The primary network interface 
auto eth0 
iface eth0 inet static 
address 192.168.0.58 //Здесь указываем свой желаемый IP 
netmask 255.255.255.0

Перезагружаем сеть /etc/init.d/networking restart и идем в nano /etc/hosts Приводим его примерно к такому виду:

1127.0.0.1 localhost.localdomain localhost192.168.0.58 server.example.com server //повторяем свой IP и адрес 

# The following lines are desirable for IPv6 capable hosts 
::1 ip6-localhost ip6-loopback 
fe00::0 ip6-localnet 
ff00::0 ip6-mcastprefix 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters

Выполняем:

echo server.example.com > /etc/hostname 
/etc/init.d/hostname restart

B проверяем:

hostname 
hostname -f

Теперь они должны показать server.example.com.

Ускорение сайта Битрикс на ubuntu server, Memcached.

Что такое memcacheed- наверное знает каждый, но на всякий повторюсь. Это алгоритм кэширования различных объектов в оперативной памяти. Позволяет, используя специальное API (для Perl, PHP, Python, Java и др.), сохранить в ОЗУ блок данных, сопоставленный с определённым символьным ключом. Был разработан для сайта LiveJournal, имеющего более миллиона посетителей в сутки. Его применение снизило загрузку серверов баз данных в разы. В API memcached есть только базовые функции: выбор сервера, установка и разрыв соединения, добавление, удаление, обновление и получение объекта. Для каждого объекта устанавливается время жизни от 1 секунды до бесконечности. При переполнении памяти более старые объекты автоматически удаляются.

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

ЗАЧЕМ МНЕ MEMCACHE

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

Последние четыре месяца сайт работал на виртуальном сервере, арендованном у keyweb.ru, в принципе, нареканий никаких и обращаться в техподдержку не приходилось. Но количество сайтов на сервере растет, нагрузка на виртуалку повышается, начал задумываться о приобретении аренды на выделенный сервер там же, на keyweb-е. Однако, обстоятельства подкачали, неделю назад сервер неожиданно потух. Практически незамедлительно написал в техподдержку очень развернутый вопрос, ответом получил короткое "Посмотрим" и тишина на час. "Нафиг, нафиг" - подумал я и начал мониторить другие компании.

В итоге, сегодня приобрел на пробу полноценный сервер: AMD Athlon 64 X 3500, 8 Гб ОЗУ, 320 Гб RAID и безлимитный трафик на 1Гб/с. Для пробы, да в принципе и вообще на первое время- пойдет под пяток не высоконагруженных сайтов. Все это за 36 Евро, на что надеются Российские хостинг компании с маленькими дисками, маленькой ОЗУ и ограниченным трафиком за минимум 3000 руб. не знаю, но раз дерут значит есть с кого.

Ух, высказался, теперь самое главное:

УСТАНОВКА MEMCACHE НА UBUNTU SERVER ДЛЯ БИТРИКС

Для начала поднимаем просто WEB сервер и запиливаем под Битрикс, ссылку на инструкцию дал выше. Дальше:

Устанавливаем memcached:

apt-get install memcached  

Идем в настройки memcached nano /etc/memcached.conf и приводим к такому виду:

#Memcached будет работать, как демон 
-d 
#Лог будет складывать туда 
logfile /var/log/memcached.log 
#Для начала поставьте 256 мегабайт ОЗУ под хранилище. Но больше заисит от ее колличества 
#помните, что выставив 256 Вы ровно столько забираете от оперативки 
#лично у меня на данный момент стоит 512 
-m 256 
#Слушать будет этот порт 
-p 11211 
#Пользователь 
-u nobody 
#Слушаем localhost 
-l 127.0.0.1

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

/etc/init.d/memcached restart

Устанавливаем модуль для PHP:

apt-get install php5-dev libmemcache-dev 

pecl download memcache 
tar xzvf memcache-2.2.7.tgz //nen здесь внимательно, я послежу но смотрите на версию 2,2,7 крайняя 
cd memcache-2.2.7/ 
phpize && ./configure --enable-memcache && make 
cp modules/memcache.so /usr/lib/php5/20060613/ //тут тоже обратите внимание на цифры у себя 

echo 'extension=memcache.so' >> /etc/php5/apache2/php.ini 
/etc/init.d/apache2 restart

Собственно все, установлено и настроено. Запускаем битрикс сайт на сервере, и идем папку/bitrix/php_interface и открываем файл dbconn.php

В него вносим следующее:

define("BX_CACHE_TYPE", "memcache"); //устанавливаем тип кеширования 
define("BX_CACHE_SID", $_SERVER["DOCUMENT_ROOT"]."#01"); //это не даст кешам разных сайтов перемешаться 
define("BX_MEMCACHE_HOST", "127.0.0.1"); //это адрес где работает мемкешед (в нашем случае локально)

Собственно совсем все. Таким образом, я запустил на сервере 8 сайтов на битрикс, один из них неплохо посещаемый интернет магазин с каталогом на 30 тыс. позиций. Погоняю месяцок и отпишусь в этой теме...как оно хреново или не очень)) Успехов.

PS: В новой 14-ой версии 1С битрикс настройки перенесены в файл /bitrix/.settings.php и тип кеширование необходимо устанавливать в секции:

'cache' => 
array ( 
'value' => 
array ( 
'sid' => '$_SERVER["DOCUMENT_ROOT"]."#01"', 
'type' => 'memcache', 
'memcache' => 
array ( 
'host' => '127.0.0.1', 
), 
), 
'readonly' => false, 
),

Дополнительно можете установить nginx чтобы совсем летало.

Установка nginx на ubuntu server с битрикс сайтом

nginx [engine x] — это HTTP-сервер и обратный прокси-сервер, а также почтовый прокси-сервер, написанный Игорем Сысоевым. Уже длительное время он обслуживает серверы многих высоконагруженных российских сайтов, таких как:  Яндекс, Mail.Ru, ВКонтакте и Рамблер. Согласно статистике, Netcraft nginx обслуживал или проксировал 13.54% самых нагруженных сайтов в мае 2013 года.

Говоря по-простому, nginx это веб сервер, который менее требователен к ресурсам машины. Имеет смысл использовать на слабых серверах либо на высоконагруженных проектах. Наиболее оптимальный вариант конфигурации, по моему мнению, это работа nginx в связке с apache. В таком варианте nginx выступает прослойкой между пользователем и apache, отдавая всю статику и обработанные apache запросы. Таким образом ускоряется ответ на запрос и освобождаются ресурсы занятые apache, так как ему нужно будет обрабатывать только запросы nginx-а.

 

 

УСТАНОВКА NGINX НА РАБОТАЮЩИЙ СЕРВЕР С APACHE.

Итак имеем работающий WEB-сервер: собранный вот по этим инсрукциям:

Нам необходимо ко всему этому добру прикрутить nginx, таким образом чтобы он отдавал всю статику и делал запросы к apache для получения динамики.

Во первых устанавливаем nginx командой:

sudo aptitude install nginx

Далее редактируем все файлы виртуальных хостов созданных в apache, собственно меняем прослушиваемый порт с 80 на 81. Пример одного из файлов:

<VirtualHost *:81> 
ServerName адрес_сайта 
ServerAdmin ящик_админа 
DocumentRoot /путь_к_файлам_сайта 
<Directory/путь_к_файлам_сайта> 
Options FollowSymLinks 
AllowOverride None 
</Directory> 
<Directory /var/mysitesdocs/polimer_m> 
Options Indexes FollowSymLinks MultiViews 
AllowOverride All 
Order allow,deny 
allow from all 
</Directory> 
ErrorLog /var/log/apache2/error.log 
LogLevel debug 
CustomLog /var/log/apache2/access.log combined 
</VirtualHost>

Далее редактируем файл nano /etc/apache2/ports.conf

NameVirtualHost *:81 
Listen 81

Устанавливаем apache2-mod-rpaf командой

aptitude install libapache2-mod-rpaf

Открываем файл конфигурации nginx и настраивам под себя (рекомендации и подсказки внутри):nano /etc/nginx/nginx.conf

user www-data; 
worker_processes 2; 
#выставляем по колличеству ядер процессора 
timer_resolution 100ms; 
error_log /var/log/nginx/error.log; 
pid /var/run/nginx.pid; 

events { 
worker_connections 1024; 
} 

http { 
include /etc/nginx/mime.types; 
default_type application/octet-stream; 
server_names_hash_bucket_size 64; 
access_log /var/log/nginx/access.log; 

sendfile on; 
#tcp_nopush on; 

#keepalive_timeout 0; 
keepalive_timeout 65; 
tcp_nodelay on; 

gzip on; 
gzip_proxied any; 
gzip_min_length 1100; 
gzip_http_version 1.0; 
gzip_buffers 4 8k; 
gzip_comp_level 5; 
#рекомендую оставить 5, больше бестолково, меньше не эффективно 
gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; 

include /etc/nginx/conf.d/*.conf; 
include /etc/nginx/sites-enabled/*; 
} 

Создаем виртуальный хост в nginx nano /etc/nginx/sites-enabled/домен_сайта

server { 
listen 80; 
server_name домен_сайта; 
access_log /var/log/nginx.access_log; 
location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx)$ {
root /путь_к_сайту/; 
index index.html index.php; 
access_log off; 
expires 30d; 
} 
location ~ /\.ht { 
deny all; 
} 
location / { 
proxy_pass http://127.0.0.1:81/; 
proxy_set_header X-Real-IP $remote_addr; 
proxy_set_header X-Forwarded-for $remote_addr; 
proxy_set_header Host $host; 
proxy_connect_timeout 60; 
proxy_send_timeout 90; 
proxy_read_timeout 90; 
proxy_redirect off; 
proxy_set_header Connection close; 
proxy_pass_header Content-Type; 
proxy_pass_header Content-Disposition; 
proxy_pass_header Content-Length; 
} 

Перезапускаем nginx /etc/init.d/nginx restart 
и апач sudo /etc/init.d/apache2 reload

ИЗМЕНЕНИЕ ПРАВ НА ПАПКИ И ФАЙЛЫ САЙТА(ОВ)

Для безопасности имеет смысл выставить права на файлы всех сайтов равными 644, а на папки 755. При этом владельцем должен стать пользователь от имени которого работает apache, а именно www-data. Предположим что вы положили все сайты в папку /var/www - тогда необходимо выполнить следующие команды

find /var/www -type f -exec chmod 644 {} \; 

find /var/www -type d -exec chmod 755 {} \;

chown -R www-data:www-data /var/www

Основные функции вывода в шаблонах Битрикс

В ОСНОВНОМ ШАБЛОНЕ:

<?$APPLICATION->ShowTitle()?> - собственно вывод тайтла в основном шаблоне сайта

<?$APPLICATION->ShowHead()?> - подключение для вывода в шаблоне сайта основных полей тега : мета-теги Content-Type, robots, keywords, description; стили CSS; скрипты

<?$APPLICATION->ShowPanel();?> - выводит панель управления администратора

<?=SITE_TEMPLATE_PATH?> - подставляет путь к шаблону

<?$APPLICATION->ShowTitle(false);?> - заголовок (в h1 например использовать)

SHOWHEAD РАЗБИТЬ НА СОСТАВЛЯЮЩИЕ:

<meta http-equiv="Content-Type" content="text/html; charset=<?=LANG_CHARSET;?>" /> - Установка кодировки сайта

<? $APPLICATION->ShowMeta("keywords") ?> - Вывод мета тега keywords

<? $APPLICATION->ShowMeta("description") ?> - Вывод мета тега description

<? $APPLICATION->ShowCSS(); ?> - Подключение основных файлов стилей template_styles.css и styles.css

<? $APPLICATION->ShowHeadStrings() ?> - Отображает специальные стили, JavaScript

<? $APPLICATION->ShowHeadScripts() ?> - Вывода служебных скриптов

 

В ШАБЛОНАХ КОМПОНЕНТОВ:

<img src="<?=$arSection["PICTURE"]["SRC"]?>" title="<?=$arSection["NAME"]?>" border="0"/> - картинка раздела инфоблока.

<?=$arSection["DESCRIPTION"]?> - описание раздела инфоблока

<?echo $arItem["NAME"]?> - название

<?echo $arItem["DETAIL_PAGE_URL"]?> - ссылка на детальную новость (статью)

<?echo $arItem["PREVIEW_TEXT"];?> - текст анонса

<?echo $arResult["DETAIL_TEXT"];?> - детальный текст

<?=$arItem["PREVIEW_PICTURE"]["SRC"]?> - изображение анонса

<?=$arItem["DETAIL_PICTURE"]["SRC"]?> - изображение детальное

<?=$arResult['DISPLAY_ACTIVE_FROM']?> - дата начала активности

ПОЛЕЗНЫЕ УСЛОВИЯ

Если картинки нет- то вывести "нет картинки"

<?if (strlen($arItem["DETAIL_PICTURE"]["SRC"])>0):?> 
      <img src="<?=$arItem["DETAIL_PICTURE"]["SRC"]?>"/> 
<?else:?> 
       нет картинки 
<?endif?>

Включаемая область в режиме php.

<? 
        $APPLICATION->IncludeFile( 
        SITE_DIR."include/flash.php", 
        Array(), 
        Array("MODE"=>"php") 
       ); 
?>

Количество товара на складе:

<? 
          $ar_res = CCatalogProduct::GetByID($arElement['ID']); 
          echo "<br>На складе: "; 
          print_r($ar_res['QUANTITY']); 
          echo " шт."; 
?>

Вывести название раздела внутри элемента. Например в детальной новости, указать к какому из разделов она относится:

 <?echo $arResult["SECTION"]["PATH"][0]["NAME"]?>

Вывести меню нужного типа в шаблоне битрикс

 <? 
$APPLICATION->IncludeComponent("bitrix:menu", "top_menu", array( 
"ROOT_MENU_TYPE" => "top",  
//В данном случаее меню типа top 
"MENU_CACHE_TYPE" => "A", 
"MENU_CACHE_TIME" => "3600", 
"MENU_CACHE_USE_GROUPS" => "Y", 
"MENU_CACHE_GET_VARS" => array( 
), 
"MAX_LEVEL" => "1", 
"CHILD_MENU_TYPE" => "left", 
"USE_EXT" => "N", 
"DELAY" => "N", 
"ALLOW_MULTI_SELECT" => "N" 
), 
false 
); 
?>

Подключение веб мессенджера в шаблоне сайта

<?$APPLICATION->IncludeComponent("bitrix:im.messenger", "", Array(), null, array("HIDE_ICONS" => "N"));?>

Вывести текст описания свойства инфоблока. Например, в форме добавления/редактирования элемента инфоблока для пользователей:

<?=$arResult["PROPERTY_LIST_FULL"][$propertyID]["HINT"]?>

Вывести текущую дату из установленной на сервере

<? echo date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL")), time()); ?>