Сегодня многие блоггеры считают, что WordPress стал слишком перегружен лишним функционалом и превращается из платформы для блогов в полноценную и сложную CMS. Это вовсе не плохо — разнообразие плагинов, модулей и тем, доступных сейчас в сети, позволяет использовать возможности платформы практически для любых целей. Однако у этого разнообразия есть и обратная сторона медали. Нагромождение модулей негативно сказывается на производительности сайта, при том, что даже «чистый» вордпресс не может похвастаться выскокой скоростью работы.
Ghost
Некоторое время назад на сайта стартапов Kickstarter был запущен проект под названием Ghost, слоган которого был «just a blogging platform» (платформа только для блогов). Идея пришлась многим по вкусу и проект собрал почти $200.000, вместо изначальных $25.000. Сейчас проект активно развивается и на официальном сайте уже доступна для скачивания версия 0.3.3.
Меня, как и многих других, очень заинтересовал этот проект. Во-первых, мне нравится минималистичный дизайн. Во-вторых, WordPress и правда немного избыточен для моих нужд и слегка туповат в работе. А в-третьих, меня завлекло то, что Ghost разрабатывается на Node.js — технология, о которой очень много говорят в последнее время. Я решил попробовать в действии, что же это за «just a blogging platform», и установить его себе в Windows Azure как дополнение к основному блогу.
Создание сайта в Windows Azure
Перед тем, как перейти непосредственно к работе с Ghost, нам сперва потребуется создать службу Web Sites, где мы будем хоститься. Делается это как обычно через портал управления Windows Azure. В меню New (плюсик внизу страницы) выбираем Compute -> Web Site -> Quick Create. На текущем этапе нам нужен пустой сайт без каких-либо предустановленных компонентов. Все, что нам потребуется, мы доставим далее.
После того, как сайт будет создан, нам необходимо произвести пару настроек. Во-первых, нужно сделать определенный финт ушами для того, чтобы Ghost правильно работал (подробнее — ниже). Перейдите на вкладку Configure и найдите там раздел app settings. В нем надо создать такую строку: KEY=NODE_ENV, VALUE=production.
Во-вторых, нам надо настроить способ, как передать данные с рабочего компьютера в облако. Для этого в Windows Azure есть поддержка систем контроля версий, таких как TFS или Git. Поскольку проект Ghost является Open Source и сам поставялется через GitHub, то мы тоже настроим на своем сайте Git-репозиторий и будем работать с ним. Делается это просто: на вкладке Quick Access (которая с облачком и молнией) есть пункт Integrate source control:
Нажимаем на Set up deployment from source control и выбираем Local Git repository:
Стоит упомянуть, что среди доступных вариантов есть еще и TFS и прочие системы контроля версии (даже Dropbox), но для нашего случая мы выберем Git.
На этом настройка облака Windows Azure завершена и можно переходить к наиболее интересной части — установке и настройке Ghost.
Настройка рабочего окружения
Установить Ghost можно двумя способами. Первый и самый простой — это скачать уже скомпилированные файлы напрямую с официального сайта проекта. Этот метод хорош тем, что не требует никаких дополнительных действий со стороны пользователя. Однако, поскольку проект находится в активной фазе развития, у вас есть риск, что вы скачаете не самую последнюю версию проекта, которая не будет содержать важных исправлений. Так было в моем случае. Скачав архив с сайта проекта, я получил набор файлов, который отлично устанавливался и запускался локально, однако совершенно не хотел работать в облаке.
Поэтому я считаю, что на данный момент лучше сначала пойти более долгим путем, чтобы не иметь проблем в дальнейшем. Долгий путь заключается в самостоятельной сборке готового пакета из исходников Ghost. И это только сначала звучит слишком сложно, а на деле вам нужно будет потратить лишних 10-15 минут на все.
Итак, что нам в итоге нужно сделать:
- Установить Node.js. Дистрибутив берется на официальном сайте Node.js. Устанавливается как обычная программа Windows. Главное следите за тем, чтобы он прописался в PATH, чтобы потом можно было пользоваться командами node, не указывая их полный путь в системе.
- Установить клиент для Git. Консольный клиент для Windows можно скачать на оф. сайте. Также посмотрите, чтобы он прописал вне нужные пути в PATH, или же вам придется работать из специальной командной строки Git Bash, как это делаю я.
- Установить Grunt. Это утилита для компиляции JavaScript проектов. Она нужна нам для того, чтобы из исходников Ghost сформировать готовый пакет для публикации. Для установки Grunt вам достаточно из командной строки выполнить команду
npm install grunt-cli --g
. Программа npm идет вместе с nodejs и является по сути менеджером пакетов наподобие apt-get в Debian Linux. Удобная штука, с помощью которой можно скачать и установить все необходимые для работы расширения. - Для того, чтобы Grunt заработал, нам надо дополнительно установить Ruby. Скачать его можно тоже на официальном сайте.
- Также для работы Grunt необходимы два расширения для Ruby под названием Bourbon и Sass. Установить их оба можно одной командой
gem install bourbon
.
На этом настройка рабочего окружения завершена.
Подготовка Ghost
Подготовка Ghost разбивается на два этапа. Первый — получение файлов из официального репозитория на GitHub и последующая их компиляция. Второй — финишная настройка конфигов и прочих вещей, чтобы запустить блог в Windows Azure. Приступим!
Репозиторий Ghost на GitHub находится по этому адресу. Чтобы получить файлы проекта на свой компьютер, откройте Git Bash (его вы установили на предыдцщем этапе в п.2), перейдите в папку, где хотите сохранить этот проект и выполните команду:
git clone https://github.com/TryGhost/Ghost.git
Через какое-то время на вашей машине появится локальная копия репозитория Ghost со всеми файлами, которые вам будут нужны. Далее наши действия такие (то, что иде после # считается комментарием и выполнению не подлежит):
# перейдите в папку, где непосредственно лежат файлы проекта npm install # эта команда скачает и установит все пакеты node.js, которые нужны Ghost grunt init grunt prod # эти команды "скомпилируют" проект и сформируют пакет для установки
Теперь надо сделать еще один финт. Дело в том, что по умолчанию сайт Node.js, работающий в Azure, считает стартовой страницей файл с названием server.js. В Ghost же стартовой страницей является index.js, поэтому нам надо самостоятельно убрать эти разногласия. Делается это очень просто. Создаем в блокноте файл server.js в корневой директории Ghost и пишем там одну единственную строку:
var GhostServer = require('./index');
Сохраняем изменения. Все, теперь Windows Azure корректно найдет настроящий стартовый файл Ghost'а.
Итак, мы уже почти готовы опубликовать свой новый блог в Azure. Осталось лишь настроить конфиги. Тут все довольно просто. В корневой директории Ghost есть файл под названием config.example.js. Переименовываем его в config.js и открываем на редактирование.
Далее ищем такой блок:
production: { // must not contain a path suffix after the hostname - "subdirs" are not (yet) supported! url: 'http://my-ghost-blog.com', mail: {}, database: { client: 'sqlite3', connection: { filename: path.join(__dirname, '/content/data/ghost.db') }, debug: false }, server: { // Host to be passed to node's `net.Server#listen()` host: '127.0.0.1', // Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT` port: '2368' } },
Обратите внимание, что мы ищем блок production. Это как раз конфигурация, для которой мы задавали значение параметра DEV_ENV в самом начале поста. Тут нас интересует две вещи, а именно параметр url в самом начале блока и параметр port в самом конце. Первый надо изменить на тот url, на котором будет жить ваш блог. В случае Windows Azure по умолчанию этот URL выглядит примерно так: <YOUR-SITE>.azurewebsites.net. Вы можете изменить его, если вручную пропишете домен для веб-сайта, но это уже тема отдельной истории. Ну а значение port меняем на строку process.env.PORT (без кавычек). Итого, должно получиться следующее:
production: { // must not contain a path suffix after the hostname - "subdirs" are not (yet) supported! url: 'http://<YOUR-SITE>.azurewebsites.net', mail: {}, database: { client: 'sqlite3', connection: { filename: path.join(__dirname, '/content/data/ghost.db') }, debug: false }, server: { // Host to be passed to node's `net.Server#listen()` host: '127.0.0.1', // Port to be passed to node's `net.Server#listen()`, for iisnode set this to `process.env.PORT` port: process.env.PORT } },
Ну и последний шаг — открываем файл .gitignore в корневой папке проекта, находим там строки ниже и комментируем их:
# /core/client/assets/css # /core/built # config.js
Если бы мы этого не сделали, то при установке блога в Windows Azure Git просто бы не стал их копировать, проигнорировав.
Публикация сайта в Windows Azure
Теперь у нас все готово к финальному действию — публикации сайта. Для этого надо выполнить несколько команд в Git Bash:
git add . git commit -m "first ghost publish" git remote add azure https://glamcoder@ghost-test-glamcoder.scm.azurewebsites.net:443/ghost-test-glamcoder.git git push azure master
Сперва мы сохранили все изменения с репозиторием, которые мы сделали. Затем мы закоммитили их с определенным комментарием. На третьей строке мы создали ссылку на удаленный Git-репозиторий. Адрес этого репозитория создается специально на каждый Web Site в Windows Azure (это мы сделали в самом начале) и его можно узнать на вкладке Deployments. Последняя команда отправит все файлы на сервере Windows Azure. Вы можете увидеть, как в процессе публикации выполняются различные команды на сервере. После того, как все закончится, вы должны будете увидеть свой сайт, работающий уже в облаке, а на вкладке Deployments будет красоваться что-то вроде этого:
Для первичной настройки блога зайдите по ссылке <ВАШ-ПУТЬ-К-БЛОГУ>/ghost, где вам будет предложено ввести имя пользователя и пароль администратора. После чего вы полностью закончите устанавливать и настраивать свой новый блог и сможете приступить к творчеству!
Удачи!
Впечатления от Ghost
Я установил себе Ghost как второй блог параллельно с основным (http://ghost.glamcoder.ru/) и хочу поделиться своими впечатлениями от работы.
Начну с плюсов. Во-первых, мне очень нравится markdown как язык разметки для написания постов. Он очень чистый, легко редактируется и интуитивно понятный. А еще он больше гиковский, что добавляет ему шарма. Это что-то вроде LaTeX по сравнению с MS Word.
Во-вторых, Ghost работает шустро. Гораздо быстрее, чем WordPress, даже не задушенный плагинами. Понятное дело, что это скорее не столько заслуга Node.js (хотя наверно и его тоже), сколько просто молодость проекта и он еще не успел стать мультикомбайном типа Nero. Но разработчики уверяют, что он таким никогда не станет и всегда останется чистым и простым. Посотрим.
В-третьих, мне нравится его дизайн. Все просто, понятно, ничего лишнего. Минимализм в лучшем его проявлении.
Это, пожалуй, не все плюсы Ghost, но по крайней мере самые заметные.
С минусами не все так просто. Наибольшая претензия у меня к тому, что блог практически не кастомизируется средствами интерфейса. Т.е. из всех настроект доступно только редактирование названия и описания блога, да фонового изображения на главной странице. Все, больше ничего нет. Ни тебе менюшки, ни виджетов, ни публикации в соц. сети. Нет даже коммментарием под постами. Иными словами, блог действительно лишен всего, что не относится к написанию текста. Но тем не менее я не могу назвать это минусом. Это особенность платформы, с которой надо смириться. Любые модификации, которые вам нужны, вы можете написать сами. В прямом смысле — открыть исходный код и дописать туда нужные модули. Например, код для Яндекс.Метрики я вставлял с помощью редактирования стандартного шаблона вьюхи. То же предлагается сделать для подключения комментариев от Disqus. Полная свобода творчества!
Что хочется сказать в итоге. Если вы гик, программист, технарь (нужное подчеркнуть) и вы любите минимализм, то Ghost вам скорее всего придется по душе. Если же вы любите, чтобы все работало сразу и из коробки с минимальными усилиями — то проходите мимо. В скором времени ребята из Ghost обещают запустить свой собственный
P.S. Статья была подготовлена с использованием материалов из блога Скотта Хансельмана. Там все то же самое, только более технически.
P.P.S. Пост во многом написан для тех, кто не знаком с Git и Windows Azure. Так что прошу прощения за излишние подробности и простоту. Ваши комментарии, пожелания и советы always welcome :)
Автор: glamcoder