Антон Рябов bio photo

Антон Рябов

Не люблю бриться и у меня умный взгляд.

Email Twitter Telegram Github PGP RSS

Установка LiveStreet CMS




Обзор

Заинтересовался данной CMS, при запросе в гугле “livestreet cms + nginx” попал вот на такую статью. Она мне не совсем подошла, так как, как минимум я использую CentOS/RHEL. Так что внесу свою лепту.

Тестовая среда

Тестирую я обычно на отдельном сервере, на котором уже готова среда nginx+php-fpm+mysql. По мимо стандартных репозиториев, используются epel, nginx и remi. Установлены пакеты версий:

$ nginx -v
nginx version: nginx/1.6.1
$ mysql -V
mysql  Ver 14.14 Distrib 5.5.37, for Linux (x86_64) using readline 5.1
$ php -v
PHP 5.4.28 (cli) (built: May  2 2014 19:09:57)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2014 Zend Technologies

Php-fpm работает через сокет. Далее пойдем по шагам из указанного выше мануала.

Конфигурируем nginx

За свою карьеру я собрал большой багаж опыта работы с веб-сервером Nginx и некоторые моменты освещал в данном блоге. Для навигации по теме используйте страницу Nginx 101


Я никогда не удаляю дефолтный конфиг, только меняю имя с default.conf на default. В RHEL более удобная структура конфигов чем в Debian like, поэтому я делаю просто:

$ vim /etc/nginx/conf.d/live.domain.org.conf

В названиях конфигов я использую доменное имя и .conf чтобы он применился при релоаде веб-сервера. Содержимое конфига в моем случае не претерпело сильных изменений:

server {
  listen 80;
  server_name live.domain.org;

  access_log /var/log/nginx/access_log;
  error_log /var/log/nginx/error_log;

  root /var/www/live;
  index index.php;

  location / {
    try_files $uri $uri/ /index.php?q=$uri&$args;
  }

  location ~ \.php {
    fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }

  location ~ \.(tpl|xml|log)$ {
    deny all;
  }
}

Перезагружаем Nginx: - автор немного перепутал, либо не придает этому значения. Между restart и reload есть принципиальная разница.

$ service nginx reload

Подготавливаемся к установке Livestreet

Для каждого проекта я выделяю отдельный каталог в папке /var/www, таким образом путь до файлов сайта будет /var/www/live. В описанной в мануале проверке работы PHP, в моем случае, нет смысла. Так что я пропущу этот шаг.

Настраиваем mysql

Вот тут наверно у меня возникли самые большие разногласия с автором. Подключаемся к консоли управления mysql:

$ mysql -uroot -p

Создаем новую БД:

> CREATE DATABASE live CHARACTER SET utf8 COLLATE utf8_general_ci;

Давать все привилегии нет смысла, перечисленных ниже достаточно, как показывает практика, для работы любой CMS:

> GRANT SELECT,LOCK TABLES,CREATE TEMPORARY TABLES,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX ON live.* TO 'liveuser'@'localhost' identified by 'passwd';

Чтобы применить изменения в политиках доступа, т.е. чтобы новый пользователь смог подключиться к БД, необходимо выполнить команду ниже (и выполнять всегда, когда вы производите любые действия по изменению прав доступа):

> flush privileges;

Ну и самое печальное, люди продолжают использовать exit, когда есть \q.

> \q

Кстати, сейчас заметил, что у автора мануала какая-то странная нумерация - 4.0, 4.1, 4. (?)

Установка LS

Ну с этим трудностей возникнуть не должно, единственное, что лучше указать ссылку на список релизов, а не на конкретную версию. В общем-то, скачали, распокавали, в браузере открыли http://live.domain.org/install и выполнили установку. Удаляем папку install.

Sphinx

Sphinx нужен чтобы работал поиск по сайту, были некоторые проблемы с mysql и типом таблиц InnoDB, но сейчас все работает (имеется ввиду ОС RHEL). Установим sphinx:

$ yum install sphinx

Конфиг для CentOS имеет немного другой вид.

$ cp /etc/sphinx/sphinx.conf /etc/old_sphinx.conf
$ vim /etc/sphinx/sphinx.conf

У меня конфиг получился вот такой:

