Перенос сайта на 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 свободными от паролей.