воскресенье, 9 марта 2014 г.

Установка MaxSite CMS

Одними из самых популярных систем управления наполнением сайтов являются Wordpress, Drupal и Joomla! Однако, хочется отметить отечественную разработку - MaxSite, за автором некоего Максима, фамилию которого я так и не смог нагуглить :) Из достоинств системы я отмечу использование фреймворка CodeIgniter, простоту настройки, нетребовательность к ресурсам.

В этой заметке я рассмотрю процесс установки MaxSite для совместной работы с веб-сервером Lighttpd.

1. Подготовка БД

Если в системе ещё не установлен MySQL, его сервер и клиент можно установить при помощи команды:
# apt-get install mysql-server mysql-client
Первым делом мы создадим для сайта пустую базу данных в MySQL:
CREATE DATABASE maxsite CHARSET UTF8;
INSERT INTO user(user, host, password) VALUES('maxsite', 'localhost', PASSWORD('maxsite_password'));
FLUSH PRIVILEGES;
GRANT ALL ON maxsite.* TO 'maxsite'@'localhost';
FLUSH PRIVILEGES;
Для генерации реального пароля я обычно пользуюсь программой pwgen из одноимённого пакета. Если пароль будет использоваться какой-то программой и его не нужно будет вводить руками, обычно я генерирую 16-символьные пароли:
$ pwgen 16
Один из паролей можно использовать в качестве замены для maxsite_password в командах выше.

2. Настройка CMS

Теперь скачиваем дистрибутив с официального сайта проекта и распаковываем его:
$ wget http://max-3000.com/download -O maxsite-cms-0.86x.zip
$ unzip maxsite-cms-0.86x.zip
$ cd cms-master
Теперь можно скопировать необходимое в каталог, к которому будет обращаться веб-сервер:
# cp -R application index.php system uploads /home/www/blog.domain.tld/
# cd /home/www
# chown -R www-data:www-data blog.domain.tld
# cd blog.domain.tld
Как выяснилось позднее, CMS требует наличия файлов .htaccess и sitemap.xml. Первый из них в моей системе будет пустым по той причине, что я не использую Apache. Пример второго файла, как оказалось, пустой и в самом дистрибутиве. Создадим эти файлы:
# touch .htaccess
# touch sitemap.xml
# chown www-data:www-data .htaccess sitemap.xml
Теперь пропишем в настройки CMS учётные данные для подключения к базе данных в файле application/config/database.php, взяв за его основу файл application/config/database.php-dist:
$ cd application/config
$ mv database.php-dist database.php
$ vim database.php
Достаточно лишь изменить три настройки:
$db['default']['username'] = 'maxsite';
$db['default']['password'] = 'maxsite_password';
$db['default']['database'] = 'maxsite';
Следующий файл, подлежащий настройке - application/config/mso_config.php. В нём я ничего не трогал, поэтому достаточно лишь переименовать его:
$ mv mso_config.php-dist mso_config.php
И, наконец, перед тем, как приступить к настройке веб-сервера настроим ещё один файл - application/maxsite/mso_config.php, за основу которого возьмём, как вы уже догадались, файл application/maxsite/mso_config.php-dist:
$ cd ../maxsite
$ mv mso_config.php-dist mso_config.php
В нём нужно прописать ключ, которым CMS будет шифровать Cookie:
$MSO->config['secret_key'] = 'secret_key';
Для его генерации я опять воспользовался pwgen, указав на этот раз 128 символов - слово "ключ" подразумевает под собой строчку в несколько раз длиннее того, что обычно используется в качестве пароля:
$ pwgen 128
После настройки сайта через веб-интерфейс можно будет также прописать в этот файл следующую настройку, которая отключит дальнейшую возможность повторно пройти процедуру инсталляции (делать это пока рано):
$mso_install = true;
3. Настройка веб-сервера Lighttpd

Вместо предполагаемого по умолчанию веб-сервера Apache, на который недвусмысленно намекают файлы .htaccess, я воспользуюсь веб-сервером Lighttpd, которым пользуюсь обычно.

