Создание блога на Octopress 3

Егор Смоляков специально для Типичного программиста

В этой заметке я расскажу, как создать и опубликовать собственный блог на Github Pages.

Многие программисты, в частности хакеры, знают, что такое Octopress и им не нужно его представлять, а для незнающих поясню: это движок, который генерирует HTML-страницы. Он построен на популярном инструменте Jekyll и использует его возможности на полную.

Установка, запуск и остановка

Для установки можно пойти традиционным путем, установив Ruby, Node.js, а потом загрузить Octopress 3 из Ruby Gems:

$ ~> gem install octopress --pre

Но я сделал проще для других и себя, а именно создал Docker-контейнер, который разместил на Docker Hub. Как установить Docker можно прочитать в официальной документации. Далее, будем считать, что он установлен и готов к работе, то есть работает команда docker.

Вы можете клонировать проект с Github’a или скачать архив базового шаблона Octopress 3.

$ ~> git clone https://github.com/eg0r/docker-octopress-3 my-blog
$ ~> cd my-blog
$ ~/my-blog > sudo docker run --name octo-blog -d -v 'pwd'/source:/srv/source -p 4000:80 egorsmkv/octopress-3

После ввода последней команды Docker скачает собранный мной образ и запустит контейнер. Проверить его наличие в запущенных можно командой sudo docker ps. Откройте браузер и вставьте ссылку http://127.0.0.1:4000. Должна отобразиться базовая страница блога без постов.

Чтобы их добавить, можно зайти через SSH в контейнер и воспользоваться стандартными командами Octopress (запомните, что права доступа для нового файла будут у root‘a):

$ ~/my-blog> sudo docker run --entrypoint="/bin/bash" -v `pwd`/source:/srv/source -i -t egorsmkv/octopress-3
$ ~/my-blog> octopress new post "Hello, Lord!"
# => New post: _posts/2015-04-17-hello-lord.markdown

Или создать в папке source/_posts файл нового поста. Рекомендую сперва воспользоваться первым вариантом и создать пример поста, чтобы увидеть его структуру.

Дальше нужно посмотреть репозиторий и документацию Octopress, чтобы лучше разбираться в его командах. На момент написания статьи документации по третьей вресии пока нет, поэтому воспользуйтесь командой octopress --help.

Чтобы остановить, а если точнее, удалить контейнер (просто операции создания и удаления контейнера выполняются быстрее, чем остановки и запуска), выполните команду:

$ ~/my-blog> sudo docker rm -f octo-blog

Публикация на Github Pages

Чтобы ваш блог был доступен другим пользователям, его можно разместить на хостинге. Сервис Github предоставляет возможность бесплатно размещать файлы на своём домене вида логин.github.io. Для этого достаточно создать репозиторий с таким именем.

Далее дело за малым, коммитим и пушим в него наш сгенерированный сайт:

$ ~/my-blog> cd source
$ ~/my-blog> git add -A
$ ~/my-blog> git commit -m "Generate `date`"
$ ~/my-blog> git push

Замечу, что в папке source есть файл .gitignore, который не добавляет папки _site — сгенерированные файлы блога — и .sass-cache — кэш SASS-файлов. Дело в том, что Github Pages поддерживает Jekyll и генерация происходит автоматически, но мы можем коммитить только папку _site и отправлять её содержимое, но разницы нет.

Автоматизируем команды

Каждый раз вводить команды запуска, остановки или отправки на хостинг довольно утомительно, поэтому правильным решением будет написать файл Makefile, который это дело сведет до ввода двух команд:

start:
    sudo docker run --name octo-blog -d -v `pwd`/source:/srv/source -p 4000:80 egorsmkv/octopress-3

stop:
    sudo docker rm -f octo-blog

restart: stop start

bash:
    sudo docker run -v `pwd`/source:/srv/source -i -t --entrypoint="/bin/bash" egorsmkv/octopress-3

push:
    cd source && git add -A && git commit -m "Generate `date`" && git push

Теперь все очень просто:

# создаём контейнер блога
$ ~/my-blog> make start
# останавливаем его
$ ~/my-blog> make stop
# создаём контейнер блога
$ ~/my-blog> make restart
# верхние две команды одной
$ ~/my-blog> make restart
# входим в SSH
$ ~/my-blog> make bash
# отправляем на Github Pages
$ ~/my-blog> make push

Послесловие

По умолчанию для генерации текстов используется kramdown, но он не позволяет удобно подсвечивать программный код. Можно изменить библиотеку на redcarpet в файле source/_config.yml. Кстати, в нем находятся и другие настройки блога.