summaryrefslogtreecommitdiff
path: root/content/posts/2025-05-19-nxpcms.md
blob: d1d30e6ff146c524814da8483dde49d24e609a8d (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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 блогу в силу его статичности