Если в системе ещё не установлены Lighttpd и PHP, их можно установить при помощи команды:
# apt-get install lighttpd php5-cgi
Создадим файл настройки Lighttpd, эквивалентный .htaccess - /etc/lighttpd/conf-available/50-maxsite.conf:
$HTTP["host"] == "max.stupin.su" {

  server.document-root  = "/home/www/blog.domain.tld"

  url.rewrite-once = ( "^(/(?!(index\.php|application|uploads|robots\.txt|favicon\.ico).*))" => "/index.php/$1" )

  $HTTP["url"] =~ "^/uploads" {
    fastcgi.server = ()
  }
}
Для работы этого файла понадобится включить модуль rewrite, который в Debian включается не при помощи обычной для этого утилиты lighty-enable-mod, а простым раскомментированием соответствующей строчки в файле /etc/lighttpd/lighttpd.conf

После этого можно включить необходимые модули и только что созданный файл с настройками для maxsite:
# lighty-enable-mod fastcgi
# lighty-enable-mod fastcgi-php
# lighty-enable-mod maxsite
Осталось сообщить веб-серверу о необходимости применить новые настройки:
# /etc/init.d/lighttpd force-reload
4. Настройка CMS через веб-интерфейс

Теперь можно перейти в браузере по адресу blog.domain.tld и завершить процедуру настройки.

Проверка правил rewrite:
Проверка правил rewrite
Ввод настроек блога и проверка правильности настройки веб-сервера:
Ввод настроек блога и проверка правильности настройки веб-сервера
Рекомендация отключить дальнейшую возможность веб-настройки:
Рекомендация отключить дальнейшую возможность веб-настройки
На этом этапе стоит воспользоваться рекомендацией и прописать в файл application/maxsite/mso_config.php настройку, запрещающую дальнейшую возможность изменения настроек сайта через веб:
$mso_install = true;
Установленная система:
Установленная система
5. Смена типа таблиц

Заметил, что автоматически создаются таблицы MyISAM, поэтому переконвертировал все таблицы в InnoDB. Мне такой выбор кажется несколько странным, т.к. в MyISAM нет внешних ключей, нет транзакций, все блокировки - на уровне таблиц, а не строк. Довольно ненадёжное решение. Если уж экономить на спичках, тогда лучше было бы использовать SQLite вместо MySQL.
ALTER TABLE mso_cat2obj ENGINE=InnoDB;
ALTER TABLE mso_category ENGINE=InnoDB;
ALTER TABLE mso_comments ENGINE=InnoDB;
ALTER TABLE mso_comusers ENGINE=InnoDB;
ALTER TABLE mso_groups ENGINE=InnoDB;
ALTER TABLE mso_links ENGINE=InnoDB;
ALTER TABLE mso_meta ENGINE=InnoDB;
ALTER TABLE mso_options ENGINE=InnoDB;
ALTER TABLE mso_page ENGINE=InnoDB;
ALTER TABLE mso_page_type ENGINE=InnoDB;
ALTER TABLE mso_users ENGINE=InnoDB;
Дальнейшая настройка CMS выходит за рамки этой заметки.

P.S. По прошествии некоторого времени использования системы хочется отметить недостатки:
  • неудобство управления заметками из админки, т.к. заметки выбираются из выпадающего списка, а не классическими галочками, из-за чего становится невозможным выбрать несколько заметок сразу,
  • встроенный редактор заметок, использующий свои собственные теги в квадратных скобках, которые не обрабатываются без установки дополнительного плагина. Уж лучше встроенный редактор использовал бы обычные HTML-коды или плагин был бы встроен основной функционал системы, а так как есть - не логично,
  • неудобство управления картинками. Нельзя одновременно выбрать и загрузить несколько картинок, не выбирая их по одной. Зачем-то приходится выбирать папку, в которую необходимо загрузить картинки. Нельзя только что загруженные картинки сразу вставить в текст - приходится искать их в списке загруженных и отмечать каждую отдельно.

Комментариев нет: