summaryrefslogtreecommitdiff
path: root/content/posts/2025-05-19-nxpcms
diff options
context:
space:
mode:
author2026-02-02 00:35:54 +0300
committer2026-02-02 00:35:54 +0300
commitbfdd73d7324a4f66a16f55d4fb064b0ff08d40e9 (patch)
tree27fff9c802dcdd22960bb2e776e58278000d0364 /content/posts/2025-05-19-nxpcms
parentПоправил шаблон (diff)
downloadblog-bfdd73d7324a4f66a16f55d4fb064b0ff08d40e9.tar.gz
blog-bfdd73d7324a4f66a16f55d4fb064b0ff08d40e9.tar.bz2
blog-bfdd73d7324a4f66a16f55d4fb064b0ff08d40e9.tar.xz
blog-bfdd73d7324a4f66a16f55d4fb064b0ff08d40e9.zip
Большая чистка блога
Diffstat (limited to 'content/posts/2025-05-19-nxpcms')
-rw-r--r--content/posts/2025-05-19-nxpcms/index.md84
1 files changed, 84 insertions, 0 deletions
diff --git a/content/posts/2025-05-19-nxpcms/index.md b/content/posts/2025-05-19-nxpcms/index.md
new file mode 100644
index 0000000..11b8d53
--- /dev/null
+++ b/content/posts/2025-05-19-nxpcms/index.md
@@ -0,0 +1,84 @@
+---
+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 блогу в силу его статичности