## Конфигурационный файл Sphinx-а для индексации LiveStreet
#######################
# Описываем индексы
#######################
# Источник-родитель для всех остальных источников. Здесь указываются параметры доступа
# к базе данных сайта
source lsParentSource
{
        type            = mysql
        sql_host        = localhost
        sql_user        = user
        sql_pass        = pass
        sql_db          = db_name
        sql_port        = 3306
        # Для ускорения работы прописываем путь до MySQL-го UNIX-сокета (чтобы
        # операции с БД происходили не через TCP/IP стек сервера)
        #sql_sock        = /var/run/mysqld/mysqld.sock
        sql_sock = /var/lib/mysql/mysql.sock
        mysql_connect_flags     = 32 # 32- включение сжатие при обмене данными с БД
        # Включам нужную кодировку соединения и выключаем кеш запросов
        sql_query_pre                   = SET NAMES utf8
        sql_query_pre                   = SET SESSION query_cache_type=OFF
}
# Источник топиков
source topicsSource : lsParentSource
{
        # запрос на получения данных топиков
        sql_query               = \
                SELECT t_fast.topic_id, t_fast.topic_title, UNIX_TIMESTAMP(t_fast.topic_date_add) as topic_date_add, \
                tc.topic_text, t_fast.topic_publish \
                FROM live_topic as t_fast, live_topic_content AS tc \
                WHERE t_fast.topic_id=tc.topic_id AND t_fast.topic_id>=$start AND t_fast.topic_id<=$end
        # запрос для дробления получения топиков на неколько итераций
        sql_query_range         = SELECT MIN(topic_id),MAX(topic_id) FROM live_topic
        # сколько получать объектов за итерацию
        sql_range_step          = 1000
        # Указываем булевый атрибут критерия "топик опубликован". Для возможности указания этого критерия при поиске
        sql_attr_uint = topic_publish
        # Атрибут даты добавления, типа "время"
        sql_attr_timestamp      = topic_date_add
        # мульти-аттрибут "теги топика"
        sql_attr_multi  = uint tag from query; SELECT topic_id, topic_tag_id FROM live_topic_tag
        sql_ranged_throttle     = 0
}
# Источник комментариев
source commentsSource : lsParentSource
{
        sql_query               = \
                        SELECT comment_id, comment_text, UNIX_TIMESTAMP(comment_date) as comment_date, comment_delete \
                        FROM live_comment \
                        WHERE target_type='topic' AND comment_id>=$start AND comment_id<=$end AND comment_publish=1
        sql_query_range         = SELECT MIN(comment_id),MAX(comment_id) FROM live_comment
        sql_range_step          = 5000
        sql_attr_uint = comment_delete
        sql_attr_timestamp      = comment_date
}
#######################
# Описываем индексы
#######################
index topicsIndex
{
        # Источник, который будет хранить данный индекса
        source                  = topicsSource
        path                    = /var/lib/sphinx/topicIndex
        # Тип хранения аттрибутов
        docinfo                 = extern
        mlock                   = 0
        # Используемые морфологические движки
        morphology = stem_enru
        # Кодировака данных из источника
        charset_type            = utf-8
        # Из данных источника HTML-код нужно вырезать
        html_strip                              = 1
        html_remove_elements = style, script, code
}
# Индекс комментариев
index commentsIndex
{
        source                  = commentsSource
        path                    = /var/lib/sphinx/commentsIndex
        docinfo                 = extern
        mlock                   = 0
        morphology = stem_enru
        charset_type            = utf-8
        # Из данных источника HTML-код нужно вырезать
        html_strip                              = 1
        html_remove_elements = style, script, code
}
#######################
# Настройки индексатора
#######################
indexer
{
        # Лимит памяти, который может использавать демон-индексатор
        mem_limit                       = 128M
}
#######################
# Настройка демона-поисковика
#######################
searchd
{
        # Адрес, на котором будет прослушиваться порт
        #address                         = 127.0.0.1
        listen = 127.0.0.1
        # Ну и собственно номер порта демона searchd
        port                            = 3312
        # Лог-файл демона
        log                                     = /var/log/sphinx/searchd.log
        # Лог поисковых запросов. Если закомментировать,то логировать поисковые строки не будет
        query_log                       = /var/log/sphinx/query.log
        # Время в секундах, которое ждет демон при обмене данными с клиентом. По исчерпании происходит разрыв коннекта
        read_timeout            = 5
        # Максимальное количество одновременно-обрабатываемых запросов. 0 означает дофига, а точнее без ограничения
        max_children            = 100
        # Файл, в который сохраняется PID-процесса при запуске
        pid_file                        = /var/log/sphinx/searchd.pid
}

Настраиваем под себя sql_user, sql_pass, sql_db. Не забываем поменять стандартный «prefix_» на наш (вы же при установке действительно выбрали себе уникальный префикс для таблиц?)

Здесь, автор оригинальной статьи, подразумевает что в строчках, например:

sql_query_range         = SELECT MIN(topic_id),MAX(topic_id) FROM PREFIX_topic

Нужно заменить PREFIX, на ваш префикс, который вы указали при инсталяции CMS. Далее нужно созать индексы:

$ /usr/bin/indexer --all

Теперь запускаем:

$ service searchd start

И добавляем в автозагрузку:

$ chkconfig searchd on

И настроим автоматическую индексацию:

$ crontab -e

Дописываем в конец:

12 */3 * * *  /usr/bin/indexer --rotate topicsIndex > /dev/null 2>&1
*/50 * * * *  /usr/bin/indexer --rotate commentsIndex > /dev/null 2>&1

На этом моя настройка заканчивается, хотя вроде я еще Memcache настраивал, потом допишу, если да. И стоит упомянуть, что это актуально для версии 1.0.3, а разработчики готовят релиз версии 2, и там скорее всего будут изменения.

#Nginx #Linux