Ни в коем случае не претендую на полноту и безупречность изложения. Это по сути квинтессенция моих изысканий по настройке controller.cms-test-lab.com.
Изложение будет по пунктам с подпунктами, т.к. есть надежда на обсуждение и удобнее будет ссылаться на пару чисел. Вопросов и шагов много.
Начальные условия:
"Чистый" cервер под управлением FreeBSD с установленными, но не настроенными apache, nginx и mysql. По вопросам установки - не ко мне. Не компетентен. И обратите внимание в вашем случае доменные имена и пути к файлам могут изменяться. Так же как и наличие/отсутствие модулей и отдельных настроек.
Будущая структура каталогов:
/etc/rc.conf | во FreeBSD отвечает за автостарт сервисов после перезагрузки системы. |
/etc/localtime | Данные о часовом поясе. |
/home/mysql | Каталог с настройками и БД mysql. |
/home/mysql/my.cnf | Файл настроек mysql. |
/home/php | В этом каталоге будет временные файлы сессий и акселератора. |
/home/php/eaccel | Кеш eAccelerator'а. |
/home/php/sessions | Каталог для хранения временных файлов сессий. |
/home/www | Каталог для размещения публичных файлов контроллера и сайтов. |
/home/www/controller | Каталог установки контроллера. |
/home/www/controller/bitrix | Ядро контроллера. |
/home/www/controller/bitrix/clients | Общая часть сайтов. Всегда должна располагаться в /bitrix/clients от корня контроллера. |
/home/www/controller/index.php | Страница на которой размещен компонент создания новых сайтов. |
/home/www/site_template | Начальная публичка сайтов. Копируется в индивидуальный рут сайта компонентом. |
/home/www/site_template/db | Каталог с начальным дампом БД. |
/home/www/sites | В подкаталогах этого каталога будут жить сайты. |
/usr/local/etc/apache/httpd.conf | Файл настроек веб сервера. |
/usr/local/etc/apache/vhosts | Каталог в который будут записаны файлы настроек веб сервера для обслуживания сайтов. |
/usr/local/etc/nginx/nginx.conf | Файл настроек фронтенда. |
/usr/local/etc/nginx/vhosts | Каталог в который будут записаны файлы настроек фронтенда для обслуживания сайтов. |
/usr/local/etc/php.ini | Настройки PHP. |
/usr/local/etc/rc.d/mysql-server | Скрипт запуска сервера БД. |
/usr/local/sbin/apachectl | Скрипт перезапуска веб сервера. |
/usr/share/zoneinfo/Europe/Kaliningrad | Данные таймзоны. |
Что нужно ОБЯЗАТЕЛЬНО прочитать перед началом установки:
В файл /usr/local/etc/apache/httpd.conf добавляем следующие строки:
ServerName controller.cms-test-lab.com MaxRequestsPerChild 1000 BindAddress * NameVirtualHost * <VirtualHost *> ServerAdmin max@bitrixsoft.com DocumentRoot /home/www/controller ServerName www.cms-test-lab.com </VirtualHost> #LoadModule unique_id_module libexec/apache/mod_unique_id.so #AddModule mod_unique_id.c <IfModule mod_php5.c> AddType application/x-httpd-php .php </IfModule> <IfModule mod_dir.c> <IfModule mod_php5.c> DirectoryIndex index.php index.html </IfModule> </IfModule> <Directory /> Options FollowSymLinks AllowOverride All </Directory>
|
В файл /etc/rc.conf добавляем:
Выполнить следующие команды:
mkdir /home/www mkdir /home/www/controller chown -R www:www /home/www/controller cd /home/www/controller echo "<?echo phpinfo();?>" > index.php chown www index.php
|
командой:
/usr/local/sbin/apachectl start
|
И открываем в браузере url http://controller.cms-test-lab.com/
2. Настройка и запуск MySQL.
2.1 Прописываем "автостарт"
В файл /etc/rc.conf добавляем:
mysql_enable="YES" mysql_dbdir="/home/mysql"
|
2.2 Создание папки для БД
mkdir /home/mysql chown mysql:mysql /home/mysql
|
2.3 Настройка параметров сервера.
Создадим файл /home/mysql/my.cnf следующего содержания:
[mysqld] skip-bdb skip-innodb character-set-server=cp1251 default-character-set=cp1251 skip-character-set-client-handshake="yes"
|
Это минимум необходимо достаточный для корректного функционирования БУС.
(А innodb я лично не долюбливаю...)
2.4 Запускаем сервер командой:
/usr/local/etc/rc.d/mysql-server restart
|
3. Подготовка php.
3.1 Создаем каталог для файлов сессий
mkdir /home/php mkdir /home/php/sessions chown -R www:www /home/php/sessions
|
3.2 Создаем каталог для кеша акселератора
mkdir /home/php/eaccel chmod u+rwx,g+rwx,o+rx /home/php/eaccel chown www:www /home/php/eaccel
|
3.3 правка /usr/local/etc/php.ini
копируем файлик
cd /usr/local/etc cp php.ini-dist php.ini
|
и добавляем в него строчки:
max_execution_time = 60 memory_limit = 32M session.save_path = "/home/php/sessions" eaccelerator.cache_dir="/home/php/eaccel" eaccelerator.allowed_admin_path="/home/www" date.timezone = Europe/Kaliningrad
|
3.4 Для полного счастья (настройка timezone)
надо выполнить команду:
cp /usr/share/zoneinfo/Europe/Kaliningrad /etc/localtime
|
3.5 Перезапуск apache
надо выполнить команду:
/usr/local/sbin/apachectl restart
|
4. Настройка nginx (2-х уровневая конфигурация).
4.1 Правка конфигурации.
Файл /usr/local/etc/nginx/nginx.conf
http{
#Это необходимо для обслуживания большого количества виртуальных серверов server_names_hash_max_size 10240; server_names_hash_bucket_size 128;
#Должно коррелировать с max_post_size настройкой php client_max_body_size 8M; } server {
listen 80; server_name controller.cms-test-lab.com;
location / { root /home/www/controller; index index.php index.html index.htm; }
error_page 404 /404.php;
# redirect server error pages to the static page /50x.html error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/local/www/nginx-dist; }
# proxy the PHP scripts to Apache listening on 127.0.0.1:80 location ~ \.php$ { proxy_pass http://127.0.0.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; }
# deny access to .htaccess files location ~ /\.ht { deny all; } }
|
4.2 Настройка apache.
В файл /usr/local/etc/apache/httpd.conf добавляем:
BindAddress 127.0.0.1 #Для корректной работы модуля статистики. LoadModule realip_module libexec/apache/mod_realip.so AddModule mod_realip.c <IfModule mod_realip.c> RealIP on </IfModule>
|
4.3 Прописываем "автостарт"
В файл /etc/rc.conf добавляем:
4.4 Перезапускаем apache и nginx.
/usr/local/sbin/apachectl restart /usr/local/etc/rc.d/nginx start
|
и тестируем работу.
На этом настройка рабочей среды закончена. Приступаем к собственно установке БУС.
5. Установка БУС.
5.1 Загрузка дистрибутива bsm_6_business_src.tar.gz в каталог /home на сервере.
И его распаковка:
cd /home/www/controller tar xzf /home/bsm_6_business_src.tar.gz chown -R www:www . find . -type d -exec chmod u=rwx,g=rx,o=rx {} \; find . -type f -exec chmod u=rw,g=r,o=r {} \;
|
5.2 В браузере (FF или IE) открываем http://controller.cms-test-lab.com/
5.3 Проходим мастер установки:
- Указываем лицензионный ключ включающий в себя модуль Контроллера.
- НЕ Установить демонстрационные данные.
- Пользователь базы данных: Существующий.
- Имя пользователя: root.
- Имя базы данных: controller.
- Логин: root.
- Права на доступ к файлам сайта:0664.
- Права на доступ к папкам сайта:0775.
- Ограничение по памяти:32.
5.4 сразу по окончании установки
В файл /home/www/controller/bitrix/php_interface/dbconn.php добавляем:
@umask(~BX_DIR_PERMISSIONS);
|
Это позволяет прозрачно исправлять ошибки работы БУС с правами при создании и копировании файлов.
5.5 Обновление и настройка БУС
- На страницах http://controller.cms-test-lab.com/bitrix/admin/sysupdate.php?lang=ru и http://controller.cms-test-lab.com/bitrix/admin/update_system.php?lang=ru обновляем систему обновлений.
- Обновляем все модули на странице http://controller.cms-test-lab.com/bitrix/admin/update_system.php?lang=ru
- Далее на странице http://controller.cms-test-lab.com/bitrix/admin/module_admin.php?lang=ru устанавливаем ВСЕ модули КРОМЕ модуля контроллера.
5.6 Выделяем из нашей установки общее ядро.
cd /home/www/controller/bitrix mkdir clients chmod u+rwx,g+rwx,o+rx clients chown www:www clients cp -Rp `ls -a|egrep -v '^(clients|cache|managed_cache|stack_cache |cache_image|php_interface|templates|tmp|backup|\.|\.\.)$'` clients/
|
5.7 Установка и настройка модуля контроллера.
Щелкнуть Установить на странице http://controller.cms-test-lab.com/bitrix/admin/sysupdate.php?lang=ru
На странице http://controller.cms-test-lab.com/bitrix/admin/settings.php?lang=ru&mid=controller в качестве значения параметра "Путь к папке с общим ядром (относительно корня сайта-контроллера):" указать /bitrix/clients
Завести пользователя site_add с паролем password в группе site_add с правом на регистрацию сайта в контроллере. Этот пользователь будет использоваться в мастере создания сайта для регистрации сайта в контроллере.
6. Компонент создания новых сайтов.
6.1 Создаем страницу, размещаем на ней компонент bitrix:controller.shared.add
и настраиваем:
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $APPLICATION->SetTitle("Создание сайта"); ?><?$APPLICATION->IncludeComponent("bitrix:controller.shared.add", "template1", Array( "SET_TITLE" => "Y", "CONTROLLER_URL" => "http://controller.cms-test-lab.com/",//URL контроллера сайтов "URL_SUBDOMAIN" => "cms-test-lab.com",//Домен верхнего уровня "PATH_VHOST" => "/home/www/sites",//Полный путь к папке для размещения арендуемых сайтов "MYSQL_PATH" => "/usr/local/bin/mysql",//Путь к исполняемому файлу mysql "MYSQL_USER" => "root",//Логин пользователя MySQL с привилегией создания БД "MYSQL_PASSWORD" => "",//Пароль пользователя MySQL с привилегией создания БД "MYSQL_DB_PATH" => "/home/www/site_template/db/dump.sql",//Путь к файлу с начальным дампом БД "DIR_PERMISSIONS" => "0775",//Права для каталогов арендуемых сайтов "FILE_PERMISSIONS" => "0664",//Права для файлов арендуемых сайтов "PATH_PUBLIC" => "/home/www/site_template/public",//Файлы публичной части арендуемых сайтов "MEMORY_LIMIT" => "32M",//Ограничение памяти для арендуемых сайтов "APACHE_ROOT" => "/usr/local/etc/apache/vhosts",//Каталог конфигурационных файлов виртуальных сайтов для apache "NGINX_ROOT" => "/usr/local/etc/nginx/vhosts",//Каталог конфигурационных файлов виртуальных сайтов для nginx "RELOAD_FILE" => "/tmp/apache_reload",//Файл флажок для перезагрузки веб сервера "REGISTER_IMMEDIATE" => "N",//Регистрация при создании или отложенная ) );?> <br /> <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
|
6.2 У размещенного компонента копируем шаблон.
И в каталоге шаблона меняем файлы шаблонов конфигурации apache и nginx'a
6.2.1 apache.conf.php
Это шаблон. Компонент его берет. Заменяет решетки на конкретные значения и складывает в /usr/local/etc/apache/vhosts/999-.conf
<VirtualHost *> DocumentRoot "#DOCUMENT_ROOT#" ServerName #SITE_ID#.#URL_SUBDOMAIN# SetEnv BX_PERSONAL_ROOT "/bitrix_personal" SetEnv CONTROLLER_URL "http://controller.cms-test-lab.com/" SetEnv ADMIN_PASS "password" php_admin_value open_basedir #DOCUMENT_ROOT#:/home/www/controller/bitrix/clients/:/home/php/upload php_admin_value disable_functions dl,shell_exec,exec, system,passthru,popen,proc_open,proc_nice,proc_get_status,proc_close,proc_terminate,posix_mkfifo </VirtualHost>
|
6.2.2 nginx.conf.php
Данный конфиг расчитан, на использование технологии статического html кеша.
server { listen 80; server_name #SITE_ID#.#URL_SUBDOMAIN#;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host;
#Check if it is Site Wizard active in controlled site # After wizard run you may remove this check jast to save one # system call per request if ($uri = "/index_controller.php") { break; }
if (-f #DOCUMENT_ROOT#index_controller.php ) { rewrite ^(/bitrix/admin/main_controller\.php)$ $1 last; rewrite ^(.*)/$ /index_controller.php redirect; rewrite ^(.*)\.php$ /index_controller.php redirect; }
location = /index_controller.php { proxy_pass http://127.0.0.1; } #End of check
location / { root #DOCUMENT_ROOT#; }
location /bitrix/ { root #DOCUMENT_ROOT#; index index.php index.html index.htm; }
location /bitrix_personal/html_pages/ { root #DOCUMENT_ROOT#; index index@.html; if (!-f $request_filename) { rewrite ^/bitrix_personal/html_pages(.*)@(.*)\.html$ $1.php?$2 break; rewrite ^/bitrix_personal/html_pages(.*)\.html$ $1\.php break; proxy_pass http://127.0.0.1; } }
location ~ /bitrix/.*\.php$ { proxy_pass http://127.0.0.1; }
location ~ \.php$ {
if ($request_method = POST ) { break; proxy_pass http://127.0.0.1; }
if ($http_cookie !~ "PHPSESSID=" ) { rewrite ^(.*)\.php$ /bitrix_personal/html_pages$1@$args.html? last; }
proxy_pass http://127.0.0.1; }
location ~ /$ {
if ($request_method = POST ) { break; proxy_pass http://127.0.0.1; }
if ($http_cookie !~ "PHPSESSID=" ) { rewrite ^(.*)/$ /bitrix_personal/html_pages$1/index@$args.html? last; }
proxy_pass http://127.0.0.1; }
error_page 404 /404.php;
# redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /var/www/nginx-default; }
# deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; }
}
|
6.3 Готовим структуру каталогов для обслуживания сайтов.
6.3.1 Каталог для размещения публичной части сайтов:
mkdir /home/www/sites chmod u+rwx,g+rwx,o+rx /home/www/sites chown www:www /home/www/sites
|
6.3.2 Каталог для размещения начального шаблона публичной части:
mkdir /home/www/site_template chmod u+rwx,g+rwx,o+rx /home/www/site_template chown www:www /home/www/site_template
|
6.3.3 Каталог для размещения начального дампа БД:
mkdir /home/www/site_template/db chmod u+rwx,g+rwx,o+rx /home/www/site_template/db chown www:www /home/www/site_template/db
|
6.3.4 Каталог для размещения файлов конфигурации nginx для обслуживания сайтов:
mkdir /usr/local/etc/nginx/vhosts chmod u+rwx,g+rwx,o+rx /usr/local/etc/nginx/vhosts chown www:www /usr/local/etc/nginx/vhosts
|
6.3.5 Каталог для размещения файлов конфигурации apache для обслуживания сайтов:
mkdir /usr/local/etc/apache/vhosts chmod u+rwx,g+rwx,o+rx /usr/local/etc/apache/vhosts chown www:www /usr/local/etc/apache/vhosts
|
6.4 Подготовка сервера для обслуживания сайтов.
6.4.1 В конфиг apache /usr/local/etc/apache/httpd.conf дописываем:
Include /usr/local/etc/apache/vhosts
|
6.4.2 В конфиг nginx /usr/local/etc/nginx/nginx.conf в раздел http {} дописываем:
include /usr/local/etc/nginx/vhosts/*;
|
6.4.3 применяем конфигурацию:
/usr/local/sbin/apachectl restart /usr/local/etc/rc.d/nginx restart
|
6.5 Подготовка стартовой публичной части сайтов.
В каталоге /home/www/site_template необходимо разместить комплект файлов которые будут копироваться компонентом при создании нового сайта.
6.5.1 .access.php
<? $PERM["/"]["*"]="R"; $PERM["/"]["1"]="W"; $PERM["bitrix"]["*"]="D"; $PERM["bitrix_personal"]["1"]="R"; ?>
|
6.5.2 .htaccess
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !/index_controller.php$ RewriteCond %{REQUEST_FILENAME} !.gif$ RewriteRule ^(.*)$ /index_controller.php [L]
|
6.5.3 .htaccess.controller
Options -Indexes ErrorDocument 404 /404.php
#php_flag session.use_trans_sid off #php_value display_errors 1 #php_flag allow_call_time_pass_reference 1
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-l RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !/bitrix/urlrewrite.php$ RewriteRule ^(.*)$ /bitrix/urlrewrite.php [L] </IfModule>
<IfModule mod_mime.c> AddType application/x-httpd-php .ico </IfModule>
<IfModule mod_dir.c> DirectoryIndex index.php index.html </IfModule>
<IfModule mod_expires.c> ExpiresActive on ExpiresByType image/jpeg "access plus 3 day" ExpiresByType image/gif "access plus 3 day" </IfModule>
|
6.5.4 index_controller.php
<?php
if((strlen($_SERVER["CONTROLLER_URL"]) <= 0) || (strlen($_SERVER["ADMIN_PASS"]) < 6)) { ?><html> <body> <font style="color:red"> Не определен адрес управляющего сайта или пароль доступа. Пожалуйста обратитесь в техническкую поддержку. </font> </body> </html><? die(); }
define("LANGUAGE_ID","ru"); define("B_PROLOG_INCLUDED", true);
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/mysql/database.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/mysql/main.php"); require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/tools.php"); IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/main.php");
if($_SERVER["REQUEST_URI"] != "/index_controller.php") LocalRedirect("/index_controller.php");
require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/classes/general/wizard.php");
$wizard = new CWizard("my:site_wizard"); $wizard->Install();
?>
|
6.5.5 bitrix_personal
Такой каталог должен быть создан.
6.5.6 bitrix_personal/php_interface
Такой каталог должен быть создан.
6.5.7 bitrix_personal/php_interface/after_connect.php
<? if(is_object($DB)) $DB->Query("SET NAMES 'cp1251'"); ?>
|
6.5.7 bitrix_personal/php_interface/init.php
6.5.6 bitrix_personal/html_pages
Такой каталог должен быть создан.
6.5.7 bitrix_personal/html_pages/.config.php
<? $arHTMLPagesOptions = array( "INCLUDE_MASK" => "*.php;*/", "EXCLUDE_MASK" => "/bitrix/*;/404.php", "FILE_SIZE" => "74113", "FILE_QUOTA" => "100", "~INCLUDE_MASK" => array( "0" => "'^.*?\.php$'", "1" => "'^.*?/$'", ), "~EXCLUDE_MASK" => array( "0" => "'^/bitrix/.*?$'", "1" => "'^/404\.php$'", ), "~FILE_QUOTA" => "104857600", "COMPRESS" => "", ?>
|