newsmode
search
Меню
arrow_back Назад

Switching Blog from Wordpress to Jekyll

auto_awesomeКраткое саммари

Андрей Карпаты рассказывает, как он отказался от WordPress в пользу генератора статических сайтов Jekyll, вдохновившись постом Марка Рейда о переходе на Hakyll. WordPress он критикует как раздутую, медленную и уязвимую систему с динамическим рендерингом на PHP: его собственный блог был взломан, а посты заражены спамом, плюс контент застревает в SQL-базе и сам WordPress заблокирован в Китае. Jekyll, изначально написанный сооснователем GitHub Томом Престоном-Вернером, хранит все посты в виде Markdown-файлов в папке _posts, а команда jekyll build превращает их в статический HTML в папке _site. Вся кодовая база состоит примерно из 7 файлов, что упрощает правку CSS и шаблонов — например, добавление Google Analytics и комментариев Disqus. Jekyll тесно интегрирован с GitHub: репозиторий вида username.github.io автоматически собирается и хостится, а контент навсегда сохраняется в простом Markdown. Карпаты демонстрирует рабочий процесс публикации поста через git push и заключает, что не мог бы быть счастливее от этого решения.

Вдохновлённый постом Марка Рейда Switching from Jekyll to Hakyll, я решил отказаться от Wordpress и попробовать Jekyll (замечу, что пока я не чувствую себя достаточно прокачанным, чтобы перейти на основанный на Haskell Hakyll). Могу уверенно сказать, что я не мог бы быть счастливее от этого решения.

Монстр Wordpress

«Так что же не так с Wordpress?» — спросите вы. Давайте посмотрим — всё:

Блоги на Wordpress неуклюжие, медленные и раздутые. Wordpress рендерится динамически с помощью .php. На самом деле есть лишь несколько нишевых применений, где это действительно необходимо. Динамическое выполнение кода делает ваш блог уязвимым для хакеров и эксплойтов: атаки нулевого дня, вирусы и так далее. Мой собственный блог был взломан примерно 2 месяца назад, и все мои посты оказались заражены спамным содержимым, которое волшебным образом снова и снова вставляло себя, когда я его удалял. Wordpress популярен среди масс людей, которые не разбираются в этом лучше, и поэтому привлекает наибольшее количество спамеров. Ваши посты навсегда застревают в уродливой, специфичной для Wordpress SQL-базе данных (фу). Их нельзя легко импортировать/экспортировать. Вы по-настоящему не владеете своим контентом в сыром и гибком виде. Wordpress заблокирован в Китае.

Wordpress — это раздутый, неуклюжий, медленный, уязвимый, закрытый бардак.

Jekyll <3

Jekyll описывает себя как инструмент для создания «простых, ориентированных на блоги статических сайтов» и был изначально написан одним из сооснователей Github, Томом Престоном-Вернером. Он плоский и прозрачный: рабочее пространство вашего блога — это одна папка с конфигурационным файлом и несколькими папками для CSS и HTML-шаблонов. Весь мой контент, например, живёт в двух папках:

Мои посты в блоге — это просто файлы в одной папке _posts, написанные на Markdown. Включая, конечно, и этот пост. Мои изображения лежат в одной папке assets.

Вот и всё. Вы вызываете из командной строки $ jekyll build, и он автоматически рендерит все посты, которые находит в папке _posts, из markdown в HTML, оборачивает их шаблонами заголовка/подвала, создаёт родительскую индексную страницу со списком всех ваших постов и выводит всё в директорию _site. Директория _site содержит всю вашу веб-страницу в виде статического контента. Затем её можно загрузить на любой веб-сервер по вашему усмотрению.

Вся кодовая база состоит примерно из 7 файлов. Легко увидеть, как HTML-шаблоны складываются в ваш итоговый сайт. Тривиально подправить CSS или любой из HTML-шаблонов. Например, я добавил код отслеживания Google Analytics на все свои страницы, подправив html-шаблон, а также комментарии Disqus ко всем своим постам, добавив Javascript-код Disqus в шаблон постов.

Интеграция с Github

Наконец, как вы и могли ожидать, Jekyll тесно интегрирован с Github: создайте репозиторий с именем вида username.github.io и добавьте в него свои файлы. Github автоматически скомпилирует ваши файлы с помощью Jekyll и сделает доступной папку _site. Например, мой блог живёт на karpathy.github.io. Таким образом, Github гарантирует, что ваш блог прекрасно сохраняется навсегда в простом markdown, а также хостит ваш контент!

Jekyll находит баланс: в нём ровно столько возможностей, сколько нужно.

Пример рабочего процесса

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

$ cd _posts $ vim 2014-07-02-example-page.markdown

Теперь мы пишем пост в блог на markdown, вот пример файла:

--- layout: post title: "Post title" excerpt: "A nice post" date: 2014-07-02 10:00:00 --- Hello world, this is **markdown**.

Вернёмся теперь обратно в консоль. Я мог бы предпросмотреть изменения на локальном веб-сервере с помощью $ jekyll serve --watch (ключ watch обновляет любые изменённые файлы по мере того, как вы их пишете). А теперь просто опубликуем это вживую:

$ cd .. $ git add . $ git commit -m "new blog post" $ git push

После последней команды Github увидит, что мой репозиторий изменился, и автоматически обновит karpathy.github.io, чтобы он указывал на заново сгенерированный _site. Мой пост опубликован!

В общем, это лишь краткая проба на вкус. Загляните в Jekyll и начните вести блог здравым способом!