MediaCMS
Професійна розподілена система керування вмістом для високонавантажених інтернет-видань
Розробка професійних вебсайтів, здатних витримувати великі навантаження, процес доволі складний. Потрібно або тримати в штаті власних висококваліфікованих програмістів, які будуть його поступово створювати та згодом постійно вдосконалювати, або замовляти його створення іншій спеціалізованій організації. Обидва варіанти не з дешевих тому дозволити їх собі можуть лише одиниці.
Для всіх інших існують доступні безплатні готові рішення на зразок WordPress з усіма наслідками: відносно низька швидкодія, якість коду та безпека. Цими недоліками на початках можна знехтувати поки проєкт молодий та тільки починає розвиватись. А що робити тим кому можливостей WordPress вже не вистачає та водночас відсутні необхідні ресурси для створення власного професійного високонавантаженого вебсайту?
Саме для цих організацій створена професійна система керування вмістом MediaCMS. Вона має як безплатну версію з базовим функціоналом, так і розширену платну. Це робить її доступною та надає можливість всім охочим отримати переваги використання якісного продукту. На ринку система займає проміжну нішу між простішою WordPress з одного боку та складною індивідуальною розробкою інтернет-видання під замовлення з іншого.
Масштабування
Дуже часто інтернет-видання зіштовхуються з проблемою перевантаження серверів. Це може бути викликано вірусною новиною, на сторінку якої зайшло водночас багато читачів з соціальних мереж. Або навіть банальною хакерською атакою, за допомогою якої на вебсайт надсилають велику кількість запитів за короткий інтервал часу. Особливо небезпечно якщо ці сплески активності відбуваються в районі обіду — в години максимального рівня природного трафіку протягом робочого дня більшості інтернет-видань.
Більшість систем керування вмісту створені на основі класичної монолітної архітектури — весь програмний код може працювати лише на одному фізичному сервері. Попри свою очевидну простоту така архітектура має суттєвий недолік — його масштабування може бути лише вертикальним, шляхом збільшення фізичних характеристик сервера. А це, своєю чергою, значно обмежує можливості витримувати великі навантаження.
Натомість програмний код MediaCMS має розподілену архітектуру та складається з трьох незалежних частин: головна частина (Main), панель керування (Panel) та сервер зображень (Image). Їх можливо використовувати як на одному сервері, так і на окремих, що дає можливість залучити для розширення не тільки вертикальне масштабування, а ще й горизонтальне. Такий підхід разом з окремим розміщенням сервера баз даних суттєво збільшує максимальну продуктивність системи в порівнянні з монолітною.
Швидкодія
Зазвичай програмний код виконуються послідовно. Кожна наступна команда повинна дочекатись закінчення виконання попередньої та лише тоді починає виконуватись сама. Під час роботи простих команд, які виконуються швидко, проблем не виникає. А ось діяльність складних команд, які для своєї роботи потребують багато виділених ресурсів, створює затримки часу.
Натомість програмний код MediaCMS виконується асинхронно. Програма не зупиняється в очікуванні результату складної команди, а швидко перемикається на виконання інших команд з потоку. А коли складна команда закінчить свою роботу, тоді програма отримає результат її роботи й врахує в подальших алгоритмах.
Відсутність необхідності очікувати закінчення виконання кожної команди відчутно пришвидшує опрацювання коду в цілому. Найбільший ефект від цієї технології проявляється при високих навантаженнях на серверах з багатьма потоками (ядрами, процесорами). Саме такий комплексний підхід дає можливість вебсайтам, створеним на основі MediaCMS, обробляти значно більшу кількість запитів за одиницю часу на противагу іншим системам з синхронним виконанням команд.
Безпека
З метою підвищення рівня безпеки програмний код що виводить публікації для читачів та їх редагування розділені на дві окремі незалежні частини. Звернення до них відбувається за різними адресами (доменами). А використовуватись вони можуть на окремих фізичних серверах або навіть в різних дата-центрах. Головна частина системи (Main), відповідальна лише за показ публікацій, не містить функціоналу для редагування. Навіть у випадку її злому відсутня можливість для внесення змін.
Для редагування інформації в MediaCMS використовується окрема незалежна частина “Панель керування” (Panel). ЇЇ адреса відома лише обмеженій кількості людей що займається редагуванням даних. Доступ до неї обмежено за допомогою обов'язкової авторизації персональним паролем користувача, який зберігається в зашифрованому вигляді. Додатково використовується reCAPTCHA для запобігання підбору пароля. Після авторизації взаємодія користувача з вебсайтом відбувається за допомогою індивідуально згенерованого токена JSON Web Token (JWT) стандартизованого у RFC 7519.
На третьому рівні захисту доступ користувачів до редагування інформації додатково обмежений на основі типових ролей (читач, автор, редактор, головний редактор, адміністратор). Перша роль в переліку надає можливість лише читати та коментувати публікації. Кожна наступна роль надає більше прав доступу для редагування порівняно з попередньою. Користувачі панелі керування бачать в меню лише ті пункти, які їм дозволено використовувати згідно з їх ролями.
Інновації
Проєкт MediaCMS реалізовано на базі останніх стабільних версіях сучасних програмних технологіях. Програмний код всіх трьох частин, як на стороні сервера так і настороні клієнта, написаний з використанням популярної мови JavaScript. Такий універсальний підхід спрощує пошук програмістів для підтримки проєкту та дозволляє заощаджувати на їх необхідній меншій кількості. До того ще робить сам процес розробки надзвичайно легким і відповідно швидшим.
На серверній частині використана платформа Node.js, фреймворк Express.js, шаблонізатор EJS для генерації сторінок на головному сайті, система керування базою даних MongoDB для зберігання даних та розподілене сховище Redis для кешування парамтерів на сервері зображень. На стороні клієнта використовується бібліотека React для панелі керування, набір інструментів Bootstrap, мова стилів CSS та мова розмітки HTML
Для редагування публікацій використовується сучасний гібридний онлайн WYSIWYG-редактор власної розробки на базі популярного редактора TinyMCE. Він дає можливість зручно редагувати контент одночасно як у вигляді сучасних блоків, так і у вигляді класичного WYSIWYG редактора. А структура публікації зберігається не у вигляді звичного HTML, а власному форматі з використанням JSON для зручного динамічного використання в браузері.
Зовнішній вигляд головного сайту виконано зі застосованням “гумового дизайну”, який дає можливість вебсайту автоматично підлаштовувати свій вигляд під пристрої різних розмірів. При цьому для економії трафіку одночасно адаптуються й розміри зображень. Зменшені копії зображень в широкому діапазоні по ширині (від 320 до 3840 пікселів) попередньо автоматично створюються під час завантаження зображень на сервер.
Відкритість
Безплатна версія MediaCMS розповсюджується як проєкт з відкритим початковим кодом (Open Source) та розміщується на GitHub. Такий підхід дає можливість всім охочим ознайомитись з продуктом, поставити питання які цікавлять та висловити свої побажання. Також відкритість дає можливість швидко виявляти та виправляти помилки, що робить систему більш стабільною.
Незалежність
Як тільки ви завантажили проєкт з репозиторію github, ви отримали свою незалежну копію проєкту. З нею ви можете робити все що вам заманеться — повністю адаптовувати її під свої потреби. Гнучка система контролю версій робить процес оновлення проєкту контрольованим. Ви зможете оновлювати лише ті частини, які ви бажаєте оновити. У всіх інших частинах проєкту, наприклад де вами внесені зміни, оновлювати код не потрібно.
Доступність
Не менш важливий фактор є те що система безплатна. Адже більшість інтернет-видань організації неприбуткові й платні професійні системи керування вмістом для них недоступні. А для тих організацій які потребуватимуть додаткових можливостей буде доступна платна версія MediaCMS Pro.
Застосування
Система керування вмістом MediaCMS вже успішно впроваджена та працює на декількох українських проєктах. Замовники після внесення деяких змін для адаптації до їх потреб задоволені результатом та високо оцінили якість продукту. Також вони допомогли виявити деякі дрібні помилки, які були оперативно виправлені.
Професіоналізм
В стандартній версії системи реалізований базовий функціонал, достатній для діяльності інтернет-видання. Для тих хто захоче більше можливостей зможе придбати платну професійну версію MediaCMS Pro.
В ній додатково можуть бути реалізовані такі можливості як повна підтримка типізації TypeScript, використання різних фреймворків Next.js/Koa.js/Fastify, взаємодія з MongoDB за допомогою Mongoose, кешування даних за допомогою Memcached, логування за допомогою Winston, повне покриття тестами Jest, використання контейнерів Docker, підтримка багатомовності, пошуковий рушій Elasticsearch, платна підписка для читачів, темна тема оформлення.
Питання
-
Чи можливо встановити MediaCMS на локальному ноутбуці/комп’ютері/сервері?
Так, архітектура системи керуванням вмістом MediaCMS дуже гнучка і її можна використовувати як на одному вузлі, так і на декількох. Для розміщення всіх частин разом (Main, Panel, Image) їх можна запустити на різних внутрішніх IP-адресах та скористатися вебсервером Nginx в режимі проксі, для перенаправлення зі зовнішньої IP-адреси зі стандартним портом 80 на внутрішні віртуальні сервери.
-
Як саме встановити MediaCMS?
Інструкції з встановлення для кожної частини системи (Main, Panel, Image) детально викладені в описі до кожного репозиторію на GitHub. Вам лише необхідно по черзі зайти на їх адреси та виконати їх. В кінці для зручності можете окремо завантажити та імпортувати демонстраційні дані в MongoDB з відповідного репозиторію MediaCMS Data.
-
Як перенести дані з наявної системи керування вмісту в MediaCMS?
Інтернет-видання можуть використовувати різноманітні системи керування вмістом, через що неможливо написати один універсальний конвертер даних. Відповідно для кожного з них необхідно написати власний. Зазвичай в організаціях існують власні IT-спеціалісти, які добре знають свою власну систему і можуть написати її швидше, якісніше та безплатно.
Висновок
Раніше лише в дуже великих медіаресурсів була можливість використовувати швидкі та надійні професійні системи керування вмістом. Це спричиняло суттєвий дисбаланс на ринку та шкодило справедливій конкуренції. MediaCMS змінила правила гри на ринку та дає можливість не тільки великим інтернет-виданням, але й середнім і навіть початківцям відчути переваги якісного продукту. Для цього достатньо переглянути скриншоти, потім відвідати демонстраційний вебсайт за адресою нижче та зрештою локально встановити для тестування безплатну версію з репозиторіїв GitHub.