Установка 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и перелогиниться.