Вышла версия 2 Bludit CMS

Bludit CMS version 2 released

Несколько дней назад вышла вторая крупная версия системы управления сайтом Bludit. Это один из представителей класса flat file CMS, которые отличаются отсутствием требований к хранению своих данных в системах по управлению базами данных, например, SQL-серверов, и, соответствственно, отличаются высокой скоростью работы и надёжностью при минимальных системных требованиях.

Нетрудно заметить, что именно на Bludit СMS работает и сайт kostikov.co. В портфолио автора есть несколько разработанных для данной системы управления сайтом модулей расширения, а также статьи посвещённые теме настройки и эксплуатации Bludit.

В данной публикации рассматриваются новшества, появившиеся в v2.0, а также вопросы миграции и настройки обновлённой системы.

1. Что нового?

Автором Bludit CMS при помощи сообщества был переработан движок системы для более удобно работы со структурой сайта. Среди главных новшеств.

  • Страницы. Отказ от явного разбиения на страницы и посты. Теперь всё страницы которые, однако, разделяются на "статические", суть прежние обычные страницы, и "опубликованные" — прежние посты. Одним из следствий явилось исчезновение префикса /post из пути к постам. Теперь обращение ко всем страницам доступно по дружественному URL.
  • Категории. Теперь есть возможность систематизации страниц по различным группам.
  • Наследование. Можно назначит странице родителя для лучшего структурирования данных.
  • Протокол. Добавлен журнал действий и событий, произведённых в CMS.
  • Редактирование. Возможно использование редакторов SimpleMDE и TinyMCE.
  • API. Большое обновление.
  • Прочее. Новые темы и плагины.

Кроме того, помимо стандартной версии появилась специальная редакция Bludit PRO, которая доступна для спонсоров и участвующих в разработке проекта. От стандартной она отличается наличием двух специальных модулей расширения — Remote Content и Timemachine, которые для большинства пользователей будут вряд ли актуальны.

2. Миграция на новую версию

Ввду вышеупомянутых изменений обновление на v2.0 требует конвертации пользовательского содержимого в новый формат. Для этого разработан специальный скрипт migrate.php.

Рассмотрим данный процесс на примере этого сайта. Имеем установленный веб-сервер H2O с PHP 7.1 на базе FreeBSD 11.

root@beta:~ # uname -v
FreeBSD 11.1-RELEASE-p1 #0: Wed Aug  9 11:55:48 UTC 2017     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC
root@beta:~ # h2o -v
h2o version 2.2.2
OpenSSL: OpenSSL 1.0.2k-freebsd  26 Jan 2017
mruby: YES
root@beta:~ # php -v
PHP 7.1.10 (cli) (built: Sep 29 2017 09:17:09) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

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

root@beta:~ # cd /usr/local/www
root@beta:/usr/local/www # ll kostikov.co.tar.gz
-rw-r--r--  1 root  wheel  10032096 19 окт.  18:20 kostikov.co.tar.gz

Далее скачаем скрипт конвертации данных и выполним его.

root@beta:/usr/local/www/kostikov.co # php migrate.php | sed -e 's/<br>/|/g' | tr "|" "\n"

