Предисловие

В предыдущих статьях, посвящённых генератору статических сайтов pelican были описаны основные задачи и цели, которые хотел решить работая с пеликаном, о описаны начальные действия необходимые для того чтобы создать свой блог, поместить в нём пару статей и запустить на локальном сервере.

Следующим шагом, по плану, необходимо разместить проект на каком-либо хостинге для проектов, а результат на веб‑хостинге.

Что нужно сделать

Итак, ориентировочный перечень задач:

  • Создать новый проект на github.
  • Перенести код проекта dsmblog в созданный проект.
  • Настроить синхронизацию.
  • Разместить результат на github.io.
  • Настроить синхронизацию для результирующего блога с хостингом.

Почему git

Выбор, в общем-то, между github и bitbucket. Оба хостинга имеют необходимый бесплатный функционал (мне пока нужно git и веб‑хостинг, возможность работать через SSL есть и там, и там). Субъективные оценки интерфейса старался не учитывать. Для себя отметил пока такие особенности ресурсов:

github

  • имеет большое сообщество;
  • не ограничивает количество человек в команде;
  • не даёт права создавать бесплатные закрытые проекты;
  • много маститых разработчиков размещают свои официальные репозитории на этом сервисе.

bitbucket

  • предоставляет возможность создавать до пяти бесплатных приватных проектов (основное преимущество);
  • ограничивает количество разработчиков для бесплатных проектов;
  • сообщество довольно большое, хоть и поменьше чем у github;
  • По маститости, вроде как поскромнее чем github.

В общем, если нужен приватный проект − однозначно bitbucket, в противном случае − скорее github.

Так как прятать dsmmblog я не планирую, решил разместить на github.

Содержание

Перенос dsmblog на github

Регистрация и установка git.

Если ещё раньше этого сделано не было (регистрация на github и | или установка git) − самое время.

Регистрация на github предельно проста, хорошо описана (хоть и на английском, но понятно для того чтобы выбрать бесплатный вариант для обычного пользователя).

Установка git довольно проста (по крайней мере, в Linux). По поводу git config −изменения записываются в файл ~/.gitconfig и могут легко быть исправлены и (или) дополнены. Более того, можно сразу создать (или скопировать из архива) этот файл.

Мой файл конфигурации:

[user]
    name = UserName  # user name
    email = User@e.mail  # email address that will be associated with your Git commits
[core]
    autocrlf = input  # settings for CRLF conversion
    safecrlf = true  #  settings for CRLF conversion
    excludesfile = ~/.gitexcludes  # like .gitignore but for all projects
[credential]
    helper = cache --timeout=3600  # allow to input username and password once per timeout

Есть вопрос выбора между SSL и HTTPS. Первый вариант (SSL), вроде даёт возможность не вводить каждый раз пароль и под Linux реализуется элементарно. Второй (HTTPS) рекомендован githib-ом + в комбинации с параметром helper = cache --timeout=3600 позволяет вводить пароль только один раз за сеанс работы. В итоге я остановился на HTTPS (пошёл по пути наименьшего сопротивления).

Содержание

Хостим код на github

Вариант очевидный. Есть локальный dsmblog и есть одноимённый проект на github. Нужно синхронизировать. Можно, но сложно. Хотя, если на github совсем пустой проект, то не так уж и сложно. Но, как сказал классик, мы пойдём другим путём.

Сохраняем свой проект под другим именем (например, dsmblog_local):

mv dsmblog dsmblog

Клонируем проект с github и инициализируем:

git clone https://github.com/dmisem/dsmblog.git && cd dsmblog && git init

Копируем проект:

