Итак, в первой серии мы работали над установкой и настройкой VPS. Настало время поговорить о том, как задеплоить туда сайт на Jekyll.
- Часть первая - настройка сервера
- Часть вторая - деплой Jekyll (эта статья)
- Часть третья - деплой Middleman
Для начала немного теории. Что такое генератор статических сайтов? Это библиотека, снабженная шаблонизатором. Вы прикручиваете к проекту собственный макет, наполняете его своим контентом, после чего вводите jekyll build
, а результатом выполнения этой команды становится директория build
в корне проекта, которая содержит скомпилированные HTML и CSS-файлы. То есть по сути вся работа генератора - перевести в нужный момент ваш код в формат HTML, CSS и JS файлов. После этого получившийся набор файлов - ваш сайт - можно забросить на любой хостинг и он станет доступным для посещения. Никакой динамики, никаких баз данных.
Из этого следует, что для деплоя с помощью git нужно выполнять довольно простую последовательность операций:
- Внести изменения в проект
- Сделать коммит
- Отправить коммит на удаленный сервер (наш VPS)
- На сервере выполнить команду
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 (хотя догадаться теперь уже несложно).