Деплой Jekyll и Middleman на VPS, часть вторая

Фрей написал, 13.01.2016

Итак, в первой серии мы работали над установкой и настройкой VPS. Настало время поговорить о том, как задеплоить туда сайт на Jekyll.

Для начала немного теории. Что такое генератор статических сайтов? Это библиотека, снабженная шаблонизатором. Вы прикручиваете к проекту собственный макет, наполняете его своим контентом, после чего вводите jekyll build, а результатом выполнения этой команды становится директория build в корне проекта, которая содержит скомпилированные HTML и CSS-файлы. То есть по сути вся работа генератора - перевести в нужный момент ваш код в формат HTML, CSS и JS файлов. После этого получившийся набор файлов - ваш сайт - можно забросить на любой хостинг и он станет доступным для посещения. Никакой динамики, никаких баз данных.

Из этого следует, что для деплоя с помощью git нужно выполнять довольно простую последовательность операций:

  1. Внести изменения в проект
  2. Сделать коммит
  3. Отправить коммит на удаленный сервер (наш VPS)
  4. На сервере выполнить команду jekyll build

После выполнения этой цепочки действий наш проект будет обновлен и доступен извне.

Нетрудно догадаться, что в первую очередь нам нужно будет поставить на сервер git. Это несложно, заходим по ssh на сервер и выполняем команду установки:

apt-get install git-core

Это было несложно. Теперь, поскольку jekyll - это гем, написанный на Ruby, нам понадобится установить на наш сервер этот язык. Воспользуемся RVM, хотя можно использовать и rbenv, на ваш вкус. Установка RVM займет некоторое время, потерпите несколько минут.

gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
curl -sSL https://get.rvm.io | bash -s stable --ruby

Если вы используете Ubuntu, терминал может ругнуться на отсутствие программы curl - её тоже очень просто установить:

apt-get install curl

После установки RVM или rbenv не забываем перезагрузить терминал. Если вы выполняете команды на десктопной убунту или OS X, вашим файлом будет ~/.bashrc, если вы используете zsh - то ~/.zshrc:

source ~/.bash_profile

Установим сам jekyll:

gem install jekyll

Теперь нужно настроить git таким образом, чтобы после получения коммита он разворачивал наш проект в необходимую директорию. Создадим директорию, в которой будут храниться гит-репозитории, и в ней - поддиректорию для репозитория нашего проекта и сразу перейдем в неё:

cd ~/
mkdir -p repos/first.com.git
cd repos/first.com.git

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

git init --bare

В нашей директории появилось несколько файлов и поддиректорий. Если вы знакомы с git hooks, все будет знакомо, если нет, то я немножко расскажу. В директории hooks могут располагаться файлы, которые задают определенное поведение для git: например, мы можем написать инструкцию по разворачиванию нашего статического сайта после получения коммита. Собственно, это мы и сделаем. Переходим в директорию hooks:

cd hooks

Создадим и откроем файл post-recieve:

vi post-recieve

В нем мы описываем инструкции по разворачиванию:

#!/bin/bash -l
GIT_REPO=$HOME/repos/first.com.git
TMP_GIT_CLONE=$HOME/tmp/git/first.com
PUBLIC_WWW=/var/www/first.com/html

git clone $GIT_REPO $TMP_GIT_CLONE
jekyll build --source $TMP_GIT_CLONE --destination $PUBLIC_WWW
rm -Rf $TMP_GIT_CLONE
exit

Сначала мы создали несколько переменных с путями к гит-репозиторию, месту для хранения временных файлов и месту расположения нашего проекта. Далее клонировали полученный код из репозитория в во временную папку, выполнили команду jekyll build, указав источник и папку назначения. Затем удалили временные файлы и завершили работу программы.

Сохраните и выйдите из файла. Наделим файл необходимыми правами, чтобы он мог выполняться:

chmod +x post-recieve

Вот и все. Теперь осталось совсем немного.

На вашем локальном компьютере, в директории вашего jekyll-проекта, который будет размещаться по адресу first.com, выполните команду добавления удаленного репозитория:

git remote add vps [email protected]:repos/first.com.git

Не забудьте заменить единицы в ip-адресе на адрес вашего сервера. После выполнения этой команды вы можете деплоить ваше проект одной простой командой:

git push vps master

Теперь git получит коммит, выполнит созданный нами скрипт post-recieve, который развернет проект в нужной директории, после чего проект станет доступен извне.

На этом завершается вторая серия нашего короткометражного сериала “Как задеплоить статический сайт на Jekyll и Middleman на VPS”. В третьей и последней серии я расскажу, как деплоить сайты на middleman (хотя догадаться теперь уже несложно).