cp -rf ../dsmblog_local/* ./

Почти всё. Осталось настроить параметры синхронизации (назовём это так). Об этом в следующем подразделе.

Локальные параметры

Локальные параметры: * некоторые параметры из pelicanconf.py, которые не нужно выкладывать в общедоступную среду; * настройки .gitignore, указывающие какие файлы не будут учитываться git и, соответственно, не будут залиты на github.

Фрагмент pelicanconf.py, которые "подтягивают" данные из файла local_settings.py:

import local_settings as ls

AUTHOR = ls.AUTHOR
SITENAME = ls.SITENAME
SITEURL = ls.SITEURL
PATH = ls.PATH
TIMEZONE = ls.TIMEZONE
LOCALE = ls.LOCALE
DEFAULT_LANG = ls.DEFAULT_LANG

Что должно быть в local_settings.py, по моему, очевидно.

При работе с python3.4 возник нехороший нюанс - import не подтягивает фалы, которые расположены в той же папке, что и pelicanconf.py, можно решить явным добавлением пути проекта в sys.path:

import os
import sys
SITE_ROOT = os.path.realpath(os.path.dirname(__file__))
sys.path.append(SITE_ROOT)
import local_settings as ls

подробно этот вопрос разбирается на stackoverflow

Мой .gitignore:

# Generated by vim
.ropeproject/
__pycache__/

# Generated by pelican
# Folder output changed to dsmblog
#   for pushing into gh-pages branch.
cache/
output/
/dsmblog/

# temporary files
*.pid
test*
tmp*
*.pyc

# local settings
local_settings.*
Makefile
fabfile.py

Здесь считаю нужным отметить папки output/ и /dsmblog/. На github хранится только код без результирующего сайта, Сам итоговый сайт будет размещён отдельно (подробнее в следующем разделе. Для этого потом папку output/ нужно будет переименовать в /dsmblog/.

Заливаем код

Добавляем свои файлы в индекс git:

git add .

Коммитим изменения (параметр -m если коммитятся только изменения или добавления, для коммита также и удалений нужно использовать -a) и "пушим" (отправляем) изменения на github:

git commit -m "first commit all project to github."
git push

Проходим авторизацию (если не используем SSL), заходим на сайт https://github.com и авторизируемся (или обновляем страницу если уже там) и наблюдаем изменения.

github как веб-хостер

Веб-хостинг для проектов github располагается на сайте https://pages.github.com сайты называются Pages, подробная справка по адресу https://help.github.com/categories/github-pages-basics/.

Поддерживаются два типа страниц: страница пользователя (вариант с организацией я не рассматриваю) и страница проекта. Страницы (любого типа) можно создать (и потом редактировать) с помощью неплохого, простого генератора, который имеет небольшое количество довольно симпатичных шаблонов (правда, не отзывчивых).

В учебно-практических целях остановился на таком варианте:

  • создаю персональный сайт, где размещаю краткую информацию о себе и ссылки на свои проекты;
  • создаю сайт проекта dsmblog куда помещаю созданный статический блог.

Персональный сайт

Персональный сайт решил сделать с помощью встроенного генератора.

Для этого строго по инструкции по генерированию сайта создаю проект dmisem.github.io, и для нового проекта создаю сайт с помощью генератора (потом изменить с помощью генератора можно зайдя в меню Settings).

На первом этапе корректируем на языке Markdown (сайт содержит довольно подробную инструкцию по markdown) наполнение, созданное генератором. На втором выбираем шаблон. Через несколько минут сайт будет доступен по адресу http://dmisem.github.io/

Статический блог (страница проекта).

Суть создания страницы проекта − создание независимой ветки gh-pages и размещение там статического сайта.

Самый простой способ - создать страницу с помощью генератора (через команду меню Settings). Заодно можно посмотреть что содержит стандартная страница.

Далее клонируем ветку внутрь папки проекта (таким образом внутри папки dsmblog будет создана ещё одна папка dsmblog) и инициализируем её:

git clone -b gh-pages https://github.com/dmisem/dsmblog.git && cd dsmblog && git init

и вычищаем старое содержимое:

git rm -rf . && git commit -a "clear old content" && git push

Теперь возвращаемся в основной каталог и генерируем сайт во вновь созданную папку:

pelican -o dsmblog content

Теперь записываем изменения на github:

cd dsmblog && git add . && git commit -m "generated on timestamp" && git push

Всё! Можно заходит на сайт http://dmisem.github.io/dsmblog/

Содержание

Автоматизация и синхронизация

Автоматизировать внесение изменений кода на github смысла не вижу.

А вот работу с созданным сайтом вижу по такой схеме:

  • сначала создаётся сайт в папке output;
  • проверяется его работа на локальном сервере;
  • если все в порядке, создаётся окончательная версия в папке dsmblog и отправляется на сервер.

Автоматизировать стоит только последний пункт. Для этого создан скрипт git.dsmblog.sh с таким содержим:

#!/usr/bin/env bash

DIR=`pwd`"/dsmblog"
CDT=`date +%Y-%m-%d\ %H:%M`  # Current datetime
GT="git --git-dir=${DIR}/.git --work-tree=${DIR} "

pelican -o dsmblog content
echo Generated

${GT}add . && ${GT}commit -a -m "Autogenerate: ${CDT}" && ${GT}push
echo Pushed!

Содержание