Дорабатываем напильником bashblog, часть первая
О том, что мне нужно от блога, я рассказывал в прошлой записи. Теперь небольшая заметка о том, как привести всё это к минимально рабочему виду. Для начала создадим новую директорию, скачаем туда скрипт и выдадим права на запуск.
mkdir blog
cd blog/
wget https://raw.githubusercontent.com/cfenollosa/bashblog/master/bb.sh
chmod +x bb.sh
Далее нам нужно открыть скрипт bb.sh и скопировать содержимое функции global_variables в отдельный файл с именем .config в той же директории.
# This function will load all the variables defined here. They might be overridden
# by the 'global_config' file contents
global_variables() {
global_software_name="BashBlog"
global_software_version="2.8"
### Копировать, начиная отсюда
......
### И заканчивая здесь
# Markdown location. Trying to autodetect by default.
# The invocation must support the signature 'markdown_bin in.md > out.html'
[[ -f Markdown.pl ]] && markdown_bin=./Markdown.pl || markdown_bin=$(which Markdown.pl 2>/dev/null || which markdown 2>/dev/null)
}
Затем нужно изменить параметры на нужные вам. Особое внимание следует обратить на параметр convert_filename. Те инструкции, что в нём содержатся по умолчанию, не работают. Хотя бы уже потому, что tr не работает с юникод строками и не способна без дополнительных ухищрений перевести буквы русского алфавита из верхнего в нижний регистр, поэтому я переписал эту часть следующим образом:
convert_filename="sed 's/[[:upper:]]*/\L&/g;s/[ъь]//g;s/ё/yo/g;s/ж/zh/g;s/ч/ch/g;s/ш/sh/g;s/щ/shh/g;s/ю/yu/g;s/я/ya/g;y/абвгдезийклмнопрстуфхцыэ/abvgdezijklmnoprstufxcye/;s/^-*//;s/ /-/g' | tr -dc '[:alnum:]-'"
Теперь всё готово к тому, чтобы создать структуру нового блога. Для этого нужно создать первый пост.
./bb.sh post
Please set your $EDITOR environment variable. For example, to use nano, add the line 'export EDITOR=nano' to your $HOME/.bashrc file
# Если вы видите такое сообщение, то нужно экспортировать редактор, которым
# вы собираетесь пользоваться в переменную EDITOR. В моём случае это vim,
# для новичков советую посмотреть в сторону micro
export EDITOR=vim
# Так же мы, следуя совету, мы можем добавить это в .bashrc, чтобы в
# следующий раз не отвлекаться
echo 'export EDITOR=vim' >> ~/.bashrc
# Запускаем снова
./bb.sh post
На этом этапе открывается текстовый редактор со следующим содержимым:
Title on this line
<p>The rest of the text file is an <b>html</b> blog post. The process will continue as soon
as you exit your editor.</p>
<p>Tags: keep-this-tag-format, tags-are-optional, example</p>
Первая строка - это то, что будет отображаться в заголовке. Она автоматически будет транслитерирована и далее будет использована в качестве имени файла для записи. Последняя строка содежрит теги. Они будут проиндексированы и для каждого тега будет создан отдельный файл. Всё, что между этими двумя строками - будет восприниматься как тело поста. Приводим содержимое к нужному нам виду и просто выходим из редактора. Я пока оставил всё как было.
To preview the entry, open http://example.com/blog/title-on-this-line.html in your browser
[P]ost this entry, [E]dit again, [D]raft for later? (p/E/d) p
Posted title-on-this-line.html
Rebuilding tag pages .
Rebuilding the index .
Creating an index page with all the posts .
Creating an index page with all the tags ...
Making RSS .
Собственно, это всё! Статический контент уже сгенерирован. Теперь для проверки можно открыть файл index.html из этой директории любым браузером и посмотреть, что из этого получилось. Далее можно изменить статью через запуск ./bb.sh edit title-on-this-line.html либо удалить её через ./bb.sh delete title-on-this-line.html а так же посмотреть список статей ./bb.sh list Удаление реализовано не очень удобно. Можно в принципе с тем же успехом удалить соответствующий html файл, после чего дёрнуть перестройку контента: ./bb.sh rebuild
Для проверки того, как это будет выглядеть на других устройствах, например, на планшете или телефоне, можно тут же в консоли быстренько поднять web сервер, но для начала нужно узнать серый адрес.
$ ip address show | sed '/inet/!d;/inet6/d'
inet 127.0.0.1/8 scope host lo
inet 192.168.1.161/24 brd 192.168.1.255 scope global wlp2s0b1
inet 172.19.0.1/16 scope global br-18887f018ce5
inet 172.17.0.1/16 scope global docker0
inet 172.18.0.1/16 scope global br-774bf4e252e8
Первый адрес нас вряд ли интересует - он будет доступен только на той же самой машине. Последние три мне достались от докера, да и подсети у них характерные. А вот второй - то, что нам нужно. Теперь нужно поднять тестовый сервер. Делается это крайне просто:
$ python -m SimlpeHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
Далее тут будут выводиться запросы - урлы, статусы, время, код возврата. Для выхода достаточно нажать Ctrl+C. Ну и в завершение будет неплохо положить всё получившееся в git (думаю, это не проблема, в противном случае рекомендую книгу ProGIT, там всё очень доступно изложено) и настроить синхронизацию на сервер, который будет этот контент раздавать. Я, не заморачиваясь долго, написал скрипт, который при помощи rsync будет синхронизировать то, что у нас получилось с домашним lxc контейнером, на котором крутится nginx:
#!/bin/sh
[ -n "$1" ] && dr='--dry-run'
rsync -zvar --compress --delete --exclude=backup --exclude=*.sh --exclude=.config --exclude=.*.tar.gz --exclude=todo.txt -e "ssh" ./* corpse@10.11.11.5:/var/www/shumiloff.ru/htdocs/ $dr
Если в качестве параметра при запуске скрипта было передано хоть что-то, то синхронизация пройдёт в dry-run режиме, т.е. фактически данные снихронизированы не будут, но будет выводиться информация о процессе синхронизации. В свою серую подсеть я попадаю при помощи ssh или vpn туннеля, но о настройке и того и другого расскажу как-нибудь в другой раз.