Successfuly created Migration Directory...
Removed non Bludit core plugin config: addtoany
Removed non Bludit core plugin config: ads4u
Removed non Bludit core plugin config: disqus
Removed non Bludit core plugin config: googletools
Removed non Bludit core plugin config: opengraph
Removed non Bludit core plugin config: rss
Removed non Bludit core plugin config: sitemap
Removed non Bludit core plugin config: textarea
Removed non Bludit core plugin config: yandextools
------------------------------
Failed Migrations (Posts): 0
Fixing Permissions...
Successfuly migrated.
Successfuly migrated.root@beta:/usr/local/www/kostikov.co # ll
total 46
-rw-r--r--   1 root  wheel      0 19 окт.  01:21 .megasync
drwxr-xr-x   2 root  wheel      2 15 окт.  03:00 .well-known/
-rw-r--r--   1 root  wheel     85 10 сент. 16:18 BingSiteAuth.xml
drwxr-xr-x   6 www   wheel      6 18 окт.  01:50 bl-content/
drwxr-xr-x   8 root  wheel     24 18 окт.  01:50 bl-kernel/
drwxr-xr-x   2 root  wheel     29 18 окт.  01:50 bl-languages/
drwxr-xr-x  18 root  wheel     18 18 окт.  10:51 bl-plugins/
drwxr-xr-x   3 root  wheel      3 18 окт.  01:50 bl-themes/
-rw-r--r--   1 root  wheel    757 28 июня  01:07 index.php
-rw-r--r--   1 root  wheel  13877 19 окт.  18:22 migrate.php
drwxr-xr-x   4 root  wheel      4 19 окт.  18:40 migrations/
-rw-r--r--   1 root  wheel    166 18 сент. 21:24 robots.txt

Как видно по итоговому отчёту и содержимому, скипт поместил сконвертированные данные в подкаталог migrations. При этом были удалена информация к нестандартным модулям расширения с целью избежать потенциальных проблем с совместимостью данных.

Теперь удалим старую инсталляцию, добавим новую и развернём сконвертированны данные.

root@beta:/usr/local/www/kostikov.co # rm -rf bl-*/ index.php migrate.php
root@beta:/usr/local/www/kostikov.co # mv migrations/bl-content/ bl-content/
root@beta:/usr/local/www/kostikov.co # rm -rf migrations/
root@beta:/usr/local/www/kostikov.co # chown -R www bl-content/
root@beta:/usr/local/www/kostikov.co # fetch https://df6m0u2ovo2fu.cloudfront.net/builds/bludit-v2.0.zip
bludit-v2.0.zip                               100% of 1895 kB  553 kBps 00m03s
root@beta:/usr/local/www/kostikov.co # unzip bludit-v2.0.zip
Archive:  bludit-v2.0.zip
   creating: bludit-v2.0/
...
root@beta:/usr/local/www/kostikov.co # mv bludit-v2.0/* .
mv: rename bludit-v2.0/bl-content to ./bl-content: Directory not empty
root@beta:/usr/local/www/kostikov.co # rm -rf bludit-v2.0/ bludit-v2.0.zip install.php
root@beta:/usr/local/www/kostikov.co # ll
total 54
-rw-r--r--   1 root  wheel     0 19 окт.  01:21 .megasync
drwxr-xr-x   2 root  wheel     2 15 окт.  03:00 .well-known/
-rw-r--r--   1 root  wheel    85 10 сент. 16:18 BingSiteAuth.xml
drwxr-xr-x   5 www   wheel     5 19 окт.  18:40 bl-content/
drwxr-xr-x   9 root  wheel    24 19 окт.  18:49 bl-kernel/
drwxr-xr-x   2 root  wheel    28 19 окт.  18:49 bl-languages/
drwxr-xr-x  20 root  wheel    20 19 окт.  18:49 bl-plugins/
drwxr-xr-x   8 root  wheel     8 19 окт.  18:49 bl-themes/
-rw-r--r--   1 root  wheel   757 16 окт.  20:08 index.php
-rw-r--r--   1 root  wheel  1083 16 окт.  20:08 LICENSE
-rw-r--r--   1 root  wheel  1963 16 окт.  20:08 README.md
-rw-r--r--   1 root  wheel   166 18 сент. 21:24 robots.txt

На выходе получим полностью работающий сайт на новой версии с прежним содержимым.

3. Модули расширения

Как следует из полученной при выполнении конвертации данных информации, плагины Bludit CMS не были трансформированы в новый формат. Действительно, вследствие существенных изменений во второй версии часть модулей оказались несовместимы с новой версией.

