Установка Hakyll на Debian

Введение

Ниже описывается методика установки и использования системы генерации статических сайтов Hakyll на ЭВМ под управлением Debian Linux.

См. также статью про установку Hakyll для Windows.

Установка простая: libghc-hakyll-dev

Для Debian существует пакет libghc-hakyll-dev. Установим данный пакет:

aptitude install libghc-hakyll-dev

Создадим каркас для минимального сайта:

 $ cp -a /usr/share/hakyll/example/ my-site

Теперь можно перейти к разделу Развёртывание минимального сайта

Установка непростая: cabal

Будем действовать длинным и нудным путём --- при помощи cabal.

Замечание 1

Использование cabal потребует скачивания значительного числа пакетов и их пересборки (как в Gentoo) так что запаситесь терпением.

Замечание 2

Установку пакетов cabal производит по умолчанию в домашний каталог пользователя, то есть пакеты (и в частности hakyll) становятся доступны только пользователю запускавшему cabal.

При обновлении системных библиотек или компилятора ghc возможно нарушение работы Hakyll --- в этом случае придётся перезапустить процедуру установки при помощи cabal. В случае совсем капитального обновления для возвращения Hakyll работоспособности возможно придётся стереть временные файлы, которые создавались для работы Haskell-программ. Например, каталоги ~/.cabal и ~/.ghc.

Начальная установка на минимальный Debian

Установим компилятор Haskell, систему пакетирования программ на языке Haskell --- cabal, а также alex и happy, чтобы не собирать их при помощи cabal.

 # aptitude install ghc cabal-install libz-dev alex happy

Обновим список пакетов и установим Hakyll:

 $ cabal update
 $ cabal install hakyll

После окончания работы cabal install (эта работа может потребовать десятков минут) нам будет доступен исполняемый файл ~/.cabal/bin/hakyll-init.

Создадим каркас для минимального сайта:

 $ ~/.cabal/bin/hakyll-init my-site

Развёртывание минимального сайта # {#mysite}

Собираем исполняемый файл для генератора сайта:

 $ cd my-site
 $ ghc --make site.hs

Для создания новой записи достаточно создать новый файл posts/yyyy-mm-dd-NAME.markdown, где yyyy --- год, mm --- месяц, dd --- день создания записи, а NAME --- короткое имя записи, например, 2013-12-23-linux-screen-capture.markdown. Расширение markdown можно сократить до двух букв md.

Первые строчки файла должны содержать заголовок вида:

---
title: Название новой записи
author: Автор Новой Записи
published: 2014-01-01T00:00:00Z
tags: тег 1, тег 2, тег 3
---

Для конвертации страниц в формате Markdown в html-страницы Hakyll использует программу pandoc. Толковое описание диалекта Markdown, используемого в pandoc, тут.

Для генерации статического сайта необходимо выполнить

 $ ./site build

сгенерированный сайт окажется в каталоге _site, откуда его можно перебросить в место постоянной дислокации.

Hakyll можно запустить в режиме web-сервера для просмотра сгенерированного сайта:

 $ ./site server

По умолчанию сервер будет доступен по адресу http://localhost:8000.

Примеры сайтов на Hakyll

Примеры сайтов на Hakyll тут.

На что стоит обратить внимание:

git clone https://github.com/divarvel/blog
cd blog
ghc --make hakyll.hs
./hakyll build
./hakyll server

ctrl-c

export EDITOR=vi

bash ./new_post.sh
Post name > test2

mv posts/.2013-12-20-test2.md posts/2013-12-20-test2.md

./hakkyl rebuild
./hakyll server

Настройка web-сервера

Предположим, что статический сайт, который генерирует hakyll мы будем размещать на выделенном сервере. Создадим для этого на сервере пользователя blog, в домашнем каталоге которого и будем размещать сайт.

Использование rsync

Будем использовать rsync для быстрого копирования сгенерированного сайта на web-сервер. Предположим, что мы находимся в каталоге с исходными текстами нашего блога и только что сгенеририровали статический сайт в каталоге _site. Переправим содержимое _site в одноимённый каталог в домашнем каталоге пользователя blog на web-серевере web.server.to. Используем rsync для ускорения передачи данных:

rsync -v -az -e ssh --delete _site/ blog@web.server.to:_site

Использование apache

Настроим web-сервер apache для хостинга нашего блога. В каталог /etc/apache2/conf.d добавляем файл hakyll_blog.conf со следующим содержимым:

Alias /myblog /home/blog/_site

<Directory /home/blog/_site>
        # Allow
        allow from all
        order allow,deny
        # Deny
        #order deny,allow
        #deny from all
        #allow from 127.0.0.1
</Directory>

и перезапускам apache.

Теперь при попытке обратиться по адресу http://web.server.to/myblog в браузере должна показываться главная страница блога.

Примечания

NB: В Debian имеется пакет cabal-debian.

NB: При использовании cabal для установки исполняемых программ (alex и happy) возможно стоит выполнить

 $ echo "export PATH=$PATH:~/.cabal/bin" >> .bashrc

и перелогиниться.