# Jekyll in OpenShift

Amazon S3 прекрасный сервис для размещения сайтов. Надежный, очень дешевый. Единственная проблема, которая меня не устраивала -- это скорость передачи файлов на сервер. У меня небольшой сайт, но даже для его размещения на сервере амазона требуется порядка двух-трех минут. Когда же я держал для своих сайтов отдельный сервер, передача всего сайта с помощью rsync занимало всегда не более одной-двух секунд. Разница просто на порядки...

Стал рассматривать различные возможные варианты хостинга с ssh. Интересовала не только сама возможность, но и надежность сервиса и наличие рекомендаций по нему. Таким образом в моем списке остались только [Github][1], [Heroku][2] и [OpenShift][3].

[1]: /2010/10/17/github-com-kak-xosting-sajtov/
    "GitHub.com как хостинг сайтов"
[2]: /2012/03/09/heroku/
    "Heroku в качестве хостинга сайтов"
[3]: https://openshift.redhat.com/app/
    "OpenShift by Red Hat"

GitHub у меня отпал по той простой причине, что он предоставляет возможность размещать только один сайт. Как создать дополнительный -- я так и не нашел, в итоге решил не страдать и просто перейти на использование других сервисов. (**upd**: как мне указали в комментариях, есть возможность создания множества сайтов на github, способ описан на странице [stackoverflow.com][5])

[5]: http://stackoverflow.com/questions/9082499/custom-domain-for-github-project-pages
    "Custom domain for GitHub project pages"

С Heroku у меня не сложилось. Так как для передачи файлов на сервер используется git-репозиторий. Организовать несколько репозиториев в рамках одного сайта мне не представляется возможным, а использование jekyll непосредственно на Heroku показало очень низкую производительность.

## OpenShift by Red Hat

Обратил внимание на OpenShift, как пишут на официальной странице -- OpenShift is Red Hat's free, auto-scaling Platform as a Service (PaaS) for applications. Условия использования сервиса оказались очень демократичными. Предоставляется возможность создания трех приложений в рамках одного аккаунта. И каждое приложение имеет квоту в 40&nbsp;000 файлов, 1 гигабайт пространства и 512 мегабайт оперативной памяти. При этом, как пишут в [FAQ][4], если необходимо использовать большее число приложений, необходимо лишь использовать различные аккаунты.

[4]: https://openshift.redhat.com/community/faq
    "OpenShift - Frequently Asked Questions"

В сети можно найти массу информации по использовании в OpenShift различных фреймворков и приложений. Но практически нигде не было описано, как использовать его вместе с Jekyll.

Создавать и управлять приложениями можно несколькими способами:

1. Web UI: использование данного интерфейса, на мой взгляд, очень удобно и не требует особых знаний. Но некоторые операции, как например, привязка домена к приложению с помощью веб-интерфейса, выполнить не возможно.
2. rhc client tools: консольное ruby-приложение, с помощью которого можно полностью управлять своим аккаунтом и создавать и редактировать приложения. Единственный минус заключается в том, что приходиться каждый раз вводить пароль от своего аккаунта при вводе любой команды.
3. Eclipse Plugin
4. Java Client API

Последние два варианта я не пробовал, и потому ничего не могу сказать по их работоспособности и удобности. В основной своей массе все операции я осуществлял с помощью Web UI.

## Jekyll in OpenShift

По умолчанию в OpenShift предлагается использование приложений и нет простого способа для размещения обычного статического сайта. Однако, как и в случае с Heroku, данная проблема очень легко решается путем создания PHP-приложения.

Итак -- регистрируемся на сервисе, подтверждаем свой адрес электронной почты, после чего необходимо создать свой namespace, то есть домен, в котором будут размещаться все приложения. Естественно, имя данного namespace должно быть уникальным. Затем загружаем свой публичный ключ для того, чтобы иметь возможность работать с сервером через консоль по SSH.

После чего приступаем к созданию своего первого приложения. Достаточно будет выбрать его тип, на данном шаге выбираем PHP-приложение. И задаем имя приложения. Теперь, когда приложение создано, нам будет предложено клонировать git-репозиторий на свой компьютер. Если мы работаем с Jekyll или любым другим генератором статических сайтов, делать это совершенно не обязательно. Просто потому, что загружать файлы на сервер можно двумя способами: используя git или используя rsync. Естественно, что в случае Jekyll второй способ куда удобнее.

Просто дописываем в наше Rakefile в правило для deploy следующую команду:

```shell
sh "rsync -az --delete public/ server:~/app/repo/php/"
```

Где app -- это имя нашего приложения, а server -- это имя конфигурации SSH, что была прописана в файле `~/.ssh/config`, которая задается в виде:

```conf
Host server
    HostName app-namespace.rhcloud.com
    User f34545176723434502d345a1e345492
    Port 22
```

Где app-namespace.rhcloud.com -- домен нашего приложения, а f34545176723434502d345a1e345492 -- идентификатор пользователя, который будет указан после создания приложения.

Собственно на этом все. Генерируем сайт и загружаем его на сервер. Осталось только задать доменное имя. Для этого используется консольная утилита rhc, установим ее:

```shell
$ sudo gem install json_pure
$ sudo gem install rhc
```

И теперь определяем привязку к домену:

```shell
$ rhc app add-alias -a app --alias www.domain.com -l user@mail.com
```

При этом app -- это имя нашего приложения, а user@mail.com -- это адрес электронной почты, на который был зарегистрирован аккаунт. На данном этапе, после ввода команды, необходимо будет ввести пароль от нашего аккаунта. В случае успеха, появится сообщение SUCCESS, если этого не произошло, а выдалось сообщение об ошибке, но в веб-интерфейсе привязка появилась, рекомендую удалить привязку и проделать эту операцию повторно. Для удаления привязки используется команда:

```shell
$ rhc app remove-alias -a app --alias www.domain.com -l user@mail.com
```

Если все прошло успешно, необходимо у своего доменного регистратора создать запись типа CNAME, которая будет указывать на домен с нашим приложением.

## Итоги

OpenShift показался мне довольно интересным сервисом. В отличие от GitHub, он позволяет размещать полноценные приложения, и при этом это может быть не одно приложение. А в отличие от Heroku, бесплатно предоставляется значительные ресурсы для каждого приложения. При этом есть возможность работать с сервером по SSH, загружать файлы по rsync. И, опять же в отличие от Heroku, веб-сервером можно управлять с помощью файлов htaccess.

Теперь осталось посмотреть на то, насколько этот сервис является стабильным и как много времени сайт будет недоступен по причине каких-то работ на сервере. Но оценить это можно будет только спустя определенное время.