Для компонентов из стандартного дистрибутива следует произвести их повторную настройку в административном разделе. Дополнительные модули, в числе которых у автора оказались AddToAny, Textarea и разработанные им самостоятельно Ads4U и Yandextools, в ходе проведённой ревизии оказались в случае с Textarea и Yandextools полностью совместимы с новейшей версией Bludit, а AddToAny и Ads4U потребовали серьёзной модификации. Cовместимые с v2.0 модули расширения написанные автором можно найти на Github. На момент написания статьи это уже упомянутые Ads4U и Yandextools, а также альтернативная реализация для системы AddToAny — a2a.

Все три плагина могут быть скачены в едином архиве и развёрнуты в системе управления содержимым.

root@beta:/usr/local/www/kostikov.co # fetch https://github.com/xm74/bludit2-plugins/archive/master.zip
master.zip                                    100% of   12 kB   46 MBps 00m00s
root@beta:/usr/local/www/kostikov.co # unzip master.zip && rm master.zip
Archive:  master.zip
   creating: bludit2-plugins-master/
...
root@beta:/usr/local/www/kostikov.co # mv bludit2-plugins-master/* bl-plugins
root@beta:/usr/local/www/kostikov.co # rm -rf bludit2-plugins-master/

4. Новые пути

Если вы переезжаете с уже работающего сайта на новую версию Bludit CMS, то вы наверняка столкнётесь с проблемой, связанной с упомянутым выше изменением стандартных путей для контента типа "опубликованный" или, в прошлой терминологии, для постов. Проблема эта может стать небольшой (или наоборот — огромной) SEO катастрофой, поскольку при обращении к содержимому про прежним ссылкам, к примеру, из поисковых систем будет выдаваться ошибка "Страница не найдена".

Поэтому для обеспечения плавной миграции к обновлённой структуре разумно будет сделать переадресацию к новому местоположению страниц. В случае используемого автором HTTP/2 сервера H2O это потребует простой модификации конфигурационного файла (подробнее о первоначальной настройке читайте в статье "Переезд блога на HTTP/2 сервер H2O").

root@beta:/usr/local/www/kostikov.co # cat /usr/local/etc/h2o/h2o.conf
# see https://h2o.examp1e.net/ for detailed documentation
# see h2o --help for command-line options and settings

# v.20171019 (c)2017 by Max Kostikov http://kostikov.co e-mail: max@kostikov.co
...
# --- kostikov.co
    "kostikov.co:80":
        paths: &kostikov_301
            "/":
                redirect:
                    status: 301
                    url: https://kostikov.co/
    "www.kostikov.co:80":
        paths: *kostikov_301
    "kostikov.co:443":
        <<: !file /usr/local/etc/h2o/hdr/kostikov.co.full.h2o
        listen:
            port: 443
            ssl:
                 <<: *default_ssl
                 certificate-file: /usr/local/etc/letsencrypt/live/kostikov.co/fullchain.cur.pem
                 key-file: /usr/local/etc/letsencrypt/live/kostikov.co/privkey.cur.pem
        paths:
            "/":
                mruby.handler: |
                    acl {
                        deny { path.match("^bl-content/(.*)\.txt$") }
                    }
                file.dir: /usr/local/www/kostikov.co
                redirect:
                    url: /index.php
                    internal: yes
                    status: 307
            "/post":
                mruby.handler: |
                    lambda do |env|
                        str = env["PATH_INFO"].sub(/^\post/,"")
                        [301, {"location" => "https://kostikov.co#{str}"}, []]
                    end
...

Теперь при обращении к страницам с префиксом /post будет происходить его удаления из URL и переадресация на уже новый актуальный адрес с кодом HTTP 301 Moved Permanently, что позволит обеспечить нормальную навигацию и плавный транзит размещённой в поисковых системах информации о сайте.

5. PROFIT!

Статья была полезной? Тогда прошу не стесняться и деньгами, биткоинами или через замечательную систему Patreon.


Buy Bitcoin at CEX.IO