+68.62
425 читателей, 63 топика

Установка Livestreet с нуля (Debian): nginx + mysql + php-fpm + apc + memcached + sphinx

Возможно, этот гайд даже кому-нибудь понадобится.

0) Итак, у нас имеется свежепоставленный Debian с настроенным ssh-доступом и юзер с правами, достаточными для работы sudo.
Здесь и далее "#" в начале команды означает, что ее необходимо запускать с правами root-пользователя (например, с помощью sudo)
1) Пакеты будем ставить из репозитория dotdeb, поэтому для начала добавим его в sources.list:
# nano /etc/apt/sources.list

дописываем в конец файла
deb http://packages.dotdeb.org stable all

Далее импортируем ключ dotdeb'а:
wget http://www.dotdeb.org/dotdeb.gpg -O - -q | sudo apt-key add -

Обновляем список пакетов
# apt-get update

Читать дальше →

Кеширование или как много хорошего в этом слове


Думаю не для многих разработчиков есть секретом что в ЛС встроен механизм кеширования информации, полученной от БД. Но мои частые наблюдения сообщают о другом — я не могу вспомнить сторонние плагины, которые использовали бы кеширование в своей работе. Да что лукавить — я сам его обходил стороной часто. Поэтому этот топик призван пролить луч света на использование кеширования в ЛС в своих плагинах, т.к. это довольно просто.

Читать дальше →

Новое в LiveStreet Framework: хранилище "ключ => значение" - модуль Storage

Сегодня я расскажу вам о ещё одном хорошем пополнении возможностей для разработчиков — в фреймворке LiveStreet, на котором построена LiveStreet CMS добавлен новый модуль — Storage (написан мной по заказу ООО «ЛС СОФТ»), который является хранилищем типа «ключ => значение». Данное хранилище позволяет легко и быстро работать с небольшими объемами данных, CRUD операции (создание, чтение, обновление и удаление) с которыми теперь занимают всего одну строку кода.

Хранилище является аналогом плагина «Хранилище настроек (Config Engine)», с небольшими отличиями в АПИ, но тем не менее имеет общие элементы и поэтому разработчикам, уже знакомым с указанным плагином будет легче разобраться с хранилищем лс.

Читать дальше →

Настраиваем сервер для LiveStreet. Приложение A. Переход на PHP 5.4

Предыдущие части:

PHP 5.3 Reaching End of Life
11-Jul-2013 The PHP development team announces the immediate availability of PHP 5.3.27. About 10 bugs were fixed, including a security fix in the XML parser (Bug #65236).

Please Note: This will be the last regular release of the PHP 5.3 series. All users of PHP are encouraged to upgrade to PHP 5.4 or PHP 5.5. The PHP 5.3 series will receive only security fixes for the next year.
Новости уже сто лет в обед. Поддержка PHP 5.3 завершена. Всем заинтересованным лицам предлагается переходить на PHP 5.4 или PHP 5.5. Продолжать жить на больше не поддерживаемой версии, мысль не очень хорошая, хотя бы из соображений безопасности (фиксы дыр в безопасности это то, что надо бы постоянно ставить). Учитывая, что следование инструкции устанавливало именно PHP 5.3, я решил описать что нужно сделать чтобы перевести установку на использование PHP 5.4.

Читать дальше →

Выносим обработку евентов в отдельный файл

В транковой версии на github.com появилась возможность выносить объемную обработку евентов из экшена в отдельные файлы.

Эти файлы размещаются в каталоге /classes/actions/[action]/Event[Name].class.php, где [action] — это название экшена, которому принадлежит евент, [Name] — название внешнего обработчика евента.

Рассмотрим более подробно.
Пусть у нас будет экшен ActionBlog.class.php:
<?php

class ActionBlog extends Action {

	public $oUserCurrent=null;

	public function Init() {
		$this->oUserCurrent=$this->User_GetUserCurrent();

		$this->SetDefaultEvent('index');
	}

	/**
	 * Регистрируем евенты
	 *
	 */
	protected function RegisterEvent() {
		/**
		 * Регистрируем внешние обработчики евентов
		 */
		$this->RegisterEventExternal('Topic','ActionBlog_EventTopic');

		$this->AddEvent('index','EventIndex');
		$this->AddEventPreg('/^topic$/i','/^(\d+)\.html$/i','/^$/i','Topic::EventShowTopic');
		$this->AddEventPreg('/^topic$/i','/^list$/i','/^$/i','Topic::EventList');
	}


	protected function EventIndex() {
		/**
		 * Устанавливаем шаблон для вывода
		 */
		$this->SetTemplateAction('index');
	}
}
?>

Читать дальше →

Настраиваем сервер для LiveStreet. Часть V. Apache.

Предыдущие части:

Начиная с этого момента настраивать окружение можно по разному. Глобально можно свести к трём тезисам:
  • Применить light HTTP сервер для раздачи статики и проксирования тяжёлых запросов
  • Применить fast cgi PHP
  • Применить кэширование данных в оперативной памяти
Для каждого пункта возможно использовать разный софт и/или различные связки программ. И во всех случаях получить хороший результат.

Использовать или нет Apache это вопрос очень близкий к религиозному. С моей точки зрения это стоит того, но я не буду утверждать что это наилучшее возможное решение. Есть свои плюсы и минусы.

В любом случае, я описываю именно то окружение, которые использую сам, и субъективно считаю наилучшим по совокупности достоинств. Это проверенное и работающее решение: nginx+apache+php-fpm

Читать дальше →

Настраиваем сервер для LiveStreet. Часть IV. MySQL.

Предыдущие части:

Сначала генерируем и запоминаем пароль для MySQL-аккаунта root, который попросят во время установки:
pwgen -c -n 10 1


И запускаем установку:
apt-get install percona-server-server-5.5 percona-server-client-5.5


Читать дальше →

Новый модуль для работы с изображениями и модуль FS

В разрабатываемой новой версии мы обновили модуль Image для работы с изображениями.
Теперь он основан на библиотеке Imagine и предоставляет удобные методы для манипуляции с изображениями. Дополнительной особенностью является поддержка разных PHP библиотек (драйверов): gd, imagick и gmagick. Нужный драйвер устанавливается в конфиге $config['module']['image']['driver']='imagick';

/**
 * Получаем параметры
 */
$aParams=$this->Image_BuildParams('gallery');
/**
 * Создаем объект изображения
 */
if(!$oImage=$this->Image_Open($sFileSource,$aParams)) {
	$sMsgError=$this->Image_GetLastError();
}


Читать дальше →

Валидация данных в LiveStreet 0.6

В транковую версию LS на github.com добавлен новый функционал — валидация данных и полей сущностей. Этот функционал призван заменить функцию func_check(). За основу был взят функционал валидации Yii.

На данный момент доступны следующие типы валидации:
  • Boolean — проверка значения на булевый тип
  • Date — проверка значения на формат даты и времени
  • Email — проверка корректности емайл
  • Inline — валидация произвольным методом сущности или другого объекта
  • Number — проверка на числа
  • Required — проверка на пустое или конкретное значение
  • String — проверка строк на длину
  • Type — проверка на тип значения
  • Url — проверка на корректность URL


Как использовать

В сущности необходимо составить список правил валидации.
class PluginTest_ModuleMain_EntityTest extends Entity {

	protected $aValidateRules=array(
		array('login, name','string','max'=>7,'min'=>'3'),
		array('title','my','on'=>'register'),
	);

	public function ValidateMy($sValue,$aParams) {
		if ($sValue!='Мега заголовок') {
                    return 'Ошибочный заголовок';
                }
		return true;
	}
}


Читать дальше →

Система блоков

Если пробежаться глазами по сайтам, созданным с ее помощью несложно заметить, что большинство из них наследует две колонки стандартных шаблонов.
Но ведь LS может похвастаться простой, но от этого не менее функциональной системой блоков. Почему владельцы сайтов не используют ее? Возможно, дело в документации?
Это я сегодня с Вашей помощью и попробую исправить.


Читать дальше →