Перенос сайта на github, travis-ci - инструкция по переносу octopress

Описание моего опыта переноса сайта на github, travis и загрузка по ftp на хостинг ps.kz

Причины

В прошлом году поставил домой себе сервер, перенес туда свои данные. для сайтов использую octopress. сидя из дома, редактировал статьи - добавление, изменение статьей.

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

Что хотелось

В интернете нашел несколько статей о том, как подружить jekyll + github + travis. Алгоритм следующий:

  • На гитхабе создаются новые статьи, делаются комиты;
  • на травис с гитхаба загружается последняя версия, происходит генерация сайта;
  • затем идет обратная загрузка с тревиса на гитхаб, но уже в ветку gh-pages.

Требования

  • Основное хранилище - github
  • Основная система сборки - travis
  • Возможность редактирования статей в онлайн-режиме
  • Автономный процесс - не нужно каждый раз ручками лезть, чтобы статья была опубликована
  • Бесплатность - ну не всегда есть возможность заплатить за услуги хостинга

Инструкция

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

Хостинг у меня используется в других проектах, так исторически сложилось. Плюс я знаком с владельцами ресурса.

Моя цель - хранить статьи на гитхабе, выгружать на хостинг.

Основные участники:

  • Репозитарий github, далее гитхаб
  • Система Сборки travis, далее тревис
  • Локальный компьютер, далее компьютер
  • Хостинг ps.kz, далее хостинг

На компьютере имеем локальную (и желательно последнею) версию сайта. Также должны быть установлены ruby, gem.

Шаг 1

Подготовка пакетов:

  • Создаем ключ для ssh;
  • устанавливаем необходимые пакеты для тревиса;
  • Особенность тревиса в том, что тревис не может последовательно зашифровать несколько файлов, то мы должны использовать архив. В данный архив мы помещаем три файла - Rakefile, _config.yml, deploykey;
  • Производим шифрование архива;
  • удаляем не нужные файлы (или в .gitignore добавим эти файлы, чтобы не загрузить на гитхаб).
ssh-keygen -f deploykey
gem install travis
travis login
cd $OCTOPRESSHOME
tar cvf encryptedfiles.tar Rakefile _config.yml deploykey
travis encrypt-file encryptedfiles.tar
rm Rakefile _config.yml deploykey encryptedfiles.tar

Обязательно запомните, что выведет команда тревис. это нужно добавить позже в файл _scripts/install.sh

Шаг 2

Создадим файл .travis.yml - основной файл конфигурации, используемый тревисом для сборки. В качестве примера можно взять мой конфиг

Шаг 3

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

Шаг 4

Выгружаем сайт на гитхаб. Выбираем наш репозитарий (если у вас несколько репозитариев на гитхабе), в настройках указываем ssh-ключ, используем для этого содержимое файла deploykey.pub. Будет использоваться тревисом.

Шаг 5

Подключаем к тревису, выбираем наш репозиторий, указываем количество одновременных сборок = 1( нам больше и не нужно).

Настройки для хостинга ps.kz

Я загружаю на хостинг данные через ftp сервер. Для чего нужен пакет lftp. Я изменил настройки Rakefile

ftp_user       = "USERNAME"
ftp_password   = "PASSWORD"
ftp_server     = "SERVERNAME"
ftp_target     = "TARGET"
deploy_default = "lftp"

desc "Deploy website via LFTP"
task :lftp do
  puts "## Deploying website via LFTP"
  ok_failed system("lftp -e 'set ssl:verify-certificate false; mirror -R --ignore-time --delete -v #{public_dir} #{ftp_target}; bye' -u #{ftp_user},#{ftp_password} #{ftp_server}")
end

Последствия

Проверил, работает. Теперь нет необходимости в выделенном сервере для сборки сайта. Можно настроить доступ к репозитарию для нескольких пользователей. Настроить совместную работу и публиковать статьи.

Что дальше делать

  • Изменить тревис, чтобы тревис загружал сайт на гитхаб в ветку gh-pages
  • Подумать и перенести переменные в тревис, и сделать файлы Rakefile, _config.yml свободными от паролей.
comments powered by Disqus