diff options
Diffstat (limited to 'content/posts/2025-05-19-nxpcms.md')
| -rw-r--r-- | content/posts/2025-05-19-nxpcms.md | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/content/posts/2025-05-19-nxpcms.md b/content/posts/2025-05-19-nxpcms.md new file mode 100644 index 0000000..d1d30e6 --- /dev/null +++ b/content/posts/2025-05-19-nxpcms.md @@ -0,0 +1,77 @@ +--- +date: '2025-05-19T00:00:00+03:00' +title: NXPCMS — моя CMS'ка (ч.1) +--- + +Долгое время я пользовался Hugo (а одно время, даже WordPress!). И в целом, всем +он меня устраивал. Но недавно, произошло, казалось бы не связанное. Я снова +воспылал интересом к треккерной музыке. При этом я немного полазал по сети, +поспрашивал знакомых и собрал достаточно большую (>80Гб!) коллекцию. Но просто +хранить на диске было скучно и я решил её выложить во внешку. Так появился +shelter.neonxp.ru (сейчас не работает, почему - объясню ниже). + +Сначала список файлов сервил в веб просто Caddy, но у него был недостаток: он не +мог дать послушать треккерный файл без скачивания. Тогда я накидал простенькую +программку, которая так же просто отдаёт содержимое директории, но позволяла +слушать треккерную музыку. Через некоторое время я подумал, а почему бы не +прикрутить к ней и предпросмотр и других файлов? Сказано-сделано. Прикрутил +сначала просмотрщик markdown и txt файлов. Дальше, мысль полетела уже по +накатанной, и подумалось мне, что это же простенькая CMS. В эту сторону проектик +я и стал развивать. И вот вчера я таки перевёл этот сайт на мою собственную CMS! + +Но пишу только сейчас, потому что вчера после переезда уже ничего не хотел +писать, ибо переезд был непрост. И как я уже выше говорил, пока отключил shelter +в пользу этого сайта. Позже заведу и shelter. Особенности моей CMS: +* минимум конфигурации: один бинарник, который при запуске сервит сайт из + текущей рабочей директории. +* структура сайта ~= файловая структура, отсюда и листинг файлов на каждой + странице +* нет какого-то общего файла конфигурации (аля /etc/...), вместо этого для + каждой директории можно создать свой файл .config.json (формат hjson, на самом + деле), который распространяет своё действие на текущую директорию, и на все + вложенные. Вложенные директории могут иметь свои конфиги, которые могут или + частично или полностью переопределять родительский конфиг. Например: +``` +/var/www/neonxp.ru/.config.json + +{ + "title": "NeonXP.log", + "description": "Личный сайт Go-разработчика из Казани", + "index": [ "index.gmi", "index.md", "index.txt"], + "url": "https://neonxp.ru/", +} +``` +а для директории постов важно, чтобы сортировка была в обратном порядке, поэтому +её конфиг выглядит следующим образом: +``` +/var/www/neonxp.ru/posts/.config.json + +{ + "description": "Блог", # <- перезапись родительского конфига + "desc": true, +} +``` +Немного напоминает дедушку Apache2 с его .htaccess :) Но мне это кажется весьма +удачной идеей. +* Основной формат разметки — gemtext. Просто потому что мне он нравится своим + радикальным минимализмом. Минималистично настолько, что его парсер в html для + этой CMS я написал примерно за час с нуля. + +На самом деле, написать свою CMSку — достаточно старая мечта, и в своём прошлом, +я неоднократно это делал, ещё на PHP (ну тогда это было модно). Ну и кто мне +запретит сделать это сейчас, с теми идеями что я указал выше?) По факту +получилось что-то среднее между веб-сервером аля Apache2 и классическими CMS, и +мне это нравится. + +## Что дальше? + +А дальше я буду развивать её в сторону тех фич, что нужны лично мне: +* Доделать миграцию постов и материалов из старого блога. Сейчас всё + импортировано в автоматическом режиме и выглядит откровенно плохо +* Поддержка предпросмотра большего числа форматов файлов +* Хотелось бы сделать Basic авторизацию + загрузку файлов по http +* Раз уж используется gemtext — сделать и поддержку gemini протокола +* Прикрутить cgi или скрипты на lua? А почему-бы и нет? :) Хотя бы сделаю + какую-нибудь олдскульную гостевуху +* Прикрутить все эти клёвые indieweb штуки, которые было весьма проблемно + прикрутить к Hugo блогу в силу его статичности |
