Дело в красной шляпе: сервер OpenShift от RedHat и установка Jekyll

27 дек. 2012

Очередной акт пьесы о бесплатных хостингах для Jekyll, после успешных покорения GitHub и укрощения Heroku, посвящается серверу OpenShift. Последний представляет собой облачную PaaS-платформу от небезызвестной компании Red Hat на основе открытого исходного кода OpenShift Origin. Поддержка программ на различных языках, доступ по SSH делают установку приложений одновременно гибкой и простой, подробности сего действа в отношении Jekyll и будут изложены ниже.

Настройка OpenShift и создание приложений

Конечно же, вам стоит начать с регистрации на OpenShift; управление приложениями осуществляется из web-консоли или обычной консоли после установки клиентской части

$ gem install rhc

Перво-наперво, выполним настройку

$ rhc setup

где вам любезно предложат загрузить публичный SSH-ключ ~/.ssh/id_rsa.pub (а при его отсутствии — ещё и создать новый) и выбрать уникальный namespace — субдомен для размещения приложений. В дальнейшем, если нужна справка по команде, дополните её параметром -h.

Посредством команд можно добавить вручную как SSH-ключ

$ rhc sshkey add <name> <path to SSH key file>

так и namespace

$ rhc domain create <namespace>

Предусмотрена и возможность последующего изменения субдомена приложений:

$ rhc domain update <old namespace> <new namespace>

Само приложение создаётся следующим образом:

$ rhc app create <app> ruby-1.9

где после имени идёт тип приложения, полный список которых выдаётся командой

$ rhc cartridge list

Приложение доступно по адресу http://<app>-<namespace>.rhcloud.com. В довершение установки, Git-репозиторий приложения будет клонирован в директорию с именем <app>.

Генерация сайта с Jekyll

OpenShift использует модуль Passenger (существует в вариациях для Apache и Nginx), предоставляющий интерфейс Rack, который в свою очередь управляется файлом config.ru в директории приложения. При отсутствии config.ru за основу сайта берётся содержимое магической директории public/, которая определяет корень приложения DocumentRoot. Без сожалений можно расстаться со всеми файлами приложения, за исключением ключевых директорий .openshift/, public/ и, пожалуй, tmp/ (как временное хранилище файлов). Чтобы Git не удалял директории public/ и tmp/ (он рассматривает пустые директории как несуществующие), в каждой из них находится пустой файл .gitkeep.

За генерацию содержимого сайта будет отвечать Jekyll, а функции сервера переложим на плечи Passenger, который справляется с такими обязанностями на порядок лучше, чем сервер WEBrick из состава Jekyll. Поэтому директорией назначения в _config.yml должна быть указана public/:

destination: public

Позаботимся о том, чтобы Jekyll не удалял файл public/.gitkeep, добавив в _config.yml запись

keep_files: ['.gitkeep']

Остальные файлы в директории назначения Git должен игнорировать в соответствии со строками в .gitignore

/public/*
!/public/.gitkeep

Однако мы всё ещё не указали запуск Jekyll-а, для чего как раз предназначены скрипты в директории .openshift/action_hooks/, каждый из которых соответствует своей стадии запуска. Перед этим делом неплохо ознакомиться с переменными окружения OpenShift, а также с примерами приложений. В нашем случае достаточно добавить в .openshift/action_hooks/build следующее:

cd $OPENSHIFT_REPO_DIR
bundle exec jekyll build

Заключительные штрихи по настройке

Для установки gem-ов, необходимых приложению, создадим Gemfile

source 'https://rubygems.org'

gem 'jekyll'

и выполним команду

$ bundle install

Во избежание проблем с кодировкой укажем в _config.yml

encoding: UTF-8

После чего развернём приложение на OpenShift:

$ echo 'Hello, World!' > index.html
$ git add .
$ git commit -m "my first commit"
$ git push origin master

Для локальной генерации сайта запускается команда

$ bundle exec jekyll serve -w

генерируя сайт по адресу http://localhost:4000.

Наверх

Наверх