Drupal 6, на котором крутился сайт, морально устарел и мы решили переехать. Рассматривались разные движки для переезда, хотелось отказаться от реляционных баз данных в пользу удобства резервного копирования (интересовал полный перенос в git со всеми плюшками), но при этом не хотелось и навредить поддержкой, с написанием новых статей самому себе при использовании выбраного движка. И среди интересующих движков нас заинтересовали сайты на статике, отличный сайт с выборкой можно найти на StaticGen, из вариантов рассматривали движки написанные на Python и Golang (последний был очень интересен как быстро растущий и требующий минимальных усилий при переносе на другой сервер, копируем бинарник и вуаля).
Паралельно решили протестить два движка на статике Pelican и Hugo. На обоих движка поискали набор тем, поискали ключевые плагины и возможность их интеграции (список взяли с Drupal 6), также возможные расширения и удобство управления. В конечном счете выбор пал на Hugo.
Так как markdown разметка универсальна для любых статических движков, чтобы было несомненно плюсом, в конечном итоге нужно было только добавить какие-то специфические поля которые описаны для статического движка и мы решили начать процесс миграции со статей. У pelican был значительный плюс pelican-import
, который поддерживал импорт статей из Wordpress, чтобы было не совместимо с нашими целями и был разработан план:
- Миграция Drupal 6 на последний движок Drupal (7 на тот момент).
- Экспорт статей с Drupal 7 на последний движок Wordpress (3 на то время).
- Импорт из Wordpress 3 в Pelican.
Первый пункт был самый простой в реализации:
- Развернуть локальный Drupal 7
- Накатить на него базу из бэкапов
- Перейти по ссылке 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 прошу в коменты или на гитхаб :)