переезд с drupal на hugo


Drupal 6, на котором крутился сайт, морально устарел и мы решили переехать. Рассматривались разные движки для переезда, хотелось отказаться от реляционных баз данных в пользу удобства резервного копирования (интересовал полный перенос в git со всеми плюшками), но при этом не хотелось и навредить поддержкой, с написанием новых статей самому себе при использовании выбраного движка. И среди интересующих движков нас заинтересовали сайты на статике, отличный сайт с выборкой можно найти на StaticGen, из вариантов рассматривали движки написанные на Python и Golang (последний был очень интересен как быстро растущий и требующий минимальных усилий при переносе на другой сервер, копируем бинарник и вуаля).

Паралельно решили протестить два движка на статике Pelican и Hugo. На обоих движка поискали набор тем, поискали ключевые плагины и возможность их интеграции (список взяли с Drupal 6), также возможные расширения и удобство управления. В конечном счете выбор пал на Hugo.

Так как markdown разметка универсальна для любых статических движков, чтобы было несомненно плюсом, в конечном итоге нужно было только добавить какие-то специфические поля которые описаны для статического движка и мы решили начать процесс миграции со статей. У pelican был значительный плюс pelican-import, который поддерживал импорт статей из Wordpress, чтобы было не совместимо с нашими целями и был разработан план:

  1. Миграция Drupal 6 на последний движок Drupal (7 на тот момент).
  2. Экспорт статей с Drupal 7 на последний движок Wordpress (3 на то время).
  3. Импорт из Wordpress 3 в Pelican.

Первый пункт был самый простой в реализации:

  1. Развернуть локальный Drupal 7
  2. Накатить на него базу из бэкапов
  3. Перейти по ссылке update.php и дело сделано.

Со вторым пунктом нужно было установить локально Wordpress 3, что собсно и сделали и начали гугление по поводу миграции данных с Drupal 7 на Wordpress 3. Нарыли вот эту статью, скачали скрипты из репы.

И положив в отдельную папку внутри Wordpress, с правкой строк коннекта к базе в Drupal2Wordpress.php. Открыл скрипт через браузер. Статьи мигрировались, но почему-то не отображались с нужной категорией, как статьи. Наверное, потому что миграция таксономии в скрипте не была предусмотрена.

Кстати, пользователи тоже не переехали. Но это не проблема, потому что у нас было всего два пользователя.

В базе Wordpress я поправил post_type:

update wp_posts set post_type = 'post' where post_type != 'revision';

Теперь надо через Wordpress экспортировать статьи в xml. Это тривиальная задача, в Wordpress есть для этого специальное меню по ссылке wp-admin/export.php

Осталось эскпортный xml перевести в кучу markdown статей с помощью pelican-import, установив необходимые зависимости:

pip install BeautifulSoup4 lxml

Хотим обратить внимание что без свежей версии lxml для Python, pelican-import просто зависает.

Ну и сама миграция:

mkdir /tmp/migrate
pelican-import --wpfile -m markdown -o /tmp/migrate /tmp/prolinuxorg.wordpress.2014-11-09.xml

В директории /tmp/migrate должно появиться много markdown файлов, которые пришлось обработать напильником sed, но это все равно быстрее, чем писать свои скрипты для миграции.

И мы перешли к следующей стадии переезда, тема для сайта:

В качестве темы для сайта была выбрана минималистичная тема Pixyll сделанная для Jekyll ориентированная под мобильный телефон, к сожалению текущий выбор тем для Hugo весьма скуден =( Посидев немного с напильником переделали ее под Hugo, исходный код темы вы можете найти у azmelanar’a в репе на GitHub’e.

Под конец добавили пару новых фич, то чего нам собственно не хватало:

  • поддержка тегов
  • поиск
  • социальные кнопки были перенесены в самый конец страницы
  • автор статьи
  • добавлена поддержка подсветки синтаксиса с помощью highlight.js
  • добавлены коментарии с помощью Disqus
  • немного переделана контактная форма, которая построена на базе forms.brace.io
  • Google Analytics
  • YouTube

Дополнительно написали скрипт для деплоя и сделали завязку на nginx (т.к. нужно было держать несколько виртуал хостов на 80 порте и rewrite rules, которые будут форвардить на статьи со старых урлов).

И собсно взлетели :D

Чем помог переезд? Немного рано отвечать на этот вопрос, но все же есть пару пунктов которые видны невооруженным глазом:

  • нагрузка на сервер минимальна, отдается только html
  • создание всех статей может проводится локально на машине
  • все изменения в теме и статьях отслеживаются с помощью git’a
  • не нужно делать отдельно бэкапы на машине, опять же все изменения в git’e и можно не бояться использовать даже самую дешевую vps’ку

Из того что заметили или планируем доделать:

  • нет нормальной постраничной навигации issue 96
  • нормальный поиск (в нашем случае реализовано через python скрипт, который занимается парсингом html страничек и созданием json индекса)
  • rss файл почему то генерируется с именем index.xml, а не rss.xml (не столь критично, просто немного путает)

Пока что все. Если будут вопросы, пожелания, комменты, pull requests прошу в коменты или на гитхаб :)

comments powered by